Vim完全バイブル 第5章 複数ウィンドウの扱い

「Vim完全バイブル」のメモの続きです。
今回はウィンドウを分割して複数ファイルを同時に表示したり、バッファを切り替えたりするためのコマンドをまとめます。

「第5章 複数ウィンドウの扱い」の内容は以下の通りです。

  • ウィンドウの分割
  • 分割ウィンドウのサイズの変更
  • バッファ
  • バッファ一覧の表示
  • 編集バッファの切り替え

ウィンドウの分割

以下のコマンドを使うと、Vimのウィンドウを分割して複数のファイルを同時に表示することができる。

ウィンドウ分割関連のコマンド

:new [{file}]ウィンドウを横方向(上下)に分割し、新しくできたウィンドウで新ファイルの編集を開始する(new)
:vne [{file}]ウィンドウを縦方向(左右)に分割し、新しくできたウィンドウで新ファイルの編集を開始する(vnew)
:sp [+{command}] [{file}]ウィンドウを横方向(上下)に分割し、新しくできたウィンドウで{file}を開き、直後に{command}を実行する(split)
:vs [+{command}] [{file}]ウィンドウを縦方向(左右)に分割し、新しくできたウィンドウで{file}を開き、直後に{command}を実行する(vsplit)
CTRL-W wカーソルを次のウィンドウに移動する
CTRL-W hカーソルを左のウィンドウに移動する
CTRL-W jカーソルを下のウィンドウに移動する
CTRL-W kカーソルを上のウィンドウに移動する
CTRL-W lカーソルを右のウィンドウに移動する

各分割ウィンドウは:[w]q[!]、ZZなどのコマンドで閉じることができる。
一度に全てのウィンドウを閉じてVimを終了するには:[w]qa[!]を実行すればよい(all)。

:wqa

各コマンドにはここでは紹介していない引数もあるので、興味がある方はhelpを参照して下さい。

:h :sp

例。既にone.txtを開いていて、まだウィンドウ分割は行っていない状態とする。

ウィンドウを上下に分割する。{file}を指定しないので、新しくできたウィンドウもone.txtを開いた状態になる。

:sp

ウィンドウを左右に分割し、片方のウィンドウでtwo.txtを開く。

:vs two.txt

ウィンドウを上下に分割し、片方のウィンドウでhello.cを開き、最初のprintfにカーソルを移動する。

:sp +/printf hello.c

分割ウィンドウのサイズの変更

ウィンドウを分割するコマンド(:new、:vne、:sp、:vs)を実行するときに、以下のように数字を指定することによって、新しく分割されるウィンドウの行数を調節することができる。

例。ウィンドウを分割してhoge.txtを開く。ウィンドウのサイズは5行。

:5sp hoge.txt

既に開いているウィンドウのサイズを変更するには以下のコマンドを使う。

ウィンドウサイズ変更コマンド

[{N}]CTRL-W +カーソル位置のウィンドウを{N}行だけ大きくする
[{N}]CTRL-W -カーソル位置のウィンドウを{N}行だけ小さくする
[{N}]CTRL-W _カーソル位置のウィンドウの大きさを{N}行にする({N}を省略するとウィンドウを最大サイズにする)
CTRL-W =全てのウィンドウの大きさを揃える

バッファ

Vimでファイルを編集するとき、実際はファイルの内容をメモリに読み込んでそれを編集することになる。このメモリ上のデータをバッファと言う。バッファにはマークなどの情報も含まれている。

バッファには以下の3つの状態がある。

バッファの状態一覧

active画面に表示中のバッファ
hidden非表示だが加えた変更やマークなどの情報は残っているバッファ
inactive非表示で未編集or保存済みだがマークなどの情報は残っているバッファ

バッファの状態はだいたい以下のような流れで切り替わっていく。

  • :eや:spなどのコマンドでファイルを開くとバッファが作成されactiveになる
  • :bコマンド(後述)などでバッファを選択・表示すると、表示されたバッファがactiveになり、代わりに閉じたバッファはinactiveになる(元々開いていたバッファに加えた変更は保持されない)
  • :qコマンドなどでバッファを閉じるとinactiveになる(バッファに加えた変更は保持されない)
  • :hidコマンド(後述)でバッファを非表示にするとhiddenになる(バッファに加えた変更は保持される)
  • Vimを終了すると全てのバッファは削除される

バッファ一覧の表示

以下のコマンドでバッファの一覧を表示する。

:buffers

出力例はこちら。

:buffers
  1 %a + "foo.txt"                     line 4
  2 #h   "bar.txt"                     line 0
  3      "hoge.txt"                    line 1
  4  a + "fuga.pl"                     line 0
Press ENTER or type command to continue

各行は左から順にバッファ番号、バッファの状態を表すフラグ、ファイル名、カーソルがある行を表している。フラグ一覧は以下の通り。

:buffersコマンドのフラグ一覧(Vim 7.x)

%現在カーソルがあるバッファ
#前回カーソルがあったバッファ
a表示中のバッファ(active buffer)
h非表示中のバッファ(hidden buffer)
+変更を加えたバッファ

Vim完全バイブルにはVim 6.xの:buffersの説明が書いてあり、Vim 7.xの:buffersのフラグとは若干異なる部分があるので、自分が使っているVimの:buffersの動作を知りたい方はヘルプを参照して下さい。

:h :buffers

編集バッファの切り替え

編集バッファを切り替えるコマンドは以下の通り。:hid以外のコマンドは基本的に切り替え元のバッファをinactiveにする。

バッファ切り替えコマンド








:hidカーソル位置のウィンドウを閉じてバッファをhidden状態にする(hide)
:b [{N}]バッファ番号が{N}のバッファを開く(buffer)
:sb [{N}]ウィンドウを横方向(上下)に分割し、新しいウィンドウでバッファ番号が{N}のバッファを開く(sbuffer)
:bn次のバッファを開く(bnext)
:sbnウィンドウを横方向(上下)に分割し、新しいウィンドウで次のバッファを開く(sbnext)
:bN前のバッファを開く(bNext)
:bp前のバッファを開く(bprevious)
:sbNウィンドウを横方向(上下)に分割し、新しいウィンドウで前のバッファを開く(sbNext)
:sbpウィンドウを横方向(上下)に分割し、新しいウィンドウで前のバッファを開く(sbprevious)
:br最初のバッファを開く(brewind)
:bl最後のバッファを開く(blast)

なお、'hidden'オプション(省略形はhid)をオンにすると、:bnなどでバッファを切り替える時に、切り替え元のバッファをinactiveではなくhiddenの状態にするようになる。

:se hid

これにより、切り替え元のバッファが変更済み&未保存の状態でも:bnや:qを実行できるようになる。

今回はここまで

次回は視覚的に範囲選択を行うためのビジュアルモードについてです。