あらすじ
- お、このプラグイン良さげだな
- なんだ neovim オンリーかよ
- じゃあ neovim 使うか
みたいな時に、難しく考えず簡単に移行する方法と置き換え先となるプラグインを、段階的に解説します。
neovim 移行とか設定の記事って、どうしても極限まで設定を詰めまくった後の『オレの最強設定。こんぐらいしないと neovim 使う意味ないですよね?』なものが多い気がしたので。
別にいいじゃん、所詮ツールなんだし気軽に使おうよ。
基礎知識
init.vim
neovim の設定ファイル。vim で言うところのvimrc
にあたるファイル
~/.config/nvim/
に作成することで、記述された設定を neovim に読み込ませることができる。
init.lua
neovim の設定ファイル。init.vim
は vim スクリプトで記述するのに対して、こちらは lua スクリプトで記述する。
配置場所はinit.vim
と同じく~/.config/nvim/
となる。
init.vim
とinit.lua
は、両方同時に配置することはできない。
フェーズ0:neovim インストール
パッケージマネージャーを使う方法もあるけど、バージョンが古かったりするので、公式リポジトリの Releases からパッケージをダウンロードする方法をおすすめします。
現在であれば、ver. 7.2 がおすすめ。最新安定版は 8.0 ですが、プラグインとの相性もあったりするので、少し古いバージョンを選択した方が詰まったりしないと思います。
GitHub (neovim) : https://github.com/neovim/neovim
フェーズ1:vimrc を init.vim に全コピ
vim の設定ファイルである.vimrc
は、vim スクリプトで設定が記述されていますが、この点は neovim の設定ファイルであるinit.vim
も同様なので、基本的には同じ設定を引き継ぐことが可能です。
今まで育ててきた.vimrc
の内容を~/.config/nvim/init.vim
にそのまま全てまるっとコピーしてやりましょう。
この際、プラグインマネージャーを使っている場合は、neovim で使用する場合の導入方法に従って再導入してください。
私の場合はvim-plug
を使用しているので、neovim 向けのコマンドを実行するだけで完了します。
GitHub (vim-plug) : https://github.com/junegunn/vim-plug
コピペが完了したらnvim
コマンドで neovim を起動してみましょう。
初回のみプラグインが足りないとか色々文句を言われると思いますが、プラグインインストールコマンドを叩けば、基本的には全て動くようになる筈です。
フェーズ2:プラグインを neovim 向けに交換
init.vim への lua スクリプト記述
neovim にしか対応していないプラグインや、動作が高速化されたり改善されたりしたプラグインを、既存のものと置き換える感じで導入していきます。
例:
NERDTree
=>nvim-tree
この際、neovim 用のプラグインマネージャーである packer の使用を推奨されている場合がありますが、無理に導入する必要は全くありません。今までのプラグインマネージャーで必要十分です。
実際、neovim 用のプラグインであっても、大抵は以下のように複数のインストール方法が提示されているかと思います。
※例:nvim-treeの場合
問題となってくるのは、設定が以下のように vimscript で記述されていない場合です。
-- examples for your init.lua
-- disable netrw at the very start of your init.lua (strongly advised)
vim.g.loaded = 1
vim.g.loaded_netrwPlugin = 1
-- empty setup using defaults
require("nvim-tree").setup()
-- OR setup with some options
require("nvim-tree").setup({
sort_by = "case_sensitive",
view = {
adaptive_size = true,
mappings = {
list = {
{ key = "u", action = "dir_up" },
},
},
},
renderer = {
group_empty = true,
},
filters = {
dotfiles = true,
},
})
上記の設定例はnvim-tree
から引用していますが、これはlua
言語によって記述されており、init.vim
に同じ内容を記述してもエラーが発生してしまいます。
本来であれば、この設定は、例の中にもあるようにinit.lua
という lua スクリプトで作成された設定ファイルに記述するのですが、lua スクリプトによる設定の記述方式は従来の物と大きく違うため、置き換えには時間がかかります。その上、neovim はinit.vim
かinit.lua
のどちらかしか使用できない仕様となっているため、必要な部分だけをinit.lua
に記述するといった使い方はできません。
なので、こうします。
lua require("nvim-tree").setup()
頭にlua
をつけてやると、その行は一時的に lua スクリプトとして解釈され、実行されるのです。
これにより、init.lua
を使用することなく、init.vim
に lua 言語で設定を書き込むことが可能となります。
なお、複数行に渡って lua スクリプトを記述する場合は、以下の通りに記載します。
lua << EOF
require('nvim-treesitter.configs').setup({
ensure_installed = { 'python', 'javascript', 'html', 'css', 'bash', 'lua', 'vim', 'c' },
auto_install = true,
highlight = {enable = true,},
rainbow = {enable = true, extended_mode = true, max_file_lines = 999,
colors = { "#5f87d7", "#af87ff", "#00af87"}
}
})
EOF
lua スクリプトの最初と最後をlua << EOF
とEOF
で囲むことで、複数行の lua スクリプトによる設定を記述できるようになります。
まとめると、neovim のプラグイン記述は、次のように記載することになります。
" プラグインの読み込み
call plug#begin()
Plug 'kyazdani42/nvim-tree.lua'
call plug#end()
" プラグインの有効化
lua require('nvim-tree').setup()
その他、設定などは、プラグインを公開しているリポジトリなどを参考にしてみてください。
新規導入/置き換え先プラグイン
新しく導入したり、置き換えることで色々と改善されたプラグインに絞って紹介
floaterm => toggleterm
neovim 上でターミナルを起動する。動作が安定した(気がする)。
scrollbar
バッファ上にスクロールバーを表示する。
ドラッグ&ドロップで移動することはできないものの、サイズの大きいファイル内で現在位置を知るために使う事が可能
LSP 関連
vim-lsp
から neovim のビルトイン LSP へ移行
移行時の参考にした記事はこちらが一番わかりやすかった。
indentLine => indent-blankline
lukas-reineke/indent-blankline.nvim
インデントを可視化してネストされたコードの可読性を向上させる。
VSCode などに実装されている『現在のネストの範囲をハイライトする』機能を実装する場合の設定例は、次の通り。
lua << EOF
require("indent_blankline").setup({
context_patterns = {
"body", "class", "function", "method", "block", "list_literal", "selector",
"^if", "^table", "if_statement", "while", "for", "type", "var",
"import", "declaration", "expression", "pattern", "primary_expression",
"statement", "switch_body"
},
space_char_blankline = " ",
show_end_of_line = true,
show_current_context = true,
show_current_context_start = true,
})
EOF
vim-rainbow => nvim-ts-rainbow
ネストされたカッコの色をそれぞれ別の色にすることで可読性を上げるプラグイン。
vim-rainbow
は他のプラグインとの干渉があったり動作が重かったりしたが、移行で改善された。
previm => markdown-preview
マークダウンファイルのプレビュー用プラグイン。
プレビュー画面が編集箇所へ自動的に追従してくれるようになり、かつ、動作も軽快になった。
フェーズ3:lua への完全移行
設定をinit.lua
などの lua スクリプトで全て記述し、neovim の高速化を目指す段階です。
が、当初の目的である、neovim 向けプラグインを使用するだけなら、そこまでする必要はありません。
高速な lua スクリプトへの移行はパフォーマンス面から見ても望ましい事であり、かつ、設定も lua で書く事を推奨されていますが、まだ急いで完全移行する必要は、現時点では存在しないと思います。
もちろん、更に設定を詰めまくって、ミリ秒単位で起動時間を短縮したり、設定ファイルを複数に分けて管理を合理化したりする事は十分に意味がありますし、ニッチなテキストエディターを愛する上で一番楽しい部分でもあるので、自分のパッションに従って追求していけばいいでしょう。
まとめ
- neovim 用プラグインを使用する場合は neovim への移行が必要
-
init.vim
に.vimrc
の内容をコピペすれば、最低限の移行はすぐに完了 - lua スクリプトによるプラグイン設定などは
init.vim
にも記述することが可能 - lua スクリプトへの完全移行は(現時点では、まだ)必要ない。
それでは、良きテキストエディターライフを。