dvpm(Denops Vim Plugin Manager)を導入してみた
はじめに
最近 dvpm を導入してみたのでその紹介をします。
dvpm って何?という方は作者さんの記事を読んでいただくのが良いと思います。
dvpm について一言で説明すると「起動速度が遅いなら全部遅延読み込みにしてしまえば良いじゃない」という思い切った設計のプラグインマネージャです。
もちろん TypeScript で設定を書けるなど他にも魅力もありますが, 今回はそれらの部分については触れません。
dvpm 導入前の状況
vim-jetpack を使っており、プラグインの数は120個程度です。起動時間は200ms程度だったので、許容範囲内でした。
dvpm 導入の動機
許容範囲とはいえ Neovim の起動時間を短縮できれば嬉しいと考えていました。ただ遅延読み込みの設定をするのは面倒だなと。
というのも自分の運用としては以下のような流れが基本です。
- Neovim 起動
- Fuzzy-Finder を開く
- 目的のファイルに移動
- 編集する
このような流れのため、起動直後に使いたいのは Fuzzy-Finder である telescope.nvim だけです。
telescope.nvim だけ起動時に読み込んで他は遅延読み込みしてくれれば十分です。発火のタイミングを個別に指定するプラグインマネージャは自分にとって過剰だと感じました。
そしてそんなユースケースにピッタリだと思ったのが dvpm でした。
dvpm で全てのプラグインを遅延読み込みし、telecope.nvim だけ起動時に読み込むという設定を試してみることにしました。
やったこと
- telescope.nvim 関連のプラグインだけ init.vim にランタイムパスを追加します。
この際指定するパスは dvpm でインストールしたプラグインのディレクトリです。
set runtimepath+=~/.cache/nvim/dvpm/github.com/nvim-telescope/telescope.nvim
- dvpm の設定ファイルには以下のように記述します。enabled に false を指定することで dvpm ではプラグインが読み込まれなくなります。
ただし:DvpmUpdate
時にプラグインの更新は行われるので、プラグインの更新を dvpm に任せることができます。
await dvpm.add({
url: "nvim-telescope/telescope.nvim",
enabled: false,
});
起動時間の変化
200ms -> 22ms に短縮されました。およそ 10分の1 になったので満足です。
まとめ
dvpm は全てのプラグインを遅延読み込みするというかなり尖った設計だと思います。しかし、その設計が自分のユースケースにマッチしていたのが面白いなと感じました。
もしもっと良い方法があるよという方がいればコメント等で教えていただきたいです。
Discussion
おぉー!たしかにそんな方法もありますね!
一応、 Cache して起動時から読み込みたいプラグインの指定を行う方法もあります!
yukimemi/dvpm - Cache setting
Dvpm.begin
の引数にbase
だけでなく、cache
のパスを指定します。この
cache
に指定されたパスにキャッシュされた設定が書き込まれるのでこのパスはあらかじめruntimepath
に追加されている必要があります。自分で追加するか、、、もしくは Vim / Neovim でデフォルトで追加されているパスを指定してください。
README ではデフォルトで追加されているパスを指定しています。
以下抜粋
Dvpm.add
時にcache
の設定を記載します。こんな感じです!上記は単純に runtimepath へ追加するだけの例です。
もし設定ファイルも読み込みたい場合は
beforeFile
かafterFile
でファイルパスを指定します。beforeFile
: plugin が runtimepath へ追加されて、source plugin/*.vim
とかが実行される前に呼び出されます。afterFile
:souce plugin/*.vim
とか実行された後に呼び出されます。こんな感じで設定できます。
beforeFile
か、afterFile
のどちらか指定があれば、enabled
は指定しなくても大丈夫です。この設定をすると、 Vim / Neovim 起動後に、 dvpm が
cache
に指定したファイルにruntimepath
の追加や上記の設定ファイルをsource
する内容を書き込みます。(そのため、初回起動時はキャッシュは利きません。2回目以降の起動から)一応
autocmd
の定義をしているので、このキャッシュが更新された場合に通知とかしたい場合は利用できます!yukimemi/dvpm - autocmd
私も telescope は起動時から利用したいので上記のキャッシュの設定してます!参考になれば・・・!
dotfiles/.config/nvim/denops/config/plugins/telescope.ts at main · yukimemi/dotfiles
おぉ作者のyukimemiさんからコメントもらえるなんてとても嬉しいです!
そしてそんな方法もあるんですね、ちゃんとドキュメントを読んでいないのがバレてしまった…
自分のやり方だと全然スマートじゃないので、記事を修正します!
わざわざコメントして教えていただき、ありがとうございます!