0
1

【Neovim】packerを使っている人にlazyへの移行を勧める(移行手順あり)

Last updated at Posted at 2024-06-07

はじめに

neovimのプラグインマネージャって色々ありますが、最近だとlazyってやつが有力らしいですね。

というのもここ最近まで有名だったpackerってプラグインマネージャがメンテナンスされなくなったらしく、その影響もあって今lazyが熱いようです。

image.png

そこで私もpackerからlazyに移行したのですが、その時の移行手順を紹介したいと思います。

移行手順

では実際に移行手順のご紹介です。
先に筆者のneovim設定ファイルを晒しておきます。適宜ご参考ください。
ちなみにpackerからlazyに移行したコミットは1825dc9fです。

さてまずはlazyのディレクトリ構成について紹介します。

lazyは以下のような構成を取ることが多いです。以下は筆者のディレクトリ構成です。

~/.config/nvim
lua/
 |- settings/
 |   |- core/
 |   |   |- init.lua
 |   |   |- keymaps.lua
 |   |   |_ options.lua
 |   |- plugins/
 |   |_ lazy.lua
 |- init.lua
 |_ lazy-lock.json

まずはlua/init.luaからです。

init.lua
require("settings.core")
require("settings.lazy")

settingsディレクトリのモジュールを読み込んでいます。
coreフォルダにはkeymapやoptionsなどのnvim全般の設定を記述しています。

lazy.luaは以下のようになっています。最後の行以外はlazyのgithubからコピペしただけです。

settings/lazy.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)

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

最後の行でプラグインディレクトリをimportしています。
筆者はlspのプラグインをサブディレクトリで管理しているので、2つimportしてます。(暗黙的にサブディレクトリも見てくれることはないみたいです)

で、あとはプラグインディレクトリとしてimportしたディレクトリにファイルを追加していくだけです。

プラグインファイルの記述について

上記のディレクトリ構成の場合、プラグインファイルは必ずobjectをreturnする必要があります。1
先ほどのnoiceのプラグインファイルを再掲します。

settings/plugins/noice.lua
return {
	"folke/noice.nvim",
	dependencies = {
		"MunifTanjim/nui.nvim",
		"rcarriga/nvim-notify",
	},
	opts = {
		routes = {
			{
				filter = { event = "notify", find = "No information available" },
				opts = { skip = true },
			},
		},
		presets = {
			inc_rename = true,
			lsp_doc_border = true,
		},
	},
}

このようにreturn { }の形式で記述していくことになります。
よく使うプロパティは以下です。

プロパティ 説明
[1] githubのurlを記述します。localにあるプラグインを読み込む場合を除いて必須の項目です。
dependencies 依存プラグインを記述します。packerでいうrequiresです。
event2 プラグインのloadタイミングを指定できます。例えばInsertEnterと指定すると、インサートモードに入った時に初めてプラグインがloadされます。
opts プラグインの設定を記述します。packerでrequire("foo_module").setup({})の中に書いていた内容をそのまま記述できます。
config たまにsetupの中で関数を使ったりしないといけない設定がありますが、そのためのプロパティです。config = function()と書いて、下に設定内容を書いていきます。

で、実際の移行手順ですが、基本的には以下の流れでlazy用の構成に組み直せば問題ないかと思います。

  1. init.lualazy.luaを読み込む
  2. lazy.luaでlazyのセットアップスクリプトをコピペして、プラグインディレクトリをimportする
  3. プラグインディレクトリにuseでinstallしていたプラグインたちをファイル分割して入れていく

移行が完了すると、neovimを起動した時にlazyとその他プラグインのinstallが走ります。
スクリーンショット 2024-06-08 4.45.57.png

packerも似たようなUIありますが、lazyの方が若干モダンな感じがして気持ちいです。

最後に

packerからlazy移行しないとな〜と一生思ってる方の助けになれば幸いです。。

それでは良いvimライフを!!!

  1. lazyのプラグイン読み込みは本来以下のようになります。

    require("lazy").setup({
      "folke/which-key.nvim",
      { "folke/neoconf.nvim", cmd = "Neoconf" },
      "folke/neodev.nvim",
    })
    

    今回はこのsetup内をimportで代替するので、各プラグインファイルはobjectをreturnする必要があります。

  2. 指定可能なイベント一覧はこちら

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1