Vimの設定を一時的に全部初期値へ戻すコマンド :set all&
設定ファイルをあれこれいじっているうちに、どのオプションを変更したせいで挙動がおかしくなったのか分からなくなることがあります。init.vimやvimrcを開いて1つずつコメントアウトするより、一度すべて初期値に戻して切り分けたほうが早く済みます。
検証環境:macOS + Vim 9.1.1752 / Neovim 0.12.4。オプションが戻る・戻らないの検証結果と復旧コマンドの挙動は、この環境で実際に実行して確かめたものです。
目次(7項目)
全オプションを初期値に戻す
:set all&
:se all&と省略しても同じ結果になります。実行すると、ほとんどのオプションがVimの既定値に戻ります。設定ファイルの内容を書き換えるわけではなく、その場のセッションの状態だけが変わる点に注意してください。ファイルを保存し直せば、次回起動時にはまた設定ファイルの内容が反映されます。
実際に何が戻って、何が残るのか
「全部初期値に戻る」と説明されがちですが、戻るのはあくまでオプションだけです。手元のVim 9.1で、グローバル・バッファローカル・ウインドウローカルのオプションに加えて、キーマッピングとautocmdを設定した状態から:set all&を実行し、前後の値を比べました。
| 設定したもの | 実行前 | 実行後 |
|---|---|---|
ignorecase(グローバル) | on | off(戻った) |
tabstop(バッファローカル) | 2 | 8(戻った) |
number(ウインドウローカル) | on | off(戻った) |
filetype | python | 空になった |
syntax | python | 空になった |
| キーマッピング | あり | 残ったまま |
| autocmd | あり | 残ったまま |
切り分けに使ううえで重要なのは下の2行です。マッピングとautocmdは:set all&では消えません。プラグインが仕込んだキーマップやイベント処理はそのまま生き残るので、「設定を全部戻したのに症状が変わらない」ときは、オプション以外が原因の可能性を疑うことになります。マッピングを確認するなら:mapや:verbose mapのほうが早いです。
filetypeとsyntaxが消える
もう1つの落とし穴がfiletypeとsyntaxです。どちらもオプションなので初期値(空)に戻り、その結果シンタックスハイライトとファイルタイプ別の設定が効かなくなります。原因を切り分けている最中に画面が真っ白な文字色になると、それ自体が新しい混乱の種になります。戻すのは簡単で、次の1行でどちらも復活しました。
:filetype detect
手元では:filetype detectだけでfiletypeとsyntaxの両方がpythonに戻りました。ハイライト自体を有効化し直したいときは:syntax enableも併せて実行します。
戻らないオプションがある
次のオプションは:set all&を実行しても変更されません。Vimの公式ヘルプ(:help :set-default)では次のように定義されています。
Set all options to their default value. The values of these options are not changed: all terminal options, starting with t_ · 'columns' · 'cryptmethod' · 'encoding' · 'key' · 'lines' · 'term' · 'ttymouse' · 'ttytype'. Warning: This may have a lot of side effects.
t_で始まる端末オプション全部(t_Coなど)columns/lines(ウィンドウサイズ)encodingterm/ttymouse/ttytype(端末関連)cryptmethod/key(暗号化関連)
これらは実行環境やセキュリティに関わる値のため、意図しない初期化で問題が起きないよう保護されています。公式ヘルプも「副作用が多いので注意」とだけ警告していて、除外の個別理由までは書かれていません。
Neovimでは除外されるのが2つだけ
同じコマンドでも、Neovimでは保護されるオプションがぐっと少なくなります。Neovim 0.12のヘルプで:set all&の項を見ると、値が変わらないものとして挙がっているのは'columns'と'lines'の2つだけでした。
| 除外されるオプション | Vim | Neovim |
|---|---|---|
'columns' / 'lines' | 対象外 | 対象外 |
t_で始まる端末オプション | 対象外 | そもそも存在しない |
'encoding' | 対象外(保護されている) | 存在するがutf-8固定 |
'cryptmethod' / 'key' | 対象外 | そもそも存在しない |
Neovim 0.12.4で確かめたところ、cryptmethod・key・termはいずれも存在せず、encodingは存在するものの値はutf-8のままでした。Neovimは端末制御をVimとは別の仕組みで持っていて暗号化機能も持たないので、そもそも守るべきオプションが少ない、という事情です。除外リストの短さは機能の差の裏返しで、実害が出るのはウインドウサイズくらいだと考えて構いません。
特定のオプションだけ初期化したいとき
全部ではなく1つのオプションだけ戻したい場合は、オプション名を指定します。
:set number& " numberオプションだけ初期値に戻す
:set number&vim " Vimの初期値を明示して戻す
&と&vimはほとんどの場面で同じ結果になりますが、Vimのヘルプには「compatibleオプションの値によって結果が変わることがある」と明記されています。vi互換モードで運用していない限り、通常は気にする必要はありません。
:set all&で一度まっさらな状態にしてから、疑わしい設定だけを1行ずつ手動で再適用していくと原因を特定しやすくなります。
プラグインの設定とvimrcの手書き設定が競合して、カーソル移動がおかしくなったことがありました。原因を探すのにコメントアウトを繰り返すより、:set all&で一度リセットしてから1つずつ:setし直したほうが早く原因にたどり着けました。設定ファイルを疑うときの最初の一手として覚えておくと役に立ちます。
vimrc自体を読み込まずに起動する方法との違い
似たような目的でvim -u NONEやvim --cleanを使う方法もあります。こちらは設定ファイルを一切読み込まずに起動するコマンドで、プラグインが原因かどうかを切り分けるときによく使われますが、新しいバッファやウィンドウを開き直す必要があり、今開いている作業内容はそのままに設定だけ戻したい場合には向きません。
| したいこと | 使うもの |
|---|---|
| 今のセッションを保ったまま設定だけ初期化したい | :set all& |
| プラグインごと疑いたい | --clean付きで起動し直す |
手元の環境そのものを疑うくらい切り分けが難航しているなら、Dockerでまっさらな検証環境を作るところまで戻ったほうが早いこともあります。
まとめ
:set all&はプラグイン無しで使える標準コマンドで、設定周りのトラブルシューティングに向いています。ウィンドウサイズや端末関連など一部のオプションは対象外になる点だけ覚えておけば、切り分け作業がぐっと楽になります。