🫠

lazy.nvimでプラグインの設定とかを複数ファイルに記述する

2023/01/21に公開5

packerからlazy.nvimに乗り換えたのですが、プラグインの分類毎にファイルを分けようとしたところ それはサポートしてないよ! みたいなこと言われたので、自力で対応します。

尚、その場で適当に対応したものなので、ネット上にはもっと良い解決法が転がってるかもしれません。悪しからず。

詳細

自分の$XDG_CONFIG_HOME/nvim/下は以下の様な構造になってます。

nvim/
├── lua/
│  ├── ext/
│  │  ├── cmps.lua
│  │  ├── init.lua
│  │  ├── lib.lua
│  │  ├── lsp.lua
│  │  ├── telescopes.lua
│  │  ├── ts.lua
│  │  ├── ui.lua
│  │  └── write.lua
│  ├── map.lua
├── lazy-lock.json
└── init.lua

方向性としてはext/下のファイルでプラグインをリストアップし、それをext/init.luaで読み込みます。ではどうやって読み込むのかというと、各ファイルからtableを返す様にします。具体的には、

ext/write.lua
return {
	{
		'windwp/nvim-autopairs',
		config = function()
			require('nvim-autopairs').setup { map_c_h = true }
		end,
	},
	{
		'jackMort/ChatGPT.nvim',
		config = true,
	},
	{
		'AckslD/nvim-FeMaco.lua',
		config = true,
	},
	'L3MON4D3/LuaSnip',
}

のようにします。

次に、 ext/init.luaに以下のような記述を追加します。

ext/init.lua
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim'
if not vim.loop.fs_stat(lazypath) then
	vim.fn.system {
		'git',
		'clone',
		'--filter=blob:none',
		'https://github.com/folke/lazy.nvim.git',
		'--branch=stable', -- latest stable release
		lazypath,
	}
end
vim.opt.rtp:prepend(lazypath)

-- ここから下--

-- listup plugins here which is difficult to classify
local plugins = {
	{
		'chrisgrieser/nvim-recorder',
		config = function()
			require('recorder').setup {
				mapping = { startStopRecording = '<f9>' },
			}
		end,
	},
}

-- make sure that each file returns table of plugins
local load_plugins = {
	require 'ext.lib',
	require 'ext.ui',
	require 'ext.write',
	require 'ext.ts',
	require 'ext.lsp',
	require 'ext.cmps',
	require 'ext.telescopes',
}

for _, t in pairs(load_plugins) do
	for _, p in pairs(t) do
		table.insert(plugins, p)
	end
end

require('lazy').setup(plugins, { checker = { enable = true, frequency = 1 } })

あとはお好みで各自カスタマイズしてってください。他にもっといい方法がある場合教えていただけると嬉しいです

Discussion

9kv8xiyi9kv8xiyi

あ〜lazyvim懐かしいですね〜。実は一時期使ってたのですが、やっぱり自力でlualuaしたい! と思って使わなくなりました。久しぶりに覗いてみたら新しくwebサイトもできたらしく(ちょうど昨日の今日でできたみたいですね)久しぶりに戻ってみるのもイイですね!
アドバイスありがとうございます。

nitomokinitomoki

https://github.com/folke/lazy.nvim#-structuring-your-plugins
lazy.nvimの”Structuring Your Plugins”にある機能を使うと、かなりすっきり書けます。

require("lazy").seup()関数はプラグインの記述(spec)を詰めたテーブルの他に、Stringでモジュール名も受け取れるみたいです。
例:require("lazy").setup("plugins")
例えば例のような記述をすると、lua/ディレクトリに配置したlua/plugins/ディレクトリを自動的に読み込みます。
そして、plugins/にspecテーブルをreturnするluaスクリプトを配置しておけば、lazy.nvimはそのプラグインを読み込んでくれます。

nvim/init.lua
-- 中略
require("lazy").setup("plugins")
nvim/lua/plugins/example1.lua
return { "example/A.nvim" }

nvim/lua/plugins/example2.lua
return{
     { "example/B.nvim" },
     { "exmaple/C.nvim" },
}

上記のようにしておくと、A~Cのプラグインがlazy.nvimに読み込まれます。
たぶんrequire("lazy").setup("plugins")nvim/init.lua内に書かないといけないorplugins/内には配置してはいけない?と思われます。
ご参考になれば幸いです。

おとかおとか

自分が求めてたものこれでした!!!

これでスッキリ設定書ける……助かりましたm(__)m

9kv8xiyi9kv8xiyi

アドバイスに沿って書き直してみたら無事読み込まれました。お陰で、プラグイン読み込み回りの設定がすっきりしました。ありがとうございますm(_ _)m