Neovim 0.13の新機能と、意味が変わるキー
Neovim 0.13の変更で目を引くのは、新しく増えるコマンドよりもすでにあるキーの意味が変わることのほうです。QとgQは今までとまったく別のものになり、:restartは同じ名前のまま結果が変わります。手が覚えている操作が対象なので、上げた日に「押したのに違うことが起きる」という形で現れます。この記事はその変更を先に並べたものです。
検証環境:0.13はまだ開発中で、GitHubのマイルストーンには2026年10月1日という期日が付いています(2026-08-28時点で完了69パーセント、未解決78件)。動かして確かめたのは公式のnightlyビルド NVIM v0.13.0-dev-1430+g6eb36bcb2d(macOS)で、比較には手元の安定版 NVIM v0.12.4 を使いました。開発中なので、正式版で挙動が変わる可能性があります。
意味が変わるキー
まず変わるものを並べます。左が0.12までの意味、右が0.13の意味です。
| キー | 0.12までの意味 | 0.13の意味 |
|---|---|---|
| Q | 最後に記録したマクロを再生 | カーソルを増やす |
| gQ | Exモードに入る | 増やしたカーソルを戻す |
| 1q: | レジスタ1に記録を始める | Exモードに入る |
| ZR | 再起動する | 再起動して配置も戻す |
Qの変更は影響が大きいほうです。0.11から0.12までのQは「最後に記録したレジスタを@で再生する」という意味で、マクロを繰り返すときに使っていた人がいます。0.13ではここがマルチカーソルの追加に割り当てられます。元に戻したい場合の書き方が:help newsに載っていて、そのまま写せます。
vim.keymap.set('n', 'Q', function()
local reg = vim.fn.reg_recorded()
return reg == '' and '' or ('@' .. reg)
end, { expr = true })
ZRは名前こそ同じですが、後ろに数字を付けると結果が変わるようになりました。ヘルプのediting.txtによると、そのまま押せばセッションごと復元し、1から8のいずれかを前に付けると復元せず、9を付けると復元も変更の確認もしません。:restartそのものの使い方は:restartとZRの記事にあります。
マルチカーソルは、まだ動かない
ここがこの記事で確かめたかったところです。:help newsとvim_diff.txtにはQがマルチカーソルを追加すると書かれていて、回数を付ければ一致した箇所ごとに、ビジュアルモードなら選択した行ごとにカーソルが増える、という説明まで付いています。ところが手元のnightlyでは動きませんでした。
4行のJavaScriptを開いて3Qを押した結果がこれです。
E354: Invalid register name: '^@'
このエラーは0.12までのQ、つまり「記録したレジスタを再生する」処理から出ているものです。何も記録していない状態なのでレジスタ名が空になり、そこで止まっています。検索してから押しても、素のQでも同じでした。カーソルの位置は拡張マークで管理されると設計文書に書かれているので、名前空間の中身も見てみました。
:marks nvim.multicursor
E283: No marks matching "nvim.multicursor"
つまりdev-1430の時点では、ドキュメントだけが先に入って実装が追いついていない状態です。実際、機能の本体を説明するはずのrepeat.txtのマルチカーソルの節はtodoの1語しか書かれていません。設計そのものはdev_arch.txtにかなり詳しく書かれていて、キー入力を意味のある単位に切り出すCmdAtomという仕組みの上に載せる、という骨組みまでは決まっています。
ニュースの一覧を読んだだけだと「0.13でマルチカーソルが標準に入った」と書きたくなりますが、少なくともこの時点では押しても何も起きません。標準機能だけで複数箇所を書き換える方法はマルチカーソルと標準機能での代用にまとめてあるので、当面はそちらが現実的です。cgnで検索語をそのまま変更する方法もこの用途によく効きます。
Exモードの入り口が変わる
gQがマルチカーソル側に取られたので、Exモードの入り口は1q:か:exmodeに移りました。nightlyでgQを押しても何も起きず、1q:を押すと画面の下に[Ex mode]と出て、そのまま挿入モードで入力を受け付けます。
これはExモードがコマンドラインウィンドウとして作り直されたためです。従来のExモードは行単位の入力を受けるだけの窮屈なものでしたが、バッファになったことで書きかけのコマンドを普通に編集できます。コマンドラインウィンドウ側の変化はq:のコマンドラインウィンドウが変わる記事に書きました。基本的な使い方から知りたい場合はコマンドラインウインドウの使い方のほうが入りやすいです。
すでに扱った変更
0.13の変更のうち、大きいものはそれぞれ個別の記事にしてあります。ここでは一覧だけ置きます。
- :detach!でSSHが切れても作業が消えない:端末が落ちても本体を残す印を付けます
- autoreadがファイル監視になる:
:checktimeを打たなくても外部の変更が反映されます - ドット繰り返しが挿入と選択の両方で変わる:挿入したセッションが丸ごと繰り返されます
- 行と全体のテキストオブジェクト al と il:valでバッファ全体を選びます
- 標準ファイラがnetrwからdirへ:ディレクトリを開いたときの一覧が替わります
valは手元でも確かめました。前後に空白の付いた行の上でnightlyのvildを打つと行の中身だけが消え、valdではバッファが空になりました。同じ操作を0.12.4で打つとlが単なる右移動として解釈されて1文字消えるだけなので、指が覚えていると事故になります。
小さいけれど効く追加
nightlyで存在を確かめたものを並べます。
:uptime:起動してからの時間を出します。実際に打つとUp 1 secondと返りました。長生きしているNeovimがどれか分かります:log:ログファイルを開きます。置き場所もstdpath('state')の下のlogsへ移りました:bcd:バッファごとのカレントディレクトリを決めます。getcwd()もバッファ番号を受け取れるようになります:packupdateと:packdel:vim.packの更新と削除をExコマンドから打てます。あわせてpacklockfileでロックファイルの置き場所を指定できます。導入側の話はvim.packの記事にありますwinpinned:名指しされないかぎり閉じないウィンドウを作れます。ウインドウを閉じる操作の巻き添えを避けられますvim.ui.img:端末が対応していれば画像を表示できます。:checkhealth vim.healthで対応を確かめます
上げる前に見ておく削除と移動
設定やスクリプトが黙って壊れる種類の変更もあります。nightlyで確かめた結果を書きます。
まずBufModifiedSetが無くなりました。このイベントで自動コマンドを作ろうとすると失敗します。代わりにOptionSetをパターンmodifiedで使います。ctxget()をはじめとする文脈スタックの関数一式も消えました。nvim -llという単体のLua実行モードも同じく削除されていて、-lに寄せられています。
置き場所の移動としては、ログがstdpath('log')からstdpath('state')の下のlogsへ移りました。手元で確かめると~/.local/state/nvim/logsが返ります。パスを直書きしている監視スクリプトがあると空振りします。
zipの扱いも変わりました。0.12.4で書庫を開くとzip.vim version v34から始まる3行の案内が上に出ますが、nightlyでは案内が消えて中身の一覧だけになります。新しいほうはdirの上に作られた読み取り専用のブラウザで、従来の挙動が要るなら:packadd old-zipで戻せます。どちらもmodifiableは0なので、書庫の中を直接書き換えられない点は変わりません。
nightlyを入れて最初に押したのが3Qで、返ってきたのがE354でした。マルチカーソルが目玉だと思って落としてきたので、正直がっかりしたのと同時に、ニュースの一覧を読んだだけで記事を書かなくてよかったとも思いました。repeat.txtを開いてtodoの1語を見たときにようやく腑に落ちました。もうひとつ効いたのがvalで、0.12.4では1文字消えるだけの操作がnightlyではバッファ全体を消すので、同じ端末で両方を行き来していると危ないと感じました。
まとめ
Neovim 0.13で先に知っておきたいのは、新しく増えるものより意味が変わるキーです。Qはマクロの再生からカーソルの追加へ、gQはExモードの入り口からカーソルの復元へ移り、Exモードには1q:で入ります。ZRは回数の有無で復元するかどうかが変わります。ただし目玉のマルチカーソルは、2026-08-28時点のnightly(dev-1430)では押してもE354が返るだけで動きません。ヘルプの該当節もtodoのままなので、標準機能で複数箇所を直す用途は当面これまでどおりのやり方が必要です。壊れる種類の変更としてはBufModifiedSetとctxget()の削除、ログの置き場所の移動、zipプラグインの入れ替えがあります。マイルストーンの期日は2026年10月1日です。