NeovimをLua環境に移行する 第2回
- #neovim #neovim-plugins #lua
NeovimのLua移行記事リンク
- 第1回
- 第2回(今回)
要約
今回はLua移行作業全体についてざっくりと振り返る
特にプラグイン導入作業中の失敗から得られた教訓を先に示しておく
数字で振り返るLua環境移行
とりあえず作業工程全体のイメージが掴みやすいと思うので数字で表してみる
- かかった期間は約1か月ほど
- 調査あるいは精査したVim/Neovimプラグインの総数は200個超
- 導入したプラグイン数(自作プラグインは除外)
init.luaの行数は3976行 (2024年7月19日現在)- 作業ログ(Markdown)は15000行以上
主にプラグインを全面的に見直したせいなのだが、そこそこ時間がかかった
(ただ総作業時間の半分程度はプラグインの調査にかかった時間だった気がする……)
プラグイン導入時の反省と教訓
今回Neovimに大量のプラグインを導入してみた訳だが、後から振り返った時「こうしておけばもっとスムーズに出来たな」と感じる部分があった
そこから得られた教訓を幾つかまとめておこうと思う
1. Luaの補完・フォーマット環境を早い段階でつくる
自分の場合、現在Luaに関しては下記のような環境となっている
- Language Server: lua-ls (lua-language-server)
- パース補助: neodev.nvim
- 補完: nvim-cmp
- フォーマッタ: stylua
- フォーマット設定: conform.nvim
まず必須であるLua用のLanguage Serverに関しては、自分はlua-lsをScoopで管理している
次にNeovim API用のパースを行ってくれるneodev.nvim 1だが、これはもっと早くに導入すべきだった
これがあるかどうかで視認性や可読性やエラーチェックの挙動など諸々の快適さが変わるため、今後Lua移行を行う方は是非早い段階で入れておくことをおすすめする
また、設定ファイルとしてLuaを書く時はNeovim APIを頻繁に呼び出すことになるが、未知のモジュール・関数も候補に表示できるようになるので補完プラグインも早めに入れた方が良い
そして言うまでもなく、フォーマッタがあればfunctionやLuaのテーブル型データなどの記述に便利なので、やはりこれも早い段階で入れておくことをおすすめする
2. プラグインの最適化は後に回す
当たり前のことだが、一応書いておく
例えば依存関係の多いプラグインなどの設定を詰めた後で、その代替プラグインが見つかったとする
そうなると、既に導入した依存先のプラグイン設定ごと引っ越す……つまり設定をやり直す羽目になる
当然だが既に使った時間やエネルギーは全て無駄になってしまう訳なので、 プラグイン毎の最適化は使うプラグインの選定が完全に終わってから にすべき……という話だ
自分の場合で言えば、none-ls.nvim(null-ls.nvimの後継)関連の設定にそれなりに時間を使ったのだが、後でその代替としてconform.nvimを採用することになり、時間をロスしてしまった
これが結構なロスになるので、一度自分の環境に入れて、手に馴染ませたうえで「これはずっと使うし、自分にとってはこれ以上の競合もないな」と確認できてからconfigを詰める方が理想的だ 2
3. パッケージをMason依存にするかどうか先に決める
これも段取りに関する反省という意味では2.と似ているのだが……
LSP関連やフォーマッターなどのパッケージをインストール・管理する際に Masonを利用するかどうか は先に決めておいた方が時間のロスは少なくなる
Masonを利用したパッケージ管理といえば大体は
などを利用するのが一般的だと思われるが、やはりローカルで完結させたい自分としては少しMason依存に抵抗があり、後で変更することになった
最初から決めておけばそれなりに時間が節約できたかなと思う
4. バッファ間&バッファ内を高速移動できるようにしておく
これも、Vimmerに対しては言うまでもないことで恐縮なのだが……
まずVimの設計思想を最低限理解し、バッファ間/バッファ内移動の効率を高めておいた方がプラグイン導入時・環境移行時の無駄は少なくなる
というのも、移行作業時は頻繁にバッファ間やバッファ内を移動する羽目になるからだ
個人的には、Neovimにおいて効率的な移動を実現するためには2つの手段を組み合わせるのが効果的だと思う
- Vim本体の機能: Marks、Jumplist、QuickFix、LocList etc
- 強力なNeovimプラグイン: telescope.nvim、harpoon、flash.nvim、nvim-navbuddy etc
これらを組み合わせることで、例えば以下のような非効率な操作・状態を極力避けることが出来る
- バッファ内で移動したい行・シンボルへすぐに移動できない
- 大量にタブを開き、タブ切り替えコマンドを連打しながら作業する
- 複数のタブで同じルートディレクトリのファイルを開き、往復する
- 一度しか開かないファイルと頻繁に開くファイルが整理できていない
- 任意のルートディレクトリにすぐに移動できない
更にここで具体的な方法を解説したいところだが、特にこの項目については自分のこだわり&オススメ設定もあるので続きの記事で詳しく解説させてもらいたいと思う(すみませんまだ書いてないだけです……)
5. キーマップ設定の方針・思想を先に定める
自分は予め行っていたのだが、一応書いておく
大量のプラグインを導入するにあたり、キーマップ設定が衝突しないよう予め方針や軸を定めておくことが重要だと思う
これをしておかないと、「とりあえず」で暫定的なキーマップを次から次へと導入しては設定しなおす、という手戻り3が発生する為だ
ざっくりになるが、例えば自分は下記のような方針を先に決めた上でプラグイン追加をしていった
<Leader>から始まるキーマップは殆どユーザープラグインの(Vim本体のものではない)機能に割り当てる- モディファイアキー(
CtrlやAlt)を含むキーマップは主にバッファ、ウィンドウ、タブ、QuickFix関連操作に割り当てる - 複数ストロークでも大半は3ストロークまでに収める
g/zから始まるキーマップは慎重に決める
これに関しても後の記事で詳しく書くかも知れない
おわりに
今回はここまで
次回はバッファ間・バッファ内の高速移動に関する設定例や、それを実現する為のおすすめプラグインについて書いていく
2024年7月19日現在、Neovim0.10.0以上のユーザーに対してneodev.nvimは非推奨(deprecated)となり、lazydev.nvimが代わりに推奨されているので注意 ↩︎
とは言ってもそう簡単に行かない(=後から魅力あるプラグインがどんどん見つかる)のがNeovim沼なのだが…… ↩︎
厳密には建築業界の用語らしいが敢えて使わせていただく ↩︎