本記事はVim駅伝 2025-05-21の記事です。
前回の記事はthincaさんの「Meguro.vim #29 を開催しました」でした。
はじめに
小ネタ記事です。
プラグインマネージャーであるlazy.nvimで、特定条件のときにだけ読み込みたいプラグインを読み込む方法の解説です。
- 使用環境
- Neovim:
v0.11.1
- lazy.nvim:
v11.17.1
(6c3bda4
)
- Neovim:
結論
特定条件のときにだけ使用したいプラグインは、lazy.nvimのcond
を使うとアンインストール対象にならなくなります。
e.g. 環境変数PLUGIN_ENABLED
が定義されていたらsome/plugin.nvim
を有効にする場合
{
"some/plugin.nvim",
cond = function()
local plugin = os.getenv("PLUGIN_ENABLED")
if plugin ~= nil then
return true
else
return false
end
end,
opt = { plugin_spec }
}
enabled
プロパティじゃだめなの?
lazy.nvimのドキュメントを確認すると、プラグインの読み込み設定を制御するプロパティにはenabled
とcond
があります。
名前からしてenabled
を使用すれば良さそうですが、こちらを使うとプラグインが削除対象になってしまいます。
私はOLLAMA_HOST
という環境変数があるときにのみ、avante.nvim
を読み込むような設定をしています。
enabled
プロパティを使って以下のような設定を記述した時、OLLAMA_HOST
という環境変数が無い場合には、lazy.nvimの削除対象にavante.nvim
が含まれてしまいます。
このままでは、他の削除したいプラグインといっしょに削除してしまいます。
{
"yetone/avante.nvim",
-- (省略)
enabled = function()
local ollama_host = os.getenv("OLLAMA_HOST")
if ollama_host ~= nil then
return true
else
return false
end
end,
}
削除対象のプラグインが並ぶClean
セクションにavante.nvim
がいる図。
cond
プロパティを使う
lazy.nvimのドキュメントを確認すると、次のように書かれています
Behaves the same as enabled, but won't uninstall the plugin when the condition is false. Useful to disable some plugins in vscode, or firenvim for example.
ChatGPTによる日本語訳
有効化(enabled)と同じ動作をしますが、条件が偽の場合でもプラグインはアンインストールされません。VS Code や firenvim などで一部のプラグインを無効化したいときに便利です。
つまり、一部のプラグインを無効化したいときはenabled
ではなくcond
プロパティを使ったほうが良いということですね。
先程の設定のenabled
をcond
に変更し、lazy.nvimのダッシュボードを確認してみます。
{
"yetone/avante.nvim",
-- (省略)
- enabled = function()
+ cond = function()
local ollama_host = os.getenv("OLLAMA_HOST")
if ollama_host ~= nil then
return true
else
return false
end
end,
}
avante.nvim
がClean
セクションからDisabled
セクションに移動している図。
これで特定条件でないときにはプラグインを無効化でき、なおかつ削除対象から外すことができました。
まとめ
init.lua
を育てていたときにこの仕様を知りました。公式ドキュメントを読むって大事ですね。
私の場合は環境変数でプラグインを読み込みを制御する形で使っています。
VSCode Neovimとかとinit.lua
を共存させたいときにはvim.g.vscode
を参照してあげると便利かもですね。