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を使い続けようかと思います。