🔧

lazy.nvimで複数のディレクトリからプラグインを読み込む

2023/11/25に公開

lazy.nvimでpluginsというディレクトリ配下にluaファイルを置く形でプラグインを管理していたところ、そこから更にプラグインを分類したくなった時に詰まったのでその解消法を備忘録として残しておきます。

完成形

通常のプラグインはplugins直下に置き、分類できるプラグインは更にディレクトリを作成してその下に置くことでフォルダの見通しが良くなります。

ちなみに最初はui.luaと言った感じにプラグインを一定の種類ごとにまとめたファイルを作っていたのですが、1ファイルのサイズが大きくなりすぎてしまう & ファイル名=プラグイン名にすると検索し易いという理由で変えました。

── init.lua
└── lua
    ├── base.lua
    ├── keymaps.lua
    ├── options.lua
    ├── plugin_manager.lua
    └── plugins
        ├── ui
        │   ├── color-scheme.lua
        │   ├── dressing.lua
        │   ├── indent-blankline.lua
        │   ├── lualine.lua
        │   └── noice.lua
        ├── lsp
        │   ├── ...
        │   └── ...
        └── which-key.lua

詳細

lazy.nvimでは以下のように記述するとpluginsフォルダ内のluaファイルをすべて読み込んでくれるようになってくれています。
(正確には~/.config/nvim/lua/plugins.lua or ~/.config/nvim/lua/plugins/*.lua)

init.lua
require("lazy").setup("plugins")

しかし、例えばplugins/ui/*.luaのようなファイルは読んでくれません。あくまで直下にあるファイルのみ読まれます。

そこで再帰的に読んでくれるような方法はないかと色々と探したところ、結論としてはlazy.nvimの"Importing Specs, config & opts"辺りのところに載っている方法が一番良さそうでした。

require("lazy").setup({
  spec = {
    { import = "plugins" },
    { import = "plugins.ui" },
    { import = "plugins.lsp" },
  }
})

ちなみに以下のような方法でも行けそうだと思ったんですが駄目でした。

require("lazy").setup({
    "plugins",
    "plugins.ui",
    "plugins.lsp" 
})

Discussion