Vim 9.2の新機能と、9.1から何が変わったか
Vim 9.2が2026年2月14日に公開されました。紹介記事を読むと「XDG対応」「標準のコメントアウト機能」「補完の自動化」と派手な項目が並びますが、実際に手元のVimで試すとすでに動くものがいくつもあります。Vimは9.1系のパッチとして新機能を積み上げ、区切りのいいところで9.2という番号を付ける進み方をするからです。この記事では9.1系の後期パッチと9.2を並べて実際に動かし、「本当に9.2で変わったもの」と「9.1のうちから使えていたもの」を分けて整理します。
検証環境:比較に使ったのはmacOS同梱のVim 9.1.1752と、Docker上のDebian sidに入るVim 9.2(patches 1-858)です。オプションの値・パッケージ一覧・実行結果はすべてこの2環境の実物です。GUI版とWayland環境は手元に無いため、それらに関わる項目は公式のリリースノート(:help version-9.2)の記述を根拠に書いており、実機では確認していません。
目次(8項目)
| 確認すること | コマンド |
|---|---|
| 今のバージョンとパッチ | vim --version | head -2 |
| 設定ファイルの置き場所 | :echo $MYVIMDIR |
| 同梱パッケージの一覧 | :echo globpath(&packpath, 'pack/dist/opt/*') |
| クリップボードの経路 | :echo v:clipmethod |
「9.2の新機能」の多くは9.1で動く
先に結論を書くと、9.1系の後期パッチを使っている人にとって9.2は「大きく変わるリリース」ではありません。手元のmacOS同梱Vimは9.1.1752という9.1系のかなり後ろのほうのパッチで、ここで9.2の目玉とされているものをいくつも確認できました。両方の素の状態(vim -u NONE -N)でオプションを読み取って並べたのがこれです。
| 項目 | 9.1.1752 | 9.2 |
|---|---|---|
'autocomplete'の有無 | あり | あり |
'history' | 200 | 200 |
'backspace' | indent,eol,start | indent,eol,start |
'showcmd' | 有効 | 有効 |
'ruler' | 無効 | 有効 |
'diffopt' | filler,closeoff,inline:simple | internal,filler,closeoff,indent-heuristic,inline:char |
'history'や'backspace'は、以前はdefaults.vimという「vimrcが無い人向けの初期設定」で面倒を見ていた項目です。それがVim本体の既定値に格上げされました。つまりset backspace=indent,eol,startのような行は、自分のvimrcから消しても同じ挙動になります。今の設定値を確認する方法を使って、消せる行が無いか一度見直す価値があります。
逆に、この表で本当に9.2の差になっているのは'ruler'と'diffopt'の2つだけでした。「9.2にしたら劇的に変わる」という期待で上げると拍子抜けします。9.1系の古いパッチから上げる場合は差が大きいので、まずはvim --versionの2行目に出るパッチ番号を確認するところから始めてください。
$ vim --version | head -2
VIM - Vi IMproved 9.2 (2026 Feb 14, compiled Jul 27 2026 10:11:18)
Included patches: 1-858
設定ファイルをXDGの場所に置ける
ホームディレクトリに~/.vimrcと~/.vim/が散らばるのが気になっていた人には、これがいちばん嬉しい変更かもしれません。設定ファイルを~/.config/vim/vimrcに置けるようになりました。$XDG_CONFIG_HOMEを設定していればそちらが優先されます。
~/.config/vim/vimrc " 新しい置き場所
~/.vimrc " 従来の置き場所(今も有効)
あわせて$MYVIMDIRという環境変数が追加され、実際に使われている個人用ランタイムディレクトリが入ります。Dockerの9.2で~/.config/vim/vimrcだけを置いて起動し、中身を書き出したのがこれです。
MYVIMDIR=[/tmp/h/.config/vim/]
MYVIMRC=[/tmp/h/.config/vim/vimrc]
ここで注意したいのが優先順位です。~/.vimrcが存在すると、そちらが優先されてXDG側は読まれません。同じ環境に両方を置いて起動し、どちらの変数がセットされたかで確かめました。
| 置いたファイル | 読み込まれたもの |
|---|---|
~/.config/vim/vimrcのみ | XDG側 |
| 両方 | ~/.vimrc(XDG側は読まれない) |
引っ越しの手順としては、まず~/.config/vim/vimrcへ内容を移し、動作を確認してから~/.vimrcを消す、という順番が安全です。逆にすると、消し忘れた~/.vimrcのせいで新しいほうが一生読まれない、という分かりにくい状態になります。:scriptnamesで実際に読み込まれたファイルを確認できるので、移行後は一度見ておくと確実です。
なお、この対応自体は9.1系の途中から段階的に入っていて、手元の9.1.1752でも~/.config/vim/vimrcが読み込まれることを確認しました。$MYVIMDIRまで含めて整理されたのが9.2、という捉え方が実態に近いです。
標準パッケージでプラグインが減る
Vimには「同梱されているが既定では読み込まれないプラグイン」の置き場所があり、:packaddで有効にできます。9.2ではここが充実しました。同梱されているものを実際に一覧したのがこれです。
cfilter comment dvorak editexisting editorconfig
helpcurwin helptoc hlyank justify matchit
netrw nohlsearch osc52 shellmenu swapmouse
termdebug
目を引くのがcommentです。コメントアウトのためにプラグインを入れていた人は多いはずですが、これで不要になります。実際に:packadd commentしてからgccを実行すると、行がコメントアウトされました。
packadd comment
line one line two
/* line one */ line two
gcはオペレータとして定義されているので、gcapで段落まとめて、といったオペレータとモーションの組み合わせがそのまま使えます。何が割り当てられたかを確認すると<Plug>(comment-toggle)が返りました。使う記号はファイルタイプごとの'commentstring'で決まります。
他にも実用的なものが揃っています。
| パッケージ | できること |
|---|---|
comment | gcでコメントの切り替え |
nohlsearch | 移動したら検索ハイライトを自動で消す |
hlyank | ヤンクした範囲を一瞬光らせる |
helptoc | ヘルプに目次を出す |
helpcurwin | ヘルプを分割せず今のウインドウで開く |
osc52 | 端末経由でクリップボードへコピー |
editorconfig | .editorconfigを読む |
nohlsearchは検索ハイライトを消す設定を自分で書いていた人には置き換えの候補になります。helpcurwinはヘルプの引き方の好みが分かれる部分を設定なしで変えられます。使いたいものをvimrcに並べておけば、それだけでプラグインマネージャを1つ減らせる構成になります。
packadd! comment
packadd! nohlsearch
packadd! hlyank
vimrcの中で読み込むときは!を付けたpackadd!を使います。この形なら起動処理の中で無理に前倒しされず、Vim本来のタイミングで読み込まれます。
SSH越しのコピーに標準の答えが出た
リモートサーバーのVimでヤンクしても手元のクリップボードには入らない、という問題があります。クリップボード連携の記事で書いたとおり、これまでVim側にはすっきりした答えがありませんでした。9.2ではosc52パッケージと、クリップボードの経路を選ぶ'clipmethod'オプションが入っています。
packadd osc52
OSC 52は端末のエスケープシーケンスでクリップボードを操作する仕組みで、対応した端末なら通信路がSSHでも手元のクリップボードへ届きます。Dockerの9.2で読み取った'clipmethod'の既定値と関連する機能はこうでした。
clipmethod=wayland,x11
has('clipboard')=0 has('clipboard_provider')=1
並べた順に試して、最初に成功した方法が使われます。osc52パッケージはここに「プロバイダ」として自分を差し込む作りになっていて、今どれが使われているかはv:clipmethodで確認できます。パッケージのヘルプは、Waylandやx11が使えるときはそちらを優先し、SSH経由のように使えないときOSC 52へ自動的に切り替わる、と説明しています。ただしmacOSとWindowsは'clipmethod'を使わない仕組みなので、この自動切り替えは起きません。
tmuxのような端末マルチプレクサを挟むと自動検出が働かないことがある、という注意書きもあります。この点はNeovimのOSC 52対応と同じ事情です。
補完まわりの強化
補完は9.2でまとめて手が入った領域です。中でも大きいのが自動補完で、'autocomplete'を有効にすると入力しながら候補のポップアップが出ます。プラグイン無しでVSCode風の補完に近づく、という点で注目されました。
set autocomplete
set autocompletedelay=200
ただしこのオプションは9.1系の後期パッチで既に入っていて、手元の9.1.1752でも存在を確認しました。同じ機能はNeovim 0.12にも取り込まれています。詳しい設定は標準の自動補完の記事にまとめてあるので、そちらを参照してください。
もうひとつ地味に効くのが、レジスタから補完できるようになったことです。挿入モードでCtrl-x Ctrl-rを押すと、レジスタに入っている単語が候補になります。名前付きレジスタに集めておいた文字列を、貼り付けではなく補完として呼び出せるので、長い識別子を何度も書く場面で手数が減ります。
候補の絞り込みも変わりました。'completeopt'に新しい値が増えています。
| 値 | 効果 |
|---|---|
fuzzy | あいまい一致で候補を絞る |
nosort | 候補を並べ替えない |
nearest | カーソルからの距離が近い順に並べる |
preinsert | 挿入される予定の文字列を強調する |
'complete'のほうにもフラグが追加され、oを入れると'omnifunc'の候補が、Fを入れると'completefunc'の候補が通常の補完に混ざるようになりました。標準の入力補完の枠組みのまま、拾ってくる範囲だけを広げられます。
diffの既定値が変わった
先ほどの比較表で唯一はっきり差が出たのが'diffopt'です。
9.1.1752: filler,closeoff,inline:simple
9.2: internal,filler,closeoff,indent-heuristic,inline:char
増えた3つにはそれぞれ意味があります。internalは外部のdiffコマンドではなくVim内蔵の差分エンジンを使う指定、indent-heuristicはインデントを手がかりに差分の区切りを人間の感覚に近づける指定、inline:charは行の中のどの文字が変わったかを文字単位で色分けする指定です。9.1では行の中の差分が大雑把(inline:simple)だったので、ファイル間の差分表示を使う人は見た目がはっきり変わったと感じるはずです。
さらにlinematchという値も選べるようになりました。似ている行どうしを揃えてから差分を取るので、行が挿入されたときにずれて表示される問題が軽くなります。既定には入っていないので、使うなら明示的に足します。
set diffopt+=linematch:60
数値は対象にする行数の上限で、大きくすると精度が上がるかわりに計算量が増えます。差分のマージをVim上で済ませることが多いなら、入れておく価値があります。
タブを縦に並べられる
これまでVimのタブは画面上部に横並びで表示するしかありませんでしたが、9.2では縦に並べる「タブパネル」が追加されました。ファイル名が長いとすぐ潰れてしまう横並びの弱点を避けられます。
set showtabpanel=2 " 2:常に表示 / 1:2つ以上のとき / 0:表示しない
set tabpanel=%f " 何を表示するかの書式
Dockerの9.2で設定して値が入ることを確認しました。機能として組み込まれているかはvim --versionの一覧に+tabpanelがあるかで判別できます。手元の9.1.1752にはこのオプション自体がありませんでした。横並びのタブバーとは別のオプションなので、両方を同時に出すこともできます。
最初は「9.2が出たから上げよう」と思って調べ始めたのですが、手元のVimで:echo &autocompleteが普通に通ってしまい、拍子抜けしました。macOS同梱のVimが9.1.1752という後ろのほうのパッチだったせいです。リリースノートを読むより先に自分の環境で叩いてみるほうが早い、というのはこういうときに実感します。実際に入れ替えて嬉しかったのはcommentパッケージで、コメントアウトのためだけに入れていたプラグインを1つ消せました。逆にosc52はmacOSでは'clipmethod'を使わない仕組みなので期待した自動切り替えが起きず、そこは手元では確認しきれていません。
まとめ
Vim 9.2の変更点は幅広いのですが、9.1系の後期パッチを使っている人にとっては地続きの更新です。素の既定値で実際に差が出たのは'ruler'と'diffopt'で、'autocomplete'やXDG対応、commentパッケージは9.1のうちから使えていました。まずvim --versionで自分のパッチ番号を見て、そのうえで:echo $MYVIMDIRと:packadd commentあたりを試すと、上げるべきかどうかの判断が早くつきます。純粋に9.2で増えたものを挙げるなら、osc52とhelpcurwinのパッケージ、縦タブの'tabpanel'、そしてWaylandまわりの対応です。