プラグインマネージャーをpacker.nvimからlazy.nvimに置き換えた
先日Packer.nvimの挙動がおかしくなったのを期に、Neovimで利用しているプラグインマネージャーをpacker.nvimからlazy.nvimに置き換えました。設定ファイルの書き方や置き換えの際の注意点などをメモします。
背景
packer.nvimは2023年8月を最後に更新が止まっており、今後もメンテナンスされる見込みがないため別のプラグインマネージャーの利用が推奨されていました。
This repository is currently unmaintained. For the time being (as of August, 2023), it is recommended to use one of the following plugin managers instead:
私はその後もPacker.nvimを使い続けていましたが、2024年7月20日にPacker.nvimの挙動がおかしくなり、dap-goの設定がうまく読み込まれなくなりました(ちなみにdap-goはnvimのデバッグアダプタープロトコルを利用してGoのデバッグを行うためのプラグインです)。
そのため、Packer.nvimを置き換えることにしました。
lazy.nvim
Packer.nvimの代替としてlazy.nvimを選択しました。
選択した理由はpacker.nvimのリポジトリのREADMEで推奨されていたからです。同じくlazy.nvimに移行したユーザーの声も多く、情報が豊富で安定しているように感じました。
事前準備(init.vimからinit.luaへ移行)
Packer.nvimからlazy.nvimに置き換える際、まずinit.vimからinit.luaへの移行を行いました。
lazy.nvimのドキュメントにはluaでの設定方法が記載されていましたが、init.vimでの設定方法は記載されていなかったからです。
init.luaへの移行は以前から検討していたためこの機会に実施しました。
lazy.nvimの導入
lazy.nvimの導入はこちらのドキュメントに参考に行いました。
ディレクトリ構成
init.lua
init.luaにlazy_nvimを読み込む設定を追加しました。
1require('lazy_nvim')
init.luaが置かれている階層にluaディレクトリがあると、luaディレクトリ内のluaファイル名を指定することでinit.luaから読み込むことができます。
lazy_nvim.lua
lazy_nvim.luaにlazy.nvimの設定を記述しています。これはドキュメントのサンプルコードをほぼそのまま利用していますが、プラグインの設定は別のファイルに分けたかったため、setupの記述を下記のように変更しました。
1require("lazy").setup("plugins")
setup("plugins")
とすることで、lazy_nvim.luaと同じ階層にあるplugins.luaを読み込むようになります。
plugins.lua
下記のようにプラグインの設定を記述しました。
1return {
2 -- File manager
3 'lambdalisue/fern.vim',
4 { -- colorscheme
5 'catppuccin/nvim',
6 config = function() vim.cmd('colorscheme catppuccin-mocha') end,
7 },
8 { -- Appearance
9 'lukas-reineke/indent-blankline.nvim',
10 lazy = true,
11 event = { 'BufRead', 'BufNewFile' }
12 },
13 { -- Appearance
14 'nvim-lualine/lualine.nvim',
15 lazy = true,
16 event = { 'BufRead', 'BufNewFile' },
17 config = function() require('nvim_lualine') end
18 },
19 { -- Appearance
20 'lewis6991/gitsigns.nvim',
21 lazy = true,
22 event = { 'BufRead', 'BufNewFile' },
23 config = function() require('gitsigns_nvim') end
24 },
25 { -- Configurations for Nvim LSP
26 'neovim/nvim-lspconfig',
27 lazy = true,
28 event = { 'BufRead', 'BufNewFile' },
29 config = function() require('nvim_lspconfig') end
30 },
31 { -- Formatt and lint runner
32 'nvimtools/none-ls.nvim',
33 lazy = true,
34 event = { 'BufRead', 'BufNewFile' },
35 dependencies = {
36 {
37 'nvim-lua/plenary.nvim',
38 lazy = true,
39 event = { 'BufRead', 'BufNewFile' },
40 }
41 },
42 config = function() require('null_ls') end
43 },
44 { -- Auto completion
45 'hrsh7th/nvim-cmp',
46 dependencies = {
47 {
48 'hrsh7th/cmp-nvim-lsp',
49 lazy = true,
50 event = { 'InsertEnter' }
51 },
52 {
53 'hrsh7th/vim-vsnip',
54 lazy = true,
55 event = { 'InsertEnter' }
56 },
57 },
58 config = function() require('nvim_cmp') end
59 },
60 { -- Debug Adapter Protocol
61 'mfussenegger/nvim-dap',
62 lazy = true,
63 event = { 'BufRead', 'BufNewFile' },
64 dependencies = {
65 {
66 'leoluz/nvim-dap-go',
67 lazy = true,
68 event = { 'BufRead', 'BufNewFile' }
69 },
70 },
71 config = function() require('nvim_dap') end
72 },
73 -- GitHub Copilot
74 'github/copilot.vim'
75}
packer.nvimとlazy.nvimではプラグインを設定する際のフィールド名が異なるため、書き換えが必要でした。
ドキュメントにはMigration Guideがあるのでそれを参考にしました。
私は利用しているプラグインが10個程度と少ないため大変な作業ではありませんでしたが、プラグインが多い場合はchatgptに任せるのが良さそうです。
ちなみにlazy = trueというのは遅延読み込みを行うための設定です。
まとめ
Packer.nvimからlazy.nvimに置き換えることで、Neovimのプラグインマネージャーを最新のものに更新することができました。dap-goも正常に動作するようになり、快適な開発環境を取り戻すことができました🙂