NeovimをLua環境に移行する 第1回

- #neovim #neovim-plugins #lua #rust

色々と一段落したので久々に更新

NeovimのLua移行記事リンク

要約

2024年4月ごろ、余裕が出てきたのでRustに慣れる目的で簡単なツールを自作したりしていた

その時はVSCodeを使って書いていたのだが、「やはりNeovimでRustを書きたい」と思うようになり……

結果として、2020年から約4年ぶりにNeovimを全面的にLuaへ移行することを決意した

これまでやっていたこと

2024年3月頃から現在まで、下記のようなことをやっていた

Rust製の簡易ツールについて

今年、人気ゲームSlay the Spireの続編『Slay the Spire 2』が発表された

ニュースでゲームのことを思い出して久々にプレイしてみたりしたが、その途中で「オートセーブデータの状態を監視するツール」を思いつき、試しに作ってみることにした

それがこちら

OBSなどのツールで画面上に表示できるよう、オートセーブ内の各種パラメータを .txt 形式で出力するツールだ

主にRustとFSM(有限状態機械、有限オートマトン)の実装慣れの為に学習目的で作ってみたもので、実装は汚く、実用性は特にない 1と思う

ただ、これを作ったことで改めて「Rustは書きやすい2な」と実感すると同時に、VSCodeだけでなくNeovimの開発環境をしっかり作り込む必要があると感じた

VSCodeだけでなくNeovimも使いたくなる

元々Neovimは軽い設定ファイル(TOMLやJSONなど)を弄る時に高速で立ち上げて使う程度で、コーディングは主にVSCodeですることが多かった

手元で使うPythonスクリプトを書く時などにもJupyter NotebookのVSCode拡張機能があるのでそちらを利用することが多かった

また、VSCodeにはvscodevimやGit関連など一通りの拡張機能も入れ、コーディングが最低限できるぐらいには環境構築を済ませていたのだが……

しかし……

やはりVSCode上でVimキーバインドを利用しても、IME周りでちょっと不審な挙動3をしていたり、vscode-vimのキーバインドがVSCode側のショートカットと重複してしまったり、不都合が多々あった

VSCodeで書いている内に、いつの間にか「Neovimの書き心地でRustが書けたら楽なのに……」と思うようになった

NeovimのLua環境移行を決意

Neovimについて調べているうちに、当時使っていたプラグインマネージャーのdein.vimからの移行の必要性を強く感じるようになった

以前はLSP等に関してもcoc.nvimなどを入れるのが主流だったように記憶しているが、4年ぶりに見てみると全く以て情勢が変わっていた

ちなみに自分が元々Neovimで使っていたプラグイン一覧はここにまとまっている

しかし現在、LSPはNeovimの ネイティブLSPが強力な機能としてユーザーからの信頼を集めており、Lua系で書かれたプラグインをlazy.nvimpacker.nvimなどで管理する人も増えているらしい

また、GitHubで様々なNeovimプラグインを見ていると、下記のようなある共通点があることに気づいた

どうやら人気を集めている強力なLua製プラグインが複数存在し、そのプラグインを中心に新たなエコシステムが形成されているらしいことが分かって来た

dein.vimも別に嫌ではないのだが、TOMLで管理するよりプログラマブルなLuaで管理する方が柔軟性が高そうだった

ということで、色々と調べた結果Lua系の環境へ移行した方が良いということに気づき、Neovimのプラグインも全面的に見直すことを決意した

おわりに

今回はここまで

次回以降はNeovimのLua環境への移行について書いていく

ただし移行作業中に取ったメモが15000行以上に及ぶので、経過をただこのブログに書くことはせず、人の役に立ちそうな内容に極力絞っていきたいと思う


  1. 配信などをされる方はもしかしたら使えるかも知れないが、発売から日が経っているので実質的に意味のないツール ↩︎

  2. やはりコンパイラが優秀なので実行時以前にエラーをほぼ解消できるのが大きい。あと引数の渡し方がC++で言うconst参照に近いのも良い ↩︎

  3. 変換中の単語以外に余計な文字が表示されたりetc ↩︎