Vim 9.2は2026年2月14日に公開されました。前版9.1(2024年1月2日)から2年1か月、その間に積み上がったパッチ9.1.0001〜9.1.2148に区切りを付けた版です。Vim9 scriptへの列挙型・ジェネリック関数・タプル型の追加、補完のファジーマッチ対応、diffモードのlinematch、LinuxのWayland UI対応、XDG Base Directory準拠が主な中身になります。注意が要るのは版番号での判定です。配布元によっては版番号が9.1のまま9.2の機能の大半を含みます。この記事では新機能の中身に加えて、リリース履歴と機能ごとの導入パッチ番号、環境別の確認・更新手順までをまとめます。
まとめ:Vim 9.2の要点と最新バージョンの確認手順
- Vim 9.2の公開日は2026年2月14日(ソースツリーの
src/version.hのVIM_VERSION_DATE_ONLY、および公式のVim 9.2 releasedで「February 14th, 2026」)。 - 2026年9月21日時点の最新パッチは9.2.1122。公式リポジトリのタグ、Windows向けvim-win32-installerの最新リリース(v9.2.1122・2026年9月20日)がこの番号です。
- 目玉はVim9 scriptの型機能3点(
:enum、ジェネリック関数、Tuple型)、補完のファジーマッチと自動補完、diffのlinematchとdiffanchors、Wayland UIとXDG Base Directory対応、縦型のtabpanel。 - バージョン確認は
vim --versionの1行目と:version。ただしv:versionは9.2なら902という整数を返すだけで、パッチ単位の判定には使えません。機能の有無はhas('patch-9.1.1232')の形で判定します。 - 配布チャネルごとに版がずれています。Ubuntu 26.04 LTSは9.1.2141、Ubuntu 24.04 LTSは9.1.0016、Debian trixieは9.1.1230、Homebrewは9.2.1100、wingetは9.2.1119(いずれも2026年9月21日時点の配布元公表値・上流バージョン部分)。
:help incompatible-9.2に挙がる非互換な変更はMS-Windowsのキーコード変換方式1項目だけです。ただし:help changed-9.2には既定値や挙動の変更が別途並んでいるため、そちらは個別に確認が必要です。
Vim 9.2で入った主な変更点
公式の変更一覧は:help version-9.2(runtime/doc/version9.txt)にあります。「9.1と9.2の間に行われた改善」として記載されている内容を、実務でどこに効くかという観点で5つに整理します。
Vim9 scriptに追加された3つの型機能
9.1でクラスとインターフェースが入り、9.2で型システムの穴が埋まりました。追加されたのは列挙型(:enum)、ジェネリック関数、そしてタプル型(Tuple)の3つです。合わせて、組み込み関数をオブジェクトのメソッドとして呼べるbuiltin-object-methods、保護された_new()メソッド、クラス内の全メソッドを一括コンパイルする:defcompile、変数の型としてobject<{type}>を書ける記法も入っています。
vim9script
enum Color
Red,
Green,
Blue
endenum
def Head<T>(items: list<T>): T
return items[0]
enddef
var pair: tuple<string, number> = ('vim', 92)
echo Head<Color>([Color.Red, Color.Green])
echo pair[1]
異なる型の値を1つにまとめるだけならlist<any>でもできます。タプルの違いは、位置ごとの型と要素数を型そのものに書ける点です。tuple<string, number>と宣言すれば1番目が文字列、2番目が数値であることをコンパイル時に検査でき、関数の戻り値として複数の値を返す用途で型を保てます。list2tuple()とtuple2list()で相互変換でき、v:t_tupleで型判定もできます。
実行速度については公式ドキュメント:help vim9に「An increase in execution speed of 10 to 100 times can be expected.」という記述がありますが、これは9.0でVim9 scriptが導入された時点からの設計目標で、9.2で測り直された数値ではありません。9.2が上積みしたのは速度ではなく型の表現力です。プラグイン開発でどこまで使えるかは、denops.vimとは|DenoでVim/Neovimプラグインを書く仕組みと始め方で扱うDeno側の実装と比べて判断するとよいでしょう。
補完の刷新とファジーマッチ
補完まわりは:help version-9.2の記載量がいちばん多い領域です。'completeopt'にfuzzyを足すと挿入モード補完があいまい一致になり、nosort(並べ替えない)、preinsert(挿入予定のテキストをハイライト)、nearest(カーソルからの距離順)も追加されました。レジスタの中身から補完するi_CTRL-X_CTRL-R、/や:gなど検索コンテキストでの補完、そしてins-autocompletionとしてキー入力なしに候補を出す自動補完が入っています。
" 挿入モード補完をあいまい一致にして、並べ替えを抑える
set completeopt=menu,menuone,fuzzy,nosort
" 補完ソースに関数を足す(F は completefunc、o は omnifunc)
set complete=.,w,b,u,F,o
" ソースごとに候補数を制限する記法(buffer から最大5件)
" 下は上の行に足すのではなく set complete 全体を置き換える別案
set complete=.,b^5
fuzzyを付けたときの候補収集は'complete'の指定ではなくkeyword,files,whole_line相当に切り替わります(かつて収集側を制御していた'completefuzzycollect'は9.2時点で廃止済みで、設定しても効きません)。従来はプラグイン側が自前で実装していたあいまい一致が、エディタ本体の機能で置き換わります。complete_info()がmatchesキーで実際にポップアップへ出ている候補一覧を返すようになった点も、補完プラグインを書く側には大きい変更です。
diffモードのlinematchとdiffanchors
diffモードには3つの改善が入りました。'diffopt'のlinematchは、変更された塊のなかで似ている行同士を並べ直してハイライトの精度を上げます。inlineサブオプションは行内の差分表示を制御し、9.2では既定値がinline:charになりました。'diffanchors'は、バッファ内の指定アドレスをアンカーとしてセクションごとに独立してdiffを取る設定で、'diffopt'にanchorが含まれているときだけ使われます。指定したアドレスが全バッファで解決できない場合、アンカーは無視されます。
'diffopt'の既定値も変わりました。9.1.0ではinternal,filler,closeoff、9.2ではinternal,filler,closeoff,indent-heuristic,inline:charです。vimrcでset diffopt=を明示していない環境では、9.2へ上げた時点でdiffの見え方が変わります。
Wayland UIとXDG Base Directory対応
Wayland UIとWaylandクリップボードのサポートが入り(:help wayland)、ビルド時の--with-waylandで有効になります。使用するseatを指定する'wlseat'、コンポジタへの接続タイムアウトを決める'wltimeoutlen'、接続しない起動オプション-Yが追加されました。クリップボードの取得方法を選び直す:clipresetと、現在の方式を示すv:clipmethodも併せて入っています。
XDG Base Directory Specificationへの対応では、環境変数$MYVIMDIRが個人用ランタイムディレクトリを指すようになりました。Linuxでは$HOME/.vimまたは$HOME/.config/vim、Windowsでは$HOME/vimfilesです。設定ファイルのパスをvimrcに直書きしている場合、この変数に置き換えると環境差を吸収できます。
" 個人用ランタイムディレクトリを指す環境変数(9.2 で追加)
echo $MYVIMDIR
" 設定ファイルの置き場所をハードコードしない書き方
execute 'source' fnameescape($MYVIMDIR .. '/myconfig.vim')
tabpanelとデフォルト値の変更
横並びの'tabline'を縦置きにしたtabpanelが追加され、タブが増えるとタイトルが切り詰められる横型の欠点を避けられます。表示内容は'tabpanel'に'statusline'と同じprintf形式で書き、配置と幅は'tabpanelopt'のalign・columns(既定20)で指定します。縦の区切り文字は'fillchars'のtpl_vertです。
見落としやすいのが既定値の変更です。9.1.0ではdefaults.vimが設定していた値が、9.2では組み込みの既定値へ移りました。'history'は50から200へ、'backspace'は空文字列からindent,eol,startへ、'showcmd'と'ruler'は既定でオンです。効く条件はnocompatibleであることで、defaults.vimを読み込まない起動(vim -u NONE -Nや独自vimrcだけを読む構成、CIやDockerコンテナ内の最小起動)でもこれらが適用されます。なお-Nを付けないvim -u NONEはcompatibleモードになり、'history'は0、'backspace'は空のままです。移行は9.1系のパッチとして段階的に入っているため、9.1.0と9.2の間のビルドでは既にこの既定値になっていることがあります。
Vim 9.0から9.2までのリリース履歴とパッチ番号
Vimは「メジャー版をまとめて出す」のではなく、日々のパッチを積み上げてある時点で版番号を上げる開発体制です。そのため9.2の新機能はすべて、9.1のパッチとして先に配布されています。
| バージョン | 公開日 | この版までに積んだパッチ |
|---|---|---|
| Vim 9.0 | 2022年6月28日 | 8.2系のパッチ |
| Vim 9.1 | 2024年1月2日 | 9.0.0001〜9.0.2190 |
| Vim 9.2 | 2026年2月14日 | 9.1.0001〜9.1.2148 |
| Vim 9.3(開発中) | 未定 | 9.2.0001〜9.2.1122(2026年9月21日時点) |
公開日はソースツリーのsrc/version.hにあるVIM_VERSION_DATE_ONLYの値です。9.3はすでに作業が始まっており、GTK 4 GUIの実験的サポートがパッチ9.2.0501以降で入っています。
9.2の目玉機能が、それぞれどのパッチで入ったかを一覧にします。runtime/doc/version9.txtのパッチ一覧から、機能を導入した最初のパッチを拾ったものです。
| 機能 | 導入パッチ |
|---|---|
| Wayland UI | 9.1.0064 |
| 列挙型(enum) | 9.1.0219 |
| 補完のファジーマッチ | 9.1.0463 |
| $MYVIMDIR(XDG対応) | 9.1.0718 |
| 対話型の :Tutor | 9.1.0836 |
| diffのlinematch | 9.1.1009 |
| タプル型(Tuple) | 9.1.1232 |
| tabpanel | 9.1.1391 |
| レジスタ補完(CTRL-X CTRL-R) | 9.1.1408 |
| diffanchors | 9.1.1557 |
| ジェネリック関数 | 9.1.1577 |
| 自動補完(ins-autocompletion) | 9.1.1590 |
| Unixドメインソケットのclientserver | 9.1.1651 |
対話型の:Tutorは、パッチ9.1.0836の説明文に「Port and include the interactive vimtutor plugin from Neovim」とあるとおり、Neovimのプラグインを移植したものです。
インストール済みVimのバージョン確認とパッチ単位の機能判定
:version と v:version・v:versionlong の読み方
シェルからはvim --version、Vimのなかからは:versionで確認します。1行目に版番号と公開日、3行目前後のIncluded patches:にパッチ範囲が出ます。
$ vim --version | head -3
VIM - Vi IMproved 9.1 (2024 Jan 02, compiled Jul 31 2026 22:25:55)
macOS version - x86_64
Included patches: 1-1752
スクリプトから判定するときはv:versionとv:versionlongがあります。v:versionはメジャー版の100倍にマイナー版を足した整数で、9.2なら902です。v:versionlongは末尾4桁にパッチ番号を含むため、9.1のパッチ1752なら9011752になります。
パッチ番号による判定とビルド機能による判定の使い分け
版番号だけで機能の有無を判定すると取りこぼします。9.2の新機能は9.1のパッチとして配布済みなので、版番号が9.1のビルドでも該当パッチを含んでいれば使えるからです。判定に使う書き方は2種類あり、役割が違います。
1つ目はhas('patch-9.1.1232')の形で、その機能を入れたパッチがソースに入っているかを見ます。:help feature-listには「The "patch-7.4.248" feature means that the Vim version is 7.5 or later, or it is version 7.4 and patch 248 was included.」とあり、より新しい版なら常に真を返す仕様が保証されています。2つ目はhas('tabpanel')やexists('+tabpanel')の形で、そのビルドに機能が組み込まれているかを見ます。tabpanelやvartabsのようにビルド時の機能セットで有無が決まるものは、パッチが入っていても無効な場合があります。
次のスクリプトをvim --clean -es -S chk.vimで実行すると、手元のビルドで両方の判定結果を書き出せます。
let s = []
call add(s, 'v:version=' . v:version)
call add(s, 'v:versionlong=' . v:versionlong)
call add(s, 'patch-9.1.1232 tuple=' . has('patch-9.1.1232'))
call add(s, 'patch-9.1.1391 tabpanel=' . has('patch-9.1.1391'))
call add(s, 'has(tabpanel)=' . has('tabpanel'))
call add(s, 'exists(+tabpanel)=' . exists('+tabpanel'))
call writefile(s, '/tmp/vimchk.txt')
qa!
macOSに同梱されているVim 9.1(Included patches: 1-1752、Normal version without GUI)で実行すると、次のような結果になります。
v:version=901
v:versionlong=9011752
patch-9.1.1232 tuple=1
patch-9.1.1391 tabpanel=1
has(tabpanel)=0
exists(+tabpanel)=0
版番号は901ですが、タプル型もtabpanelもパッチとしては入っています。一方でtabpanelはhas()で0を返します。src/feature.hでFEAT_TABPANELがFEAT_HUGEのときだけ定義されるため、Normalビルドでは機能自体が組み込まれていないからです。パッチ番号はソースに入った時期、機能名はビルドに入ったかどうかを示すという切り分けを押さえておけば、誤判定を避けられます。
vim9script
# 誤り: 9.1 系のパッチ入りビルドで機能を取りこぼす
if v:version >= 902
set completeopt+=fuzzy
endif
# 正しい: 言語機能はパッチ番号で判定する
if has('patch-9.1.0463')
set completeopt+=fuzzy
endif
# ビルドに依存する機能は機能名で判定する
if has('tabpanel')
set tabpanelopt=columns:24
endif
前掲のパッチ番号一覧は、そのままhas()に渡す値として使えます。なおv:versionlongによる大小比較は、セキュリティ修正などで古い版へパッチが取り込まれて番号が飛ぶ場合に正しく動きません。:help v:versionlong自身が「if there are gaps in the list of patches included this will not work well」と注意しており、has()を使うよう案内しています。
環境別のインストール・アップデート手順
UbuntuとDebianの標準リポジトリは9.1系のまま
2026年9月21日時点で各配布元が公表しているVimのバージョンは次のとおりです。ディストリビューション側はパッケージリビジョン(2:9.1.2141-1ubuntu4.9など)が付くため、ここでは上流のバージョン部分だけを並べています。
| 配布元 | バージョン | 備考 |
|---|---|---|
| Ubuntu 26.04 LTS(Resolute) | 9.1.2141 | 9.2相当の機能をほぼ含む |
| Ubuntu 24.04 LTS(Noble) | 9.1.0016 | 9.2の新機能はほぼ未収録 |
| Debian trixie | 9.1.1230 | 安定版 |
| Debian forky / sid | 9.2.0858 | 9.2系 |
| Homebrew(macOS) | 9.2.1100 | stable |
| winget(Windows) | 9.2.1119 | vim.vim |
| vim-win32-installer | 9.2.1122 | 2026年9月20日公開 |
注目してほしいのはUbuntu 26.04 LTSの9.1.2141です。9.2として区切られたのが9.1.2148ですから、7パッチ手前で凍結された状態にあたります。版番号は9.1ですが、列挙型もタプル型もジェネリック関数もWayland対応も入っています。「Ubuntuで9.2が入らない」と見えても、実際には機能の大半が使える状態にあるわけです。逆に24.04 LTSの9.1.0016は9.2の新機能をほぼ含まないため、こちらは本当に更新が必要です。
$ sudo apt update && sudo apt install --only-upgrade vim
$ vim --version | head -1
$ dpkg -s vim | grep ^Version
標準リポジトリより新しい版が必要な場合、Ubuntu向けに9.2系を継続配布している公式のPPAはありません。後述のソースビルドを使うことになります。
macOSとWindowsの配布元と更新コマンド
macOS同梱のVimは9.1系で+tabpanelや+guiを含まないビルドです。必要な機能がhas()で0を返す場合にHomebrew版へ入れ替えます。Windowsでgvimを含む一式が要るなら、wingetかvim-win32-installerの配布物です。wingetのマニフェストはパッチ単位で追加されるため、公開直後は最新パッチと数日ずれます。
$ brew install vim # または brew upgrade vim
$ brew info vim | head -3
C:\> winget install vim.vim
C:\> winget upgrade vim.vim
Wayland対応ビルドの構成と機能確認
Wayland対応やGUIの有無はビルド時に決まります。ディストリのパッケージがWaylandを有効にしていない場合、has('wayland')は0を返します。ソースからビルドする場合は、先にGTK3とWaylandの開発パッケージ(Debian系ならlibgtk-3-devとlibwayland-dev)とビルドツールを入れておきます。
$ git clone --depth 1 https://github.com/vim/vim.git
$ cd vim/src
$ ./configure --with-features=huge --enable-gui=gtk3 --with-wayland \
--enable-python3interp=dynamic
$ make && sudo make install
--with-features=hugeは落とさないでください。src/feature.hでFEAT_TABPANELとFEAT_VARTABSはFEAT_HUGEのときだけ定義されるため、normalビルドでは+tabpanelが入りません。+diffと+textpropはnormalでも有効なので、落ちるのはhuge限定の機能です。ビルド後はvim --versionの機能一覧で+waylandと+tabpanelが付いているかを確認してください。
9.2へ上げる前に確認すべき点と、急がなくてよい場面
Vim 9.2は互換性の点では穏やかな版です。:help incompatible-9.2に載っている非互換な変更は「Improved/Different MS-Windows mapping support」の1項目だけで、9.2に伴って廃止された機能や削除されたオプションの節は存在しません。ただし非互換の節に載らない挙動変更は:help changed-9.2に別途並んでいるため、既存のvimrcやプラグインが無修正で動くとまでは言えません。確認すべきものは次の2つに絞れます。
それでも上げる前に見ておくべきものが2つあります。1つ目は前述の既定値の移動です。'history'や'backspace'、'showcmd'、'ruler'、そして'diffopt'の既定が変わっているため、defaults.vimを読まない最小構成で意図せず挙動が変わることがあります。CIやDockerイメージでVimを使っている場合は、vimrcで明示的に値を設定しておくと版差の影響を受けません。2つ目はMS-Windowsの実行ファイル検索です。9.2以降、外部コマンドの実行時にカレントディレクトリを検索しなくなりました。:help executable()によれば$NoDefaultCurrentDirectoryInExePathはカレントディレクトリ検索を無効にするための変数で、しかもVimが外部コマンドを実行する際にセキュリティ上の理由から常に設定します。つまりこの変数で従来動作へ戻すことはできず、バッチやMakefileの側で相対パスか絶対パスを前置する必要があります。
更新を急がなくてよい場面もはっきりしています。Ubuntu 26.04 LTSのように9.1.2141が入っている環境で、版番号を9.2に揃えるためだけにソースビルドへ移ると、ディストリのセキュリティ更新から外れる代償のほうが大きくなります。has()で必要な機能が真を返すならパッケージ版のまま使うのが合理的です。逆に、Ubuntu 24.04 LTSの9.1.0016やDebian bookwormの9.0.1378のように9.2の新機能をほぼ含まない環境で、Vim9 scriptの型機能やファジーマッチ補完を前提としたプラグインを使いたい場合は、更新する実益があります。
なお、新機能を追うことが目的で、内蔵LSPやLua設定を前提としたプラグイン資産を使いたいのであれば、Vimの版を上げるよりNeovimを検討したほうが近道です。判断材料はNeovim 0.12系への移行手順:vim.packと内蔵LSP・自動補完の実装にまとめています。Vim本体の基本操作から確認したい場合はVimとは|テキストエディタの使い方・基本コマンドと他エディタとの違いを参照してください。
よくある質問
Vimの最新バージョンはいくつですか?
区切りの付いた版はVim 9.2(2026年2月14日公開)です。日々のパッチは9.3に向けて進んでおり、2026年9月21日時点の最新パッチは9.2.1122です。最新のパッチ番号は公式リポジトリのタグ一覧で確認できます。
Ubuntuで Vim 9.2 を使うにはどうすればよいですか?
Ubuntu 26.04 LTSの標準リポジトリは9.1.2141で、版番号は9.1ですが9.2の機能の大半を含みます。必要な機能の導入パッチをhas('patch-9.1.1232')の形で判定し、真ならそのまま使えます。9.1.0016のUbuntu 24.04 LTSでは9.2の新機能がほぼ入っていないため、ソースビルドか24.04以降へのアップグレードが必要です。版の対応は前掲の比較表を参照してください。
gvim 9.2はどこで入手できますか?
Windows向けのGUI版(gvim)は、公式のvim-win32-installerが配布しているインストーラか、wingetのvim.vimパッケージで入ります。LinuxでGTKのGUIが必要な場合は、ビルド時に--enable-gui=gtk3を指定します。
Vim 9.2で設定ファイルの置き場所は変わりますか?
Unix系では$XDG_CONFIG_HOME/vim/vimrcが設定ファイルとして読まれるようになりました。ただし:help xdg-vimrcによれば、これが読まれるのは$HOMEや$HOME/.vimに初期化ファイルが1つも見つからない場合だけです。既存の~/.vimrcがある環境では従来どおりそちらが優先されるため、XDG側へ移すには~/.vimrcと~/.vim/vimrcを退避する必要があります。XDG側のvimrcが使われると'runtimepath'と'packpath'も$XDG_CONFIG_HOME/vim基準に組み替わります。ランタイムディレクトリの実体は$MYVIMDIRで参照できます。
Vim 9.2とNeovimのどちらを選ぶべきですか?
設定言語がVim9 scriptで完結し、SSH越しの軽量な編集環境を標準的なパッケージで確保したいならVim 9.2です。内蔵LSPやTreesitter、Luaで書かれたプラグイン資産を前提にするならNeovimが向いています。9.2でVim9 scriptに型機能が揃ったため、プラグインを自作する場合の選択肢としてVim側の条件は改善しました。移行手順の具体はNeovim 0.12系への移行手順:vim.packと内蔵LSP・自動補完の実装で扱っています。