🫠
lazy.nvimでプラグインの設定とかを複数ファイルに記述する
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
or
とかどうでしょう?
あ〜lazyvim懐かしいですね〜。実は一時期使ってたのですが、やっぱり自力でlualuaしたい! と思って使わなくなりました。久しぶりに覗いてみたら新しくwebサイトもできたらしく(ちょうど昨日の今日でできたみたいですね)久しぶりに戻ってみるのもイイですね!
アドバイスありがとうございます。
lazy.nvimの”Structuring Your Plugins”にある機能を使うと、かなりすっきり書けます。
require("lazy").seup()
関数はプラグインの記述(spec)を詰めたテーブルの他に、Stringでモジュール名も受け取れるみたいです。例:
require("lazy").setup("plugins")
例えば例のような記述をすると、
lua/
ディレクトリに配置したlua/plugins/
ディレクトリを自動的に読み込みます。そして、
plugins/
にspecテーブルをreturn
するluaスクリプトを配置しておけば、lazy.nvim
はそのプラグインを読み込んでくれます。上記のようにしておくと、A~Cのプラグインが
lazy.nvim
に読み込まれます。たぶん
require("lazy").setup("plugins")
はnvim/init.lua
内に書かないといけないorplugins/
内には配置してはいけない?と思われます。ご参考になれば幸いです。
自分が求めてたものこれでした!!!
これでスッキリ設定書ける……助かりましたm(__)m
アドバイスに沿って書き直してみたら無事読み込まれました。お陰で、プラグイン読み込み回りの設定がすっきりしました。ありがとうございますm(_ _)m