LazyVim に移行する
普段Neovimを愛用していて、昨年Neovimの設定をVimScriptから LuaScriptに移行しました。 快適に使っているのですが、Neovimコミュニティはプラグインの開発が盛んで 更新に対応させ最新を維持するのが結構しんどいなと感じていました。
今回は自分で作った設計を一回捨てて、 LazyVim に移行することにしました。デフォルトのカラースキーマーが私が使っているものと同じ であるのも気に入った点です。
LazyVimとは
LazyVim とは、Neovimのプラグインマネージャーである
lazy.nvim
を利用して、Neovimでよく使われる
設定を予め組み込み、かつカスタマイズや設定の効率化を目指したパッケージです。
以下のような機能があります。
- NeovimをVisual Studio Code以上に本格的なIDEのような使い勝手を得ることができます
-
lazy.nvim
を使って、カスタマイズや拡張が容易にできます -
lazy.nvim
を使っているため、プラグインの読み込みが非常に高速です - オプションやAutocmd、キーマップについて合理的なデフォルトが提供されています
- 多数のプラグインが事前に設定されており、すぐに利用可能です
LazyVimへの移行方法
移行用法は Instrationガイドを読めば およそわかると思います。
次の4ステップです。
- 既存環境のバックアップ
- LazyVim Starterの取得
- LazyVim Starterから不要なファイルを削除
- Neovimの起動(設定されているプラグインが'lazy.nvim'により自動的にインストールされます)
いかが具体的な手順です。
# Step1 mv ~/.config/nvim{,.bak} # required mv ~/.local/share/nvim{,.bak} # optional but recommended mv ~/.local/state/nvim{,.bak} # optional but recommended mv ~/.cache/nvim{,.bak} # optional but recommended # Step2 git clone https://github.com/LazyVim/starter ~/.config/nvim # Step3 rm -rf ~/.config/nvim/.git # Step4 nvim
以上です。驚くほど簡単です。
LazyVimのパーソナライズ
~/.config/nvim
以下に作成されたLazyVimの設定ファイルは以下のような構造になっています。
. ├── init.lua ├── lazy-lock.json ├── lazyvim.json ├── LICENSE ├── lua │ ├── config │ │ ├── autocmds.lua │ │ ├── keymaps.lua │ │ ├── lazy.lua │ │ └── options.lua │ └── plugins │ ├── coding.lua │ └── example.lua
lua/config
以下のファイルがカスタマイズを記述するファイルで、
lua/plugins
以下のファイルが自身で追加するプラグインなどの設定を置く場所です。
lua/config
配下の設定
lua/config
配下には4つのファイルが配置されていますが、
lazy.lua
以下のファイルは空です。私は、 autocmds.lua
と options.lua
のみ設定しました。
autocmds.lua
については、MarkdownやJsonファイルで Concealingされるが嫌なので以下の設定を
入れています。
vim.api.nvim_create_autocmd("FileType", { pattern = { "markdown", "json" }, callback = function() vim.wo.conceallevel = 0 end, })
LazyVimではすでにいい感じにVimオプションを設定してくれているので、
options.lua
は基本的には好みで設定すればよいと思います。
しかし、日本語環境では以下の設定は行ったほうがよいと思います。
local opt = vim.opt vim.scriptencoding = "utf-8" opt.encoding = "utf-8" opt.fileencoding = "utf-8" opt.spelllang = vim.opt.spelllang + "cjk"
lua/plugins
配下の設定
lua/plugins
配下はデフォルトではexample.lua
しか入っておらず、設定例となっており
実際の設定は無効化されています。
このフォルダ配下に、hogehoge.lua
というファイル名でlazy.nvim
の形式でプラグインの設定
を書けばプラグインを拡張することもできますし、LazyVimですでに組み込まれているプラグインの
カスタマイズもこちらで行えます。
現時点では、以下の3点のみカスタマイズしています。
-
autodate.vim
の追加 - 組み込み済みの
friendly-snippets
にローカルのスニペット定義をソースとして追加 - 組み込み済みの
gitsigns.nvim
でマークを自分の好みに変更
具体的な設定はcoding.lua
というファイル名で以下のような設定を行っています。
return { { -- -------------------------------------------- -- Setting for Autodate -- Timestamp format Output example -- %Y/%m/%d 2004/09/27 -- %H:%M:%S 13:06:32 -- %y%m%d-%H%M 040927-1308 -- %d-%3m-%Y 27-Sep-2004 -- %Y/%m/%d %H:%M:%S 2004/09/27 13:06:32 -- %c Sun Apr 27 11:49:23 1997 -- %Y %b %d %X 1997 Apr 27 11:53:25 -- %y%m%d %T 970427 11:53:55i -- -------------------------------------------- "vim-scripts/autodate.vim", event = "BufWritePre", config = function() -- let g:autodate_format = '%Y-%m-%d %H:%M:%S' vim.g.autodate_format = "%Y-%m-%d %H:%M:%S" end, }, { "rafamadriz/friendly-snippets", config = function() require("luasnip.loaders.from_vscode").lazy_load() require("luasnip.loaders.from_snipmate").load({ paths = { "~/.config/nvim/snippets" } }) -- Load snippets from my-snippets folder end, }, { -- Adds git releated signs to the gutter, as well as utilities for managing changes "lewis6991/gitsigns.nvim", event = { "BufReadPre", "BufNewFile" }, opts = { signs = { add = { hl = "GitSignsAdd", text = "+", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" }, change = { hl = "GitSignsChange", text = "~", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" }, delete = { hl = "GitSignsDelete", text = "", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, topdelete = { hl = "GitSignsDelete", text = "", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" }, changnedelete = { hl = "GitSignsChange", text = "~", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" }, untracked = { text = "▎" }, }, on_attach = function(buffer) local gs = package.loaded.gitsigns local function map(mode, l, r, desc) vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc }) end -- stylua: ignore start map("n", "]h", gs.next_hunk, "Next Hunk") map("n", "[h", gs.prev_hunk, "Prev Hunk") map({ "n", "v" }, "<leader>ghs", ":Gitsigns stage_hunk<CR>", "Stage Hunk") map({ "n", "v" }, "<leader>ghr", ":Gitsigns reset_hunk<CR>", "Reset Hunk") map("n", "<leader>ghS", gs.stage_buffer, "Stage Buffer") map("n", "<leader>ghu", gs.undo_stage_hunk, "Undo Stage Hunk") map("n", "<leader>ghR", gs.reset_buffer, "Reset Buffer") map("n", "<leader>ghp", gs.preview_hunk_inline, "Preview Hunk Inline") map("n", "<leader>ghb", function() gs.blame_line({ full = true }) end, "Blame Line") map("n", "<leader>ghd", gs.diffthis, "Diff This") map("n", "<leader>ghD", function() gs.diffthis("~") end, "Diff This ~") map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", "GitSigns Select Hunk") end, }, }, }
LazyVim Extras
LazyVimはデフォルトでは有効になっていないが、よく使われる設定も多数組み込まれています。 本当に多数です。
これらは LazyVim Extras と呼ばれており :LazyExtras
コマンドにより個々の設定を簡単に
オンオフすることができます。
● editor.mini-files mini.files ● formatting.black mason.nvim conform.nvim none-ls.nvim ● formatting.prettier mason.nvim conform.nvim none-ls.nvim ● lang.markdown headlines.nvim markdown-preview.nvim mason.nvim nvim-lspconfig nvim-treesitter none-ls.nvim nvim-lint ● ui.mini-animate mini.animate ● ui.mini-starter mini.starter ● util.dot nvim-treesitter
まとめ
LuaScriptに移行は 数日かかりましたが、LazyVimを使うと2〜3時間で上記のようなわずかな設定で モダンなVim環境が簡単に手に入ります。
また、設定ファイルの配置が合理的に考えられているので、各プラグインが更新された際には LazyVimが対応してくれれば個別の対応はかなり限定的になるので維持も手間がかなり楽になると 思います。
Neovim使いの方はこに記事を記述してください。