AstroNvim
NeovimをIDEっぽくしてくれる各種設定とプラグインがまとまったパッケージです。
以前にもQiitaに紹介記事(AstroNvimの設定を晒す〜copilotを添えて〜)を書いていますが、久々にUpdateしたところ、最新版のv4ではユーザカスタマイズ設定の仕方がガラッと変わっていたので、Migrationの手順について纏めてみます。
※ あまりにも変わりすぎていて、v3での設定を捨てて完全に新規で入れ直したほうが早いかもしれないと思ったほどです。
Migration v3 to v4
まずは、公式のMigration Guideを参照しましょう。と言いたいとこなんですが、User Configurationの移行方法についてはあまり詳しく書かれていないので、少し戸惑うことがあるかもしれません。
というか筆者は最初戸惑いました。
なので、ここでは、v3の設定をv4に移行する際のポイントを紹介します。
1. 既存設定のバックアップ
まずは、既存の設定をバックアップしておきましょう。
ここの手順は、Migration GuideまたはGetting Startedに載っているコマンドを実行します。
# Backup old Neovim folders
mv ~/.local/share/nvim ~/.local/share/nvim.bak # backup old data folder
mv ~/.local/state/nvim ~/.local/state/nvim.bak # backup old state folder
mv ~/.cache/nvim ~/.cache/nvim.bak # backup old cache folder
mv ~/.config/nvim ~/.config/nvim.bak # backup old config
2. v4のインストール
次に、v4のAstroNvimをインストールします。
git clone --depth 1 https://github.com/AstroNvim/template ~/.config/nvim
rm -rf ~/.config/nvim/.git
nvim
ここでのポイントは、~/.config/nvimにtemplateをcloneして、.gitを削除することです。
ちなみにここまでの手順は、Getting Startedと同じです。
3. User Configurationの準備
Migration Guideには一応Tipとして、
Checkout the Managing User Configuration Page for details on how to create a new git repository from our template or convert the clone described above into a repository. It is highly recommended to set up your configuration as a git repository so that it is backed up as well as easier to share.
と書かれてるんですが、多くのユーザはUser Configurationの移行方法のほうが重要なはずなので、Migration Guide側でもう少し詳しく書いてほしかったです。
というわけで次はUser Configurationの準備をやっていきます。
公式の手順は ここにあります。
Fresh InstallationとFollowed Getting Startedの2つ手順があるんですが、手順2までをGetting Startedと同じ手順で進めているので、Followed Getting Startedの手順で進めます。
3-1. リポジトリの準備
AstroNvimの設定用リポジトリを作成します。
作成先はGitHubでもGitLabでもBitbucketでもなんでもいいです。一応、以降の手順はGitHubを想定しますが、適宜読み替えてください。
リポジトリだけ作ったら空の状態で大丈夫です。
3-2. リポジトリにtemplateのファイル群をコミット
Followed Getting Startedの手順2を実行します。手順に書かれているコマンドを~/.config/nvimに移動して実行します。
~/.config/nvimは、手順2でAstroNvim v4のファイル群がcloneされていて、.gitが削除されている状態です。
cd ~/.config/nvim
git init
git add --all
git commit -m "Initial commit"
git branch -M main
git remote add origin git@github.com:<あなたのユーザ名>/<手順3-1で作成したリポジトリ名>.git
git push -u origin main
手順3-1で作成したリポジトリにAstroNvimのファイル群をコミットします。
これで、User Configurationの準備は完了です。
4. v3から設定を移行
手順3までで、User Configurationの準備が完了したので、v3から設定を移行します。
v3のUser設定ファイルは、手順1でバックアップを取ってあるので、~/.config/nvim.bak/lua/userにあるはずです。
もしくは元々リポジトリ管理していれば、リポジトリにあることでしょう。
幸いなことに大半のplugin設定はほぼそのまま動くので、~/.config/nvim/lua/plugins/の下にluaファイルを作成して、既存の設定を持ってくればOKです。
Customize Pluginsを参考にしながら、設定を移行していきましょう。
ただし一部のkeyは変更されているので、注意が必要です。
ここで筆者の設定用リポジトリを載せておきます。
v3用
https://github.com/kane8n/AstroNvimUser
v4用
https://github.com/kane8n/astronvim-config
.
├── README.md
├── init.lua
├── lazy-lock.json
├── lua
│ ├── community.lua
│ ├── lazy_setup.lua
│ ├── plugins
│ │ ├── astrocore.lua
│ │ ├── astrolsp.lua
│ │ ├── astroui.lua
│ │ ├── copilot.lua
│ │ ├── im-select.lua
│ │ ├── markdown-preview.lua
│ │ ├── mason.lua
│ │ ├── none-ls.lua
│ │ ├── overridden-core.lua
│ │ ├── overridden-heirline.lua
│ │ ├── overridden-lsp.lua
│ │ ├── overridden-neo-tree.lua
│ │ ├── overridden-toggleterm.lua
│ │ ├── overridden-treesitter.lua
│ │ ├── treesitter.lua
│ │ └── user.lua
│ └── polish.lua
├── neovim.yml
└── selene.toml
3 directories, 24 files
lua/pluginsの下に各プラグインの設定ファイルを作成しています。
astrocore.luaやastrolsp.luaなどの元々templateにあるファイルは、そのままにしています。
これらのファイルは先頭にif true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILEという行があるので、この行を削除することで有効になります。
ただ筆者は元々あるファイルはそのままにして、デフォルトで入ってるpluginやasrtonvimの設定を上書きする設定は、overridden-*.luaというファイルに書くようにして、元から入ってるものか、後から追加で入れたものか分かるようにしました。
なおデフォルトで入っているpluginは、ドキュメントのDefault Pluginsに載っています。
移行のポイント
設定を移行する際にうまく動かなかったり、記述場所が変わっていたりするポイントをいくつか挙げておきます。
rebelot/heirline.nvim
-
local status = require("astronvim.utils.status")の部分がlocal status = require("astroui.status")になる
Migration Guideにも書かれていますが、astronvim.utils.statusがastroui.statusに変わっています。
toggleterm.nvim
v3ではF7でterminalを開く際にデフォルトで、floatで開くようになっていました。
v4で設定を変えずにF7でterminalを開くと、horizontalで開くようになっていました。
<Leader>tfで実行すればfloatで開いて、最後に使用したdirectionがキャッシュされているので、以降はF7でもfloatで開くようになりますが、別プロセスで実行したnvimには反映されないので、やはり設定を変える必要があります。
筆者はfloatで開くのに慣れきっているので、F7でfloatで開くようにしておきたいです。
設定ファイルでデフォルトのdirectionを変更できるので、lua/plugins/overridden-toggleterm.luaに以下を設定しています。
return {
{
"akinsho/toggleterm.nvim",
opts = {
direction = "float",
},
},
}
markdown-preview.nvim
筆者はmarkdownのプレビューにはmarkdown-preview.nvimを使っています。
こちらは設定そのものは変更していませんが、pluginのインストールの際に以下のエラーが出てビルドに失敗しました。
Vim:E117: Unknown function: mkdp#util#install
幸いにも、Issueに解決方法が書かれていました。
lua/plugins/markdown-preview.luaに以下を追加します。
return {
{
"iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
ft = { "markdown" },
build = function()
vim.fn['mkdp#util#install']()
end,
},
}
その後nvimを再起動して、
:Lazy load markdown-preview.nvim
の後に
:Lazy build markdown-preview.nvim
を実行すると、ビルドが成功しました。
LSP
各言語のLSPの設定は、astrocommunityの設定ファイルを利用するのが楽です。
主要な言語はほぼ対応しているので、lua/community.luaに設定を追加していくだけでOKです。
言語系のpackは、https://github.com/AstroNvim/astrocommunity/tree/main/lua/astrocommunity/pack にあります。
筆者のlua/community.luaは以下のようになっています。なおこのファイルはtemplateに元からあるファイルなので、一行目にあるif true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILEを削除して有効にしています。
-- AstroCommunity: import any community modules here
-- We import this file in `lazy_setup.lua` before the `plugins/` folder.
-- This guarantees that the specs are processed before any user plugins.
---@type LazySpec
return {
"AstroNvim/astrocommunity",
{ import = "astrocommunity.pack.lua" },
-- import/override with your plugins folder
{ import = "astrocommunity.pack.go" },
{ import = "astrocommunity.pack.html-css" },
{ import = "astrocommunity.pack.java" },
{ import = "astrocommunity.pack.json" },
{ import = "astrocommunity.pack.ps1" },
{ import = "astrocommunity.pack.python" },
{ import = "astrocommunity.pack.sql" },
{ import = "astrocommunity.pack.terraform" },
{ import = "astrocommunity.pack.yaml" },
{ import = "astrocommunity.pack.markdown" },
}
LSPの設定に関しては、Advanced LSP Setupのページに詳しく書かれています。
筆者は特にしていませんが、astrocommunity.packで入れたLSPの設定も、lua/plugins/配下に設定ファイルを作成して、一部設定を上書きする。ということもできるはずです。
ファイル保存時の自動フォーマット
lua/plugins/overridden-lsp.luaに以下の設定を入れています。
markdown保存時に空行による改行を入れるフォーマットが邪魔だったので、markdownは除外しています。
return {
{
"AstroNvim/astrolsp",
opts = {
formatting = {
-- control auto formatting on save
format_on_save = {
enabled = true, -- enable or disable format on save globally
allow_filetypes = { -- enable format on save for specified filetypes only
"go",
},
ignore_filetypes = {
"markdown",
},
},
},
},
},
}
core設定とauto commands
vim.optやautocmdsの設定は、lua/plugins/overridden-core.luaに書いています。
筆者は相対行番号を無効にしたり、Vimを開いた際にNeotreeも開くようにしています。
(relativenumberって需要あるのかな?
return {
{
"AstroNvim/astrocore",
---@type AstroCoreOpts
opts = {
-- vim options can be configured here
options = {
opt = { -- vim.opt.<key>
relativenumber = false, -- sets vim.opt.relativenumber
},
},
autocmds = {
terminal_settings = {
{
event = "VimEnter",
callback = function()
vim.cmd "Neotree toggle"
end,
},
},
},
},
},
}
設定によっては、lua/polish.luaに書いたほうが良いのもあるかもしれませんが、筆者はlua/polish.luaは使っていません。
まとめ
AstroNvim v4にアップデートする際のMigration手順について纏めてみました。
最初はあまりの変わりように戸惑いましたが、Migration Guideを読みながら、User Configurationの移行方法を調べていくことで、なんとか設定を移行することができました。
ただ慣れてみると、v4の設定の書き方はv3よりもシンプルで、設定の追加や変更もしやすくなっているように感じます。
そしてなによりastrocommunityがとても便利なことに気づきました。
筆者はしばらくはAstroNvimを使い続けようかと思います。