🏄

vim.loaderでNeovimをお手軽高速化

2023/03/27に公開

vim.loaderを導入するPRがNeovimのHEADにマージされました。

https://github.com/neovim/neovim/pull/22668

有名なNeovimプラグインをいくつも開発しているfolke氏によるPRです。
同氏がパッケージマネージャのlazy.nvimに高速ロードの処理を実装していたのですが、これをNeovim本体に導入するもののようです。

使い方はvim.loader.enable()を設定ファイルの先頭に書くだけです。

init.vim
lua vim.loader.enable()

" 存在確認する場合
lua if vim.loader then vim.loader.enable() end
init.lua
vim.loader.enable()

-- 存在確認する場合
if vim.loader then vim.loader.enable() end

早速、Neovimを最新版に更新し、実験してみました。
手許の環境で、vimrcの先頭にlua if vim.loader then vim.loader.enable() endをつけた場合とつけなかった場合をvim-startuptimeで計測してみました。

なし

❯ vim-startuptime -vimpath nvim
Extra options: []
Measured: 10 times

Total Average: 38.461800 msec
Total Max:     40.244000 msec
Total Min:     37.775000 msec

あり

❯ vim-startuptime -vimpath nvim
Extra options: []
Measured: 10 times

Total Average: 30.526200 msec
Total Max:     32.680000 msec
Total Min:     29.965000 msec

1行の設定で起動を高速化できました。
設定関連にどれくらいluaファイルを使っているかで高速化の効果(キャッシュされる範囲)は変わりそうですが、lazy.nvimユーザーでなくても高速化の恩恵を受けられるのは良さそうです。

なお、impatient.nvimも類似のキャッシュ効果を持っていますが、lazy.nvimのdiscussionsには、「impatientを使うならlazyのキャッシュ機能は無効化したほうが良い」と書かれています。
今回のvim.loaderもlazy.nvimと同様の仕組みであると考えられるので、やはりimpatientとの同時利用は避けたほうが良いのではないかと思われます。

https://github.com/folke/lazy.nvim/discussions/150

Discussion