Lazy.nvim でローカルにあるプラグインを読み込む方法
概要
前置き
拙作のプラグインである extend_word_motion.nvim を開発するため、ローカルにあるプラグインを lazy.nvim で読み込む必要がありましたので、そのための設定を備忘録として残します。
環境
1❯ nvim --version
2NVIM v0.10.2
3Build type: Release
4LuaJIT 2.1.1713773202
5Run "nvim -V1 -v" for more info
1# lazy.nvim
2version 11.16.2
3tag v11.16.2
4branch main
5commit 7e6c863
1~/.config/nvim
2 ├── init.lua
3 ├── lazy-lock.json
4 ├── lua
5 │ ├── config
6 │ ├── plugins
7 │ │ ├── ...
8 │ │ ├── extend_word_motion-nvim.lua
9 │ │ └── ...
10 │ └── setting
必要な設定
ローカルプラグインを読み込むための設定は、公式リファレンスの configuration と Examples で以下のとおり提示されています。それぞれの設定の説明は、コメントに書かれています。
1dev = { 2 -- Directory where you store your local plugin projects. If a function is used, 3 -- the plugin directory (e.g. `~/projects/plugin-name`) must be returned. 4 ---@type string | fun(plugin: LazyPlugin): string 5 path = "~/projects", 6 -- (拙訳) 7 -- あなたがローカルプラグインのプロジェクトを保存したディレクトリ。function を使うのであれば、 8 -- プラグインのディレクトリ(例: `~/projects/plugin-name`)が返される必要がある。 9 ---@type string | fun(plugin: LazyPlugin): string 10 11 ---@type string[] plugins that match these patterns will use your local versions instead of being fetched from GitHub 12 patterns = {}, -- For example {"folke"} 13 -- (拙訳) 14 ---@type string[] これらのパターンにマッチするプラグインは、Github から取得してくる代わりにローカルにあるものを使います。 15 16 fallback = false, -- Fallback to git when local plugin doesn't exist 17},
1return { 2 -- local plugins need to be explicitly configured with dir 3 { dir = "~/projects/secret.nvim" }, 4 (拙訳) 5 -- ローカルプラグインは dir オプションを使って明示的に設定される必要があります。 6 7 -- local plugins can also be configured with the dev option. 8 -- This will use {config.dev.path}/noice.nvim/ instead of fetching it from GitHub 9 -- With the dev option, you can easily switch between the local and installed version of a plugin 10 { "folke/noice.nvim", dev = true }, 11 (拙訳) 12 -- ローカルプラグインは、dev オプションを使うことでも設定されます。 13 -- GitHub からフェッチする代わりに {config.dev.path}/noice.nvim/ が使われます。 14 -- dev オプションを使うと、ローカル版とインストール版の間でプラグインのバージョンを簡単に切り替えられます。 15}
この説明と、ローカルプラグインのファイル構造を踏まえて、init.lua
と lua/plugin/extend_word_motion.lua
を以下のとおり設定しました。
1~/my_neovim_plugins
2 └── extend_word_motion.nvim
3 ├── doc
4 │ ├── extend_word_motion.txt
5 │ └── tags
6 ├── LICENSE
7 ├── lua
8 │ └── extend_word_motion
9 │ ├── init.lua
10 │ └── util.lua
11 ├── plugin
12 │ └── extend_word_motion.vim
13 └── README.md
1-- init.lua
2require("lazy").setup({
3 dev = {
4 path = "~/my_neovim_plugins",
5 },
6 spec = {
7 import = 'plugins',
8 }
9})
1-- lua/plugins/extend_word_motion.lua
2return {
3 dir = '~/my_neovim_plugins/extend_word_motion.nvim',
4 opts = {},
5 dependencies = {
6 'sirasagi62/tinysegmenter.nvim'
7 },
8}
この設定により、~/my_neovim_plugins/extend_word_motion.nvim
で開発しているローカルプラグインを lazy.nvim で読み込むことができました。
ローカル版と GitHub 版の切り替え
開発が一段落すると GitHub にプッシュすると思いますが、init.lua
と lua/plugins/extend_word_motion.lua
を以下のとおり変更すると、GitHub 版とローカル版を簡単に切り替えられるようになります。
1-- init.lua
2require("lazy").setup({
3 dev = {
4 path = "~/my_neovim_plugins",
5 patterns = { 'extend_word_motion.nvim' },
6 },
7 spec = {
8 import = 'plugins',
9 }
10})
1-- lua/plugins/extend_word_motion.lua
2return {
3 's-show/extend_word_motion.nvim',
4 dev = true,
5 opts = {},
6 dependencies = {
7 'sirasagi62/tinysegmenter.nvim'
8 },
9}
dev
を true
にすればローカル版が読み込まれ、false
にすると GitHub 版が読み込まれます。
補足
もし、ローカルプラグインを追加する場合、そのプラグインの設定ファイルを lua/plugins
に作成すればOKです。ここでは ~/my_neovim_plugins/test_plugin
というプラグインを追加しています。
1~/my_neovim_plugins
2 ├── extend_word_motion
3 │ ├── doc
4 │ │ ├── extend_word_motion.txt
5 │ │ └── tags
6 │ ├── LICENSE
7 │ ├── lua
8 │ │ └── extend_word_motion
9 │ │ ├── init.lua
10 │ │ └── util.lua
11 │ ├── plugin
12 │ │ └── extend_word_motion.vim
13 │ └── README.md
14 └── test_plugin
15 └── plugin
16 └── test_plugin.vim
1-- lua/plugins/test_plugin.lua
2return {
3 dir = '~/my_neovim_plugins/test_plugin',
4}
この設定で ~/my_neovim_plugins/testest_plugin
が読み込まれます。