近年、Neovimの設定は従来のVimScriptからLuaに移行するのが主流になりつつあります。Luaはパフォーマンスが良く、プラグイン開発や設定がより柔軟に書ける言語です。そこで今回は、長年使っていたinit.vimを、できるだけ完全にinit.luaに移行したプロセスと設定内容についてまとめました。特にプラグインの移行やタブライン、オートコンプリート、LSP設定の技術的な詳細について詳しく解説します。
1. init.luaの基本構成
まず、init.luaへの移行の第一歩は、init.vimから基本設定をLuaに移行することです。設定ファイルの場所は、従来の~/.config/nvim/init.vimから~/.config/nvim/init.luaに変更しました。
基本的な設定の移行において、VimScriptのコマンドである「set」をLuaでは「vim.opt」で指定します。また、キーマッピングについては「vim.api.nvim_set_keymap」を使用するなど、Lua形式の設定に書き換えていきました。
例として、VimScriptでのクリップボード設定をLuaに変換したコードは以下の通りです:「vim.opt.clipboard ('unnamedplus')」
従来の「set clipboard+=unnamedplus」が、vim.optでappendメソッドを使う形に変わります。LuaではoptやcmdといったモジュールでVimのAPIを直接操作できるため、よりシンプルかつ高性能に設定を適用できます。
2. Packer.nvimへの移行 – プラグイン管理
init.vimではdein.vimを使用してプラグインを管理していましたが、Lua対応のpacker.nvimに移行しました。packer.nvimは、Luaベースのプラグイン管理ツールで、依存関係管理や条件付きロードなどが柔軟に設定できます。
最初に、packer.nvimをインストールし、「require('packer').startup(function(use)」の形式で各プラグインをuse関数に追加することでインストール設定が可能です。例えば以下のプラグインを追加しました:「wbthomason/packer.nvim」「neovim/nvim-lspconfig」「hrsh7th/nvim-cmp」「akinsho/bufferline.nvim」「nvim-lualine/lualine.nvim」
これにより、環境構築時に「:PackerInstall」コマンドを一度実行するだけで、すべてのプラグインがインストールされ、管理が容易になります。
3. オートコンプリートの設定 – nvim-cmpによる補完機能の充実
オートコンプリートは、従来dein.vimで設定していたShougo氏のneosnippetなどから、nvim-cmpに移行しました。nvim-cmpは補完エンジンとして非常に柔軟で、LSPやスニペットとの連携もスムーズです。
基本的な設定例としては、補完候補の選択や確定などのマッピングを「cmp.mapping」で指定しました。また、補完ソースとして「nvim_lsp」「buffer」「path」「vsnip」を設定することで、LSPやバッファ内の単語、パスの補完が統合されています。
4. LSP設定 – nvim-lspconfigで多言語対応
LSP(Language Server Protocol)の設定では、nvim-lspconfigを使用し、主要な言語のLSPサーバーを設定しました。特に、TypeScriptやPython、C++の開発が行えるようにするため、lsp-config.luaにまとめて設定しました。
具体的には、Pythonには「pyright」、TypeScriptには「ts_ls」、C++には「clangd」をそれぞれセットアップし、「capabilities」に「cmp_nvim_lsp.default_capabilities()」を指定することで、オートコンプリートエンジンとの統合も行いました。
5. ステータスラインとタブラインのカスタマイズ
最後に、見た目と作業効率を高めるため、lualine.nvimとbufferline.nvimを使ってステータスラインとタブラインを設定しました。
ステータスラインとしてlualine.nvimを採用し、テーマやセクション分けが簡単にできる点が魅力です。カラースキームは「theme」に「gruvbox」を指定し、セクションにはモードやブランチ、ファイル名、エンコーディング、進捗、位置情報などを追加しました。
タブラインにはbufferline.nvimを使用し、複数バッファの表示をタブ形式にカスタマイズしました。キーマップとして「vim.api.nvim_set_keymap('n', '<Tab>', '
<CR>', { noremap = true, silent = true })」や「vim.api.nvim_set_keymap('n', '<S-Tab>', '
<CR>', { noremap = true, silent = true })」を設定し、キーボードでタブ間を容易に移動できるようにしました。
終わりに
今回のinit.luaへの移行は、VimScriptからの脱却と、Neovim特有の機能を活かした設定の近代化が目的でした。特にpacker.nvimやnvim-cmp、nvim-lspconfig、lualine.nvimといったLua対応プラグインを採用することで、より快適で効率的な開発環境が構築できました。Luaの構文に慣れる必要はありますが、一度整備すると大幅な作業効率の向上が見込めるため、移行の価値は十分にあります。
今後はさらにLuaの活用方法を学び、Neovimの設定を高度化していきたいと思います。