Vimでウインドウ間をカーソル移動する方法(Ctrl-w)
ウインドウを分割しても、間をマウスでクリックして移動していては速度が出ません。Ctrl-w系のキーバインドを覚えておけば、キーボードから手を離さずにウインドウ間を移動できます。
| キー | これだけ覚える |
|---|---|
| Ctrl-w + hjkl | 方向でウインドウ移動 |
| Ctrl-w w / Ctrl-w W | 次/前のウインドウへ順に移動 |
| Ctrl-w t / Ctrl-w b | 一番上/一番下へ直接移動 |
| Ctrl-w p | 直前にいたウインドウへ戻る |
方向で移動する
Ctrl-w h " 左のウインドウへ
Ctrl-w j " 下のウインドウへ
Ctrl-w k " 上のウインドウへ
Ctrl-w l " 右のウインドウへ
┌───┬───┐
│A │ B │
├───┼───┤
│ C │ D │
└───┴───┘
┌───┬───┐
│ A │B │
├───┼───┤
│ C │ D │
└───┴───┘
hjklはノーマルモードのカーソル移動と同じ方向感覚なので、覚えやすくなります。矢印キー版(Ctrl-w <Down>等)やCtrlを押しっぱなしにする版(Ctrl-w Ctrl-j等)も同じ動作をします。数字を前置すれば、その数だけ先のウインドウへ移動できます。
次/前のウインドウへ順に移動する
Ctrl-w w " 次のウインドウへ(右or下、なければ左上へ)
Ctrl-w W " 前のウインドウへ(左or上、なければ右下へ)
ウインドウが縦横に複雑に並んでいる場合、この移動は「Z」の文字をなぞるような順序で巡回します。方向を意識せず、とにかく次/前へ回したいときに使います。カウントを指定すれば、左上から数えてN番目のウインドウへ直接移動することもできます。
3Ctrl-w w " 3番目のウインドウへ移動
特定のウインドウへ直接移動する
Ctrl-w t " 一番左上のウインドウへ(Topの頭文字)
Ctrl-w b " 一番右下のウインドウへ(Bottomの頭文字)
Ctrl-w p " 直前にいたウインドウへ(Previousの頭文字)
特にCtrl-w pは、2つのウインドウを行き来しながら作業しているときに重宝します。方向を考えずに「さっきいた場所」へ一発で戻れます。
コマンドでも移動できる
:wincmd j
:winc k
Ctrl-wの代わりに:wincmd(短縮形:winc)を使う書き方です。ノーマルモードが使えない自動コマンドの中などで移動処理を書きたいときに使います。カウントにウインドウ番号を渡して直接移動することもできます。
:exe nr . "wincmd w" " nr番のウインドウへ移動
まずはこれだけ覚えればよい
種類は多いが、実務ではCtrl-w + hjklとCtrl-w pの2系統を押さえておけば大半の場面をカバーできます。異なるバッファのウインドウへ移動するとビジュアルモードは解除される点も覚えておくと安心です。同じバッファを複数ウインドウで表示している場合は、選択範囲が保たれたまま移動先のウインドウでも同じ選択状態が引き継がれます。
3分割・4分割で作業することが多く、最初はCtrl-w wで順番に巡回していましたが、方向を覚えてからはCtrl-w hjklで一発移動できるようになり体感速度が変わりました。Ctrl-w pは、ファイルとターミナルバッファを行き来するときに特に重宝しています。
まとめ
ウインドウ間の移動はCtrl-w + hjklが基本です。巡回移動にはCtrl-w w、直前の場所へ戻るにはCtrl-w pを組み合わせれば、複雑な分割でも迷わず移動できます。ウインドウの作り方はこちら、位置を入れ替えたい場合はこちらにまとめています。