3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【lazy.nvim】たまに使うプラグインはcondプロパティを使うと便利

Posted at

本記事はVim駅伝 2025-05-21の記事です。
前回の記事はthincaさんの「Meguro.vim #29 を開催しました」でした。

はじめに

小ネタ記事です。
プラグインマネージャーであるlazy.nvimで、特定条件のときにだけ読み込みたいプラグインを読み込む方法の解説です。

  • 使用環境
    • Neovim: v0.11.1
    • lazy.nvim: v11.17.1(6c3bda4)

結論

特定条件のときにだけ使用したいプラグインは、lazy.nvimのcondを使うとアンインストール対象にならなくなります。

e.g. 環境変数PLUGIN_ENABLEDが定義されていたらsome/plugin.nvimを有効にする場合

load-plugin-nvim.lua
{
  "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のドキュメントを確認すると、プラグインの読み込み設定を制御するプロパティにはenabledcondがあります。

名前からしてenabledを使用すれば良さそうですが、こちらを使うとプラグインが削除対象になってしまいます。

私はOLLAMA_HOSTという環境変数があるときにのみ、avante.nvimを読み込むような設定をしています。
enabledプロパティを使って以下のような設定を記述した時、OLLAMA_HOSTという環境変数が無い場合には、lazy.nvimの削除対象にavante.nvimが含まれてしまいます。
このままでは、他の削除したいプラグインといっしょに削除してしまいます。

avante.lua
{
  "yetone/avante.nvim",
  -- (省略)
  enabled = function()
  local ollama_host = os.getenv("OLLAMA_HOST")
    if ollama_host ~= nil then
      return true
    else
      return false
    end
  end,
}

スクリーンショット 2025-05-14 23.20.19.png

削除対象のプラグインが並ぶ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プロパティを使ったほうが良いということですね。
先程の設定のenabledcondに変更し、lazy.nvimのダッシュボードを確認してみます。

avante.lua
 {
   "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,
 }

スクリーンショット 2025-05-14 23.21.00.png

avante.nvimCleanセクションからDisabledセクションに移動している図。

これで特定条件でないときにはプラグインを無効化でき、なおかつ削除対象から外すことができました。

まとめ

init.luaを育てていたときにこの仕様を知りました。公式ドキュメントを読むって大事ですね。
私の場合は環境変数でプラグインを読み込みを制御する形で使っています。
VSCode Neovimとかとinit.luaを共存させたいときにはvim.g.vscodeを参照してあげると便利かもですね。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?