Vimでウインドウを閉じる4つの方法の違い
ウインドウを分割して作業していると、閉じ方には複数の選択肢があることに気づきます。:qで足りる場面もあれば、意図せずVim自体が終了してヒヤッとすることもあります。それぞれの違いを整理します。
目次(8項目)
| キー | これだけ覚える |
|---|---|
Ctrl-w q / :q | ウインドウを閉じる(最後の1枚だとVimごと終了) |
:q! | 未保存の変更があっても強制的に閉じる |
Ctrl-w c / :close | ウインドウだけ閉じる(最後の1枚では失敗しVimは終了しない) |
:hide | 未保存の変更があっても常に成功して隠す |
1. カレントウインドウを終了する(:quit)
Ctrl-w q
:quit
:q
最も一般的な閉じ方です。複数ウインドウが残っていればカーソルのあるウインドウだけが閉じられ、閉じたウインドウで表示していたバッファは消えるわけではなく、隠れバッファとして裏に残り続けます(バッファ・ウィンドウ・タブの関係)。最後の1枚での挙動、未保存の変更があるときの挙動は下の表で比較します。
2. カレントウインドウを強制終了する(:quit!)
:quit!
:q!
未保存の変更があっても強制的に閉じます。バッファ自体が消えるわけではなく、隠れバッファとして残ります。他の作業中のウインドウを巻き込まないよう慎重に使いたいコマンドです。
3. カレントウインドウを閉じる(:close)
Ctrl-w c
:close
:clo
最後のウインドウでは失敗して閉じられない点が:quitとの最大の違いです。未保存の変更に対する扱い自体は:quitと同じで、そのバッファを表示している最後のウインドウなら閉じようとして失敗します('hidden'がセットされていれば成功します)。ウインドウ分割だけを解消したい、Vim自体は終了させたくないという場面ではこちらを使います。
カレントタブページにウインドウが1つしかなく、他にタブページがある場合は、このコマンドを実行するとカレントタブページごと閉じる点も覚えておく必要があります。ウインドウの数だけでなく、タブの数も意識しておくと予期せぬ挙動に驚かずに済みます。
4. カレントウインドウを隠す(:hide)
:hide
:hid
他の3つと違い、未保存の変更があっても'hidden'の設定に関係なく必ず成功します。バッファへの変更は保存されず、失われることもないため「安全な」コマンドとされています。
| コマンド | 最後の1枚を閉じると | 未保存の変更('hidden'オフ時) |
|---|---|---|
:q | Vimごと終了 | 失敗する(E37) |
:q! | Vimごと終了 | 強制的に破棄して閉じる |
:close | 失敗する(E444、Vimは終了しない) | 失敗する(E37) |
:hide | 失敗する(E444、Vimは終了しない) | 常に隠して閉じる(失敗しない) |
:q、ウインドウ分割だけ解消したいなら:closeを使います。未保存の変更をとにかく安全に隠したいなら:hideを使います。Ctrl-w Ctrl-cが効かない理由
Ctrl-w cがあるならCtrl-w Ctrl-cでもいけそうに思えますが、Ctrl-c単体がコマンドキャンセルとして予約されているため、この組み合わせは機能しません。紛らわしいので覚えておくと安心です。
使い分けの指針
迷ったら次のように考えると分かりやすくなります。
- Vimごと終了してよい →
:q - ウインドウ分割だけ解消したい →
:close - 未保存の変更を破棄してでも閉じたい →
:q!
分割ウインドウを閉じるつもりで:qを連打していたら、最後の1枚でVimごと終了してヒヤッとしたことが何度かあります。それ以来、分割解消の目的なら常に:closeを使うようにしていて、意図しない終了はなくなりました。
まとめ
ウインドウを閉じる方法は4種類ありますが、実務で意識すべきは「最後の1枚を閉じたときにVimごと終了するか」の違いです。ウインドウ分割の解消が目的なら:closeを選ぶと事故が起きにくくなります。分割の作り方はこちら、今のウインドウ以外を全部閉じたい場合はこちらを参照してください。