denops製VimプラグインでDenoのバージョンとキャッシュ位置を固定する

by
カテゴリ:
タグ:

Vimアドベントカレンダー12/10の記事です。
昨日の記事は以下の2本でした。

さて本題。

denops.vimというプラグイン開発エコシステムがあります。

denops.vim は JavaScript/TypeScript のランタイムである Deno を利用して Vim/Neovim 双方で動作するプラグインを作るためのエコシステムです。
https://zenn.dev/lambdalisue/articles/b4a31fba0b1ce95104c9

denops.vim製プラグインは、高速性やJavascript/Typescriptの資産の恩恵による多機能性があり、この記事の執筆を含め、日々ありがたく利用させていただいております。
代表的なところで以下。

Denoは実行時に必要な依存関係を自動解決してくれます。
これまた便利なのですが、プラグインのインストール直後やDenoのバージョン変更後に、依存解決で数秒待たされるケースがあります。

プラグインの初回インストールはまだ待てるとして、Denoのバージョンを変更するたびにキャッシュに時間をとられるのは体験が悪いです。
Denoのアップデートに限らず、rtxasdfpkgxなどを使ってシステム側のDenoのバージョンを一時的に変更するケースはしばしば存在します。

同様の体験をされた方は以下のように、denops.vim用のDenoとキャッシュファイルをシステムに左右されないよう固定するといいでしょう。

" denops.vim読み込み前に設定
let g:denops#deno = 'path/to/deno/1.38.4/bin/deno'
let g:denops#deno_dir = 'path/to/deno/1.38.4/cache'

ちなみに、g:denops#deno_dirというグローバル変数は、最近私がPRして取り込んでもらったものです(https://github.com/vim-denops/denops.vim/pull/295)。

私の場合は、設定ファイルの中でdenops.vim用のDenoのバージョンを指定し、存在しなければ自動的にダウンロードするところまで設定してあります。快適。

https://github.com/atusy/dotfiles/blob/5c3d3d4984712fdb673d6778f8a01d7f9877ceae/dot_config/nvim/lua/plugins/denops/init.lua?plain=1#L5

また、プラグインの初回インストールやDenoの更新に際して発生する待ち時間も減らすべく、独自に並列キャッシュする仕組みも入れてみてます。快速。

https://github.com/atusy/dotfiles/blob/5c3d3d4984712fdb673d6778f8a01d7f9877ceae/dot_config/nvim/lua/plugins/skkeleton/init.lua?plain=1#L23-L29

ENJOY!