🐜

dvpm(Denops Vim Plugin Manager)を導入してみた

2024/12/01に公開

はじめに

最近 dvpm を導入してみたのでその紹介をします。
dvpm って何?という方は作者さんの記事を読んでいただくのが良いと思います。
dvpm について一言で説明すると「起動速度が遅いなら全部遅延読み込みにしてしまえば良いじゃない」という思い切った設計のプラグインマネージャです。
もちろん TypeScript で設定を書けるなど他にも魅力もありますが, 今回はそれらの部分については触れません。

dvpm 導入前の状況

vim-jetpack を使っており、プラグインの数は120個程度です。起動時間は200ms程度だったので、許容範囲内でした。

dvpm 導入の動機

許容範囲とはいえ Neovim の起動時間を短縮できれば嬉しいと考えていました。ただ遅延読み込みの設定をするのは面倒だなと。
というのも自分の運用としては以下のような流れが基本です。

  1. Neovim 起動
  2. Fuzzy-Finder を開く
  3. 目的のファイルに移動
  4. 編集する

このような流れのため、起動直後に使いたいのは Fuzzy-Finder である telescope.nvim だけです。
telescope.nvim だけ起動時に読み込んで他は遅延読み込みしてくれれば十分です。発火のタイミングを個別に指定するプラグインマネージャは自分にとって過剰だと感じました。
そしてそんなユースケースにピッタリだと思ったのが dvpm でした。
dvpm で全てのプラグインを遅延読み込みし、telecope.nvim だけ起動時に読み込むという設定を試してみることにしました。

やったこと

  1. telescope.nvim 関連のプラグインだけ init.vim にランタイムパスを追加します。
    この際指定するパスは dvpm でインストールしたプラグインのディレクトリです。
.config/nvim/init.vim
set runtimepath+=~/.cache/nvim/dvpm/github.com/nvim-telescope/telescope.nvim
  1. dvpm の設定ファイルには以下のように記述します。enabled に false を指定することで dvpm ではプラグインが読み込まれなくなります。
    ただし :DvpmUpdate 時にプラグインの更新は行われるので、プラグインの更新を dvpm に任せることができます。
.config/nvim/denops/config/main.ts
await dvpm.add({
  url: "nvim-telescope/telescope.nvim",
  enabled: false,
});

起動時間の変化

200ms -> 22ms に短縮されました。およそ 10分の1 になったので満足です。

まとめ

dvpm は全てのプラグインを遅延読み込みするというかなり尖った設計だと思います。しかし、その設計が自分のユースケースにマッチしていたのが面白いなと感じました。
もしもっと良い方法があるよという方がいればコメント等で教えていただきたいです。

GitHubで編集を提案

Discussion