この記事では、Vim / neovim でプラグインを使わずに「分割したウインドウを閉じる」ためのキーバインドとコマンドについて、ご紹介します。
[解答] 4種類
考え方は色々ありますが、大まかに分けると次の4種類になります。
- カレントウインドウを終了する
- カレントウインドウを強制終了する
- カレントウインドウを閉じる
- カレントウインドウを隠す
それぞれがキーバインドでもコマンドでも実現できます。
Vimウインドウの閉じ方1. カレントウインドウを終了する
(ノーマルモード) Ctrl-w q Ctrl-w Ctrl-q Ctrl-w Ctrl-Q :quit :q
おそらく最も汎用的で、いずれもよく利用していると思います。
5種類あり、キーバインドが3種類、コマンドが2種類です。
ウインドウを閉じるだけならキーバインドを使うでしょうし、そもそも vim 自体を終了するのにも利用しているはずです。
デフォルトでは、ウインドウがたくさんあればカーソルのあるウインドウを閉じて、開いていたバッファを隠すだけです。ファイル/バッファが消えてしまうわけではありません。
しかし、最後のウインドウを閉じると Vim / neovim が終了してしまうので、注意が必要です。
Vimウインドウの閉じ方2. カレントウインドウを強制終了する
(ノーマルモード) :quit! :q!
こちらはコマンドが2種類です。
通常は、バッファを保存していない状態などで Vim / neovim を終了する場合に利用しているかと思いますが、実はウインドウを閉じるのにも利用できます。
バッファの状態に関わらず、強制的に閉じることができます。といっても、こちらも隠しバッファに変わるだけで、切り替えればまたバッファを開けます。
ちょっと危ない部分もあるので、ウインドウを閉じるのだけに使うのは稀かもしれません。
Vimウインドウの閉じ方3. カレントウインドウを閉じる
(ノーマルモード) Ctrl-w c :close :clo
こちらは5種類で、キーバインドが1種類、コマンドが2種類です。
デフォルトでは、ウインドウがたくさんあればカーソルのあるウインドウを閉じて、開いていたバッファを隠すだけです。ファイル/バッファが消えてしまうわけではありません。
こちらは、最後のウインドウを閉じても Vim / neovim が終了しません。
略称も覚えやすいですし、通常はこちらでウインドウを閉じた方が無難かもしれません。
なお、Ctrl-w Ctrl-c でもいけそうなもんですが、Ctrl-c がコマンドキャンセルとして機能するのでうまくいきません。ここはちょっと紛らわしいですね。
Vimウインドウの閉じ方4. カレントウインドウを隠す
(ノーマルモード) :hide :hid
こちらはコマンドが2種類です。
ほぼほぼ :close に近い動きをします。オプションによって異なりますが、通常はあまり違いを意識して使うことはなさそうです。(私はそこまで使い分けていません)
解説
ウインドウ分割は、Vim / neovim を使う上で非常によく利用する機能の一つです。水平垂直それぞれで自由自在に分割できると、利便性の高い画面構成で作業をすることができます。
そのため、ウインドウを閉じる、終了するのも必須の機能と言えます。
方法の数は多いですが、英語の省略文字と同じだったりするので覚えやすいですね。
慌てず、この記事のように一つずつ覚えて徐々にバリエーションを増やしていきましょう。
このVimコマンドの補足情報
- 利用頻度
- 便利さ
- 覚え易さ
関連するVimヘルプ
Vim のヘルプでは下記のように解説されています。
ウィンドウを閉じる
——————:q[uit]
:{count}q[uit]
CTRL-W q CTRL-W_q
CTRL-W CTRL-Q CTRL-W_CTRL-Q
{count} なしの場合、カレントウィンドウを終了する。もし {count}
が与えられた場合、{count} ウィンドウを終了する。最後のウィンドウ(ヘルプウィンドウを除く)を終了すると Vim が終
了する。‘hidden’ オプションがセットされていて、かつカレントバッファを
表示しているウィンドウが 1つしかない場合は、そのバッファは隠れ
状態(hidden)となる。‘hidden’ オプションがセットされていなく
て、カレントバッファを表示しているウィンドウが1つしかなくて、
かつ、そのバッファが編集中の場合は、このコマンドは失敗する。(Note: CTRL-Q は全ての端末で動作するわけではない。)
もし [count] が最後のウィンドウ番号よりも大きいとき、最後の
ウィンドウが閉じられる:
:1quit ” 最初のウィンドウを終了する
:$quit ” 最後のウィンドウを終了する
:9quit ” 最後のウィンドウを終了する
” もし 9 個より少ないウィンドウが開かれていれば
:-quit ” 前のウィンドウを終了する
:+quit ” 次のウィンドウを終了する
:+2quit ” 2 個先のウィンドウを終了する
ヘルプウィンドウを閉じると、Vimは以前のウィンドウレイアウトを
復元しようとする。 :helpclose:q[uit]!
:{count}q[uit]!
{count} なしの場合、カレントウィンドウを終了する。もし {count}
が与えられた場合、{count} ウィンドウを終了する。このウィンドウがバッファを表示している最後のウィンドウの場合、
このバッファに対する変更は全て失われる。最後のウィンドウ(ヘル
プウィンドウを除く)を終了するとVim が終了する。たとえ ‘hidden’
オプションがセットされていたとしても、バッファ内容は失われる。:clo[se][!]
:{count}clo[se][!]
CTRL-W c CTRL-W_c:clo:close
{count} なしの場合、カレントウィンドウを閉じる。もし {count}
が与えられた場合、{count} ウィンドウを閉じる。‘hidden’ オプションがセットされている時、または、バッファが変
更されていて[!]を使用した時は、(バッファが他のウィンドウで編集
中でなければ)バッファは隠れ状態(hidden)になる。カレントタブページにウィンドウが1つしかなく、他にタブページが
あるとき、このコマンドを実行するとカレントタブページが閉じる。
tab-pageこのコマンドは以下の場合に失敗する: E444
– スクリーン上に1つのウィンドウしかない時
– ‘hidden’ がセットされていなくて、[!]を使用せず、バッファが変
更されていて、かつ、このバッファが他のウィンドウで表示されて
いない場合
バッファへの変更は保存されず、失われることもないため、このコマ
ンドは「安全な」コマンドである。CTRL-W CTRL-C CTRL-W_CTRL-C
CTRL-W CTRL-C はカレントウィンドウを閉じると期待するかもしれな
いが、CTRL-C はコマンドをキャンセルするために期待通りには動作
しない。:hide
:hid[e]
:{count}hid[e]
{count} なし: カレントウィンドウがスクリーン上の最後のウィンド
ウでなければ、カレントウィンドウを終了する。
もし {count} が与えられた場合、{count} ウィンドウを終了する。
(他のウィンドウがバッファを編集していなく、かつ ‘bufhidden’ の
値が “unload”, “delete”, “wipe” のいずれでもないならば)その
バッファは隠れ状態(hidden)となる。そのウィンドウがカレントタブ
ページで最後のウィンドウであるならばタブページも閉じる。
tab-page‘hidden’ の値はこのコマンドには無関係である。バッファへの変更
は保存されず、失われることもないため、このコマンドは「安全な」
コマンドである。:hid[e] {cmd} {cmd} を実行し、同時に ‘hidden’ をセットする。{cmd} が実行され
windows – Vim日本語ドキュメント
た後に ‘hidden’ の以前の値が復旧される。
例:
:hide edit Makefile これはカレントバッファに変更があっても、それを隠しバッファに
し、”Makefile” を編集する。
こちらは、Vim上では下記のコマンドでヘルプを確認できます。
:help CTRL-W_q :help CTRL-W_CTRL-Q :help :q :help :quit :help CTRL-W_c :help :clo :help :close :help :hide
ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。
Vim関連の参考書籍
こちらの書籍が参考になります。
Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。
こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。
Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。