Neovim 0.12アップデートの個人的に嬉しいことまとめ
つい先日Neovim 0.11.7が出たばっかですが、Neovim 0.12がリリースされました。この記事ではその概要やアップデート手順、個人的なうれしいポイントを紹介します。
## アップデート手順
書くまでもないですが一応。
- 一次情報に目を通す(次の項目でリンクをまとめました)
- 各パッケージマネージャーでアップデート
- プラグインの設定アップデート
## Neovim 0.12リンクまとめ
公式関係のリンクをまとめておきます。
- News 0.12(Breaking Changes、新機能のまとめ)
- 非推奨になったものまとめ
:lspコマンドのドキュメント
v0.11のときはニュースレターあったんですが今回は出てないようです。
## Breaking Changesはどうよ?
diagnostics系が多いようです。
### nvim-treesitterはmainブランチのみへ
Neovim v0.11が出たあたりで、nvim-treesitterはmasterブランチからmainブランチに移行されてます。
「masterブランチ版は互換性が無い」とREADMEに書いてあります。もしまだ未移行の方は移行しましょう。
移行にあたってはAtusyさんのブログが参考になります。
Neovim ≧ 0.11ユーザーのためのnvim-treesitter最新版利用ガイド(mainブランチ切り替え) | Atusy’s blog
#### nvim-treesitterがアーカイブ!?
このブログを書いている最中に、nvim-treesitterリポジトリがアーカイブされました 。
今後どうなるのかは検討もつかないので、とりあえずv0.12を使いたい人は mainブランチに移行して続報を待ちましょう 。
## deprecatedは?
deprecatedはそこそこあります。vim.lsp系がvim.lsp.〇〇.enableのように統一されたっぽいです。
あと0.11の時点ですでにvim.diagnostic.goto_prevが非推奨になっていたようなので、jumpに変えました(気づかなかった)。
vim.keymap.set("n", "[d", "<cmd>lua vim.diagnostic.goto_prev()<CR>", bufopts)vim.keymap.set("n", "]d", "<cmd>lua vim.diagnostic.goto_next()<CR>", bufopts)vim.keymap.set("n", "[d", "<cmd>lua vim.diagnostic.jump({count=-1, float=true})<CR>", bufopts)vim.keymap.set("n", "]d", "<cmd>lua vim.diagnostic.jump({count=-1, float=true})<CR>", bufopts)公式ドキュメント:Deprecated - Neovim docs
## デフォルトキーマップの追加
デフォルトのキーマップが増えました。
| モード | キー | 内容 |
|---|---|---|
| Normal | grt | vim.lsp.buf.type_definition() |
| Normal | grx | vim.lsp.codelens.run() |
lsp系はgr〇で統一する流れなんですかね(0.11でもそうだった)。
## treesitterで範囲の広げたり狭めたり
visualモードで選択中にanを押すとtreesitterに基づいて選択範囲が広がります。逆にinを押すと範囲が狭まります。
### 確認用コード
local function greet(name) local message = "Hello, " .. name .. "!" -- ^ ここにカーソル置いてviw an an an... print(message) return messageendもし効かない場合は↓をチェックしてみてください(思いついたら随時追記します)。
- 使用言語のパーサーが入っているか(上記はLuaの例で、ビルトインのはず)
- プラグインに上書きされてないか
### mini.ai
nvim-mini/mini.aiユーザーは注意です!mini.aiのデフォルトはビルトインのv_an・v_inを上書きします。
これを無効化してNeovimビルトインの方を使うには次のように設定すればOKです。
require("mini.ai").setup({ -- ... mappings = { -- 0.12の v_an / v_in を優先するため、mini.ai側は無効化 around_next = "", inside_next = "", around_last = "", inside_last = "", },})参考:treesitter-defaults for incremental selection don’t work… #2338 · nvim-mini/mini.nvim
## LSP関係
:lsp系のコマンドが追加されました。今まではlspconfig頼りでしたが0.12からはビルトインです。
:lsp enable [config_name]:lsp disable [config_name]:lsp restart [config_name]:lsp stop [config_name]
公式ドキュメント:Lsp - Neovim docs
## プラグイン関係
ビルトインのプラグインマネージャーが実装されました。 vim.packという関数のようです。
↓mini.nvimの作者echasnovskiさんのブログが詳しいので、vim.pack使いたい人は見てみてください。
A Guide to vim.pack (Neovim built-in plugin manager) – Evgeni Chasnovski
※現段階では移行する理由が特に無いため、筆者はlazy.nvimを使っています。
### 新規プラグイン
プラグインとしてUndotreeが仲間入りです。編集履歴をツリー上で確認でき、過去の編集時点に戻せます。

次の手順で有効化&起動できます。
:packadd nvim.undotree:Undotree動画ではfoo→barからundoしてfooに戻り、buzに編集しています。
この状態だと普通はundoすると編集が分岐しているbarには戻れず、fooにしか戻れません。
が、Undotreeだとbarのように 分岐先にも戻れる ので便利です。
しかもNeovim起動時にUndotreeを無効化していても、 有効化するよりも前のUndotreeも辿れます 。
## 再起動コマンド
:restartでNeovimを再起動できます。エディタを開きっぱなしにしている人にとってはいいかも?
ざっくりとした挙動は次のとおりです(参考::help :restart)。
:qallを使ってNeovimが終了nvimコマンド実行時に指定した引数のまま起動- UIの描画
:restart [command]のようにコマンドを指定してたらコマンド実行
というわけで 開いてたバッファなどは閉じます が、起動時に指定してたファイルは開きます。
:help :restartにはmksessionと組み合わせてセッションを維持する方法やプラグインアップデートの例が書かれてます。
## ui2
メッセージ関係のUIを新しくするui2も使えるようになりました。
まだ実験的なようです。次のようにenableすれば適用されます。
require('vim._core.ui2').enable({})※ドキュメントそのまま実行して引数が空にするとエラーになります。
Press ENTERとかが無くなったり、入力に合わせてコマンドラインにハイライトが効くようです。
筆者はnoice.nvimを使っているので正直旨味を味わえていません。そもそも実験的な段階ということで、いったん様子見です。
以上、Neovim 0.12のアップデート備忘録でした。Xの公式アカウントのポストによれば今年1.0になるらしいので楽しみです。
一方でnvim-treesitterはどうなるのか全然分からないので、要ウォッチです。