~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

Vim で画面分割しまくる

Posted on Fri May 23 12:52:31 +0900 2008 by nabeken

Window Manager で複数ウインドウが扱い易くなったとしても、ヤンクした結果などを同一インスタンスで共有するためには、Vim そのもので複数ウインドウを持つ必要があります。

:help windows
// 縦分割で読みたいなら
:vertical help windows

とすると、Vimのウインドウ操作に関するヘルプが読めます。このヘルプも (v)split によって、分割されたものです。(オンラインドキュメントは http://vimdoc.sourceforge.net/htmldoc/windows.html#windows にあります)

すでに、 tiling window manager を使っている人にとっては、普段の操作が Vim でもできることに気がつくと思います。

  • window の入れ替え
  • window のリサイズ
  • window 間でのフォーカスの移動

Vim はさらに強力で、縦、横を縦横無尽に操作可能。ただし、Vimそのもののウインドウサイズが変化してしまうと、Vim内のウインドウのサイズがめちゃくちゃになってしまう模様。均等なら、正しく復元されますが、リサイズしていると正しく復元されませんでした。このあたりは tiling window manager と相性が悪いでしょう。Vim内のウインドウのサイズをいじる場合、Vimそのもののウインドウは独立させておくか、floatingにしておくといいかもしれません。(もっとも、デュアルディスプレイならもっとスマートに解決できと思われます。)

コマンド一覧

ウインドウ操作のコマンドはすべて C-w が prefix になっています。(C-w は Ctrl を押しながら w を押すことです。)

ウインドウの生成、クローズは

  • ウインドウを閉じる (C-w q または C-q)
  • ウインドウを縦分割する (C-w v)
  • ウインドウを横分割する (C-w s)
  • 新規ウインドウを横分割で作る (C-w n または C-w C-n)
  • 新規ウインドウを縦分割で作る (:vnew)
    • キーバインドがないので、必要な人は自分で書かないとだめなようです

ウインドウの移動は

  • 左のウインドウへフォーカスを移動させる (C-w h もしくは C-h)
  • 右のウインドウへフォーカスを移動させる (C-w l もしくは C-l)
  • 上のウインドウへフォーカスを移動させる (C-w C-k)
  • 下のウインドウへフォーカスを移動させる (C-w C-j)

さらに

  • 前のウインドウへ戻る (C-w p もしくは C-w C-p)
  • 一番左上のウインドウへフォーカスを移動させる (C-w t もしくは C-w C-t)
  • 一番右下のウインドウへフォーカスを移動させる (C-w b もしくは C-w C-b)
  • カウントなし(数字を付けない)の場合、カレントウインドウの上、または左のウインドウへフォーカスを移動させる (C-w w もしくは C-w C-W)
    • つまり、時計回りへ周っていく
    • 半時計周りに周る (C-w W)
  • カウントありの場合、Nつ目のウインドウへフォーカスを移動させる (ex, C-w 2w 2つ目のウインドウへ移動する。ウインドウは左上から右下へ数える)

これで基本的な操作、移動は大丈夫でしょう。これらの移動は数値を組み合わせることで、Nつ目のウインドウに移動できます。

例:

  • カレントウインドウから2つ下のウインドウへフォーカスを移動させる (2 C-w j もしくは C-w 2j)
  • カレントウインドウから2つ上のウインドウへフォーカスを移動させる (2 C-w k もしくは C-w 2k)

ただし、2つ前という指定は無理みたいです。

次はウインドウそのものの操作です。

  • アクティブなウインドウを右へ移動させる (C-w L)
  • アクティブなウインドウを左へ移動させる (C-w H)
  • アクティブなウインドウを下へ移動させる (C-w J)
  • アクティブなウインドウを上へ移動させる (C-w K)

ウインドウがごちゃごちゃしてきた場合は

  • すべてのウインドウを閉じ、カレントウインドウのみ表示する (C-w C-o もしくは C-w o)

ウインドウを順々に移動させる(ただし、フォーカスのあるウインドウが行、または列の中にある場合のみ動く; つまり、1つしかない場合などは動かない)

  • ウインドウを右、または下方向へ1つづつずらす。 (C-w r または C-w C-r)
    • 最初のウインドウは2番目に、2番目は3番目に、3番目は1番目になる。
      • フォーカスは移動しない
  • ウインドウを左、または上方向へ1つづつずらす。 (C-w R または C-w C-R)
    • 最初のウインドウは3番目に、2番目は1番目に、3番目は2番目になる。
      • フォーカスは移動しない

tabpage を使った応用

Vim には tabpage という概念があります。:help tabpage でヘルプが読めます。tabpage は複数ウインドウでの編集をタブ単位で扱うことができるものです。つまり、あるタブのなかに複数ウインドウがあり、そのレイアウトも保持されるということのようです。したがって、タブを切り替えることで、今開いているウインドウのレイアウトごと切り替えることができます。

まず、タブの内容を表示させてみます。

:tabs

タブページ 1
> + vim-split-cheat-sheet
    windows.txt
    tabpage.txt

> が現在のウインドウ、+が更新されたウインドウを意味します。では、タブを生成してみます。

  • 新規タブを生成する (:tabnew)

タブ間の移動は

  • 1つ前のタブへ戻る (gT)
  • 1つ先のタブへ行く (gt)

これらは数値を与えることもできます。

  • 2つ前のタブへ戻る (2gT)
  • 2つ先のタブへ行く (2gt)

さらに

  • 1番目のタブへ行く (:tabfirst)
  • 最後のタブへ行く (:tablast)

タブの並び替えは

  • 今のタブをNページ目に移動する (:tabmove N)
    • ゼロにすると一番最初へ移動する
      • タブは切り替わらない (順番のみ入れ替わる)

ヘルプを読むかぎり、タブ間のウインドウの移動はできないようです。最後に、

  • カレントタブを閉じる (:tabclose)
  • カレントタブ以外をすべて閉じる (:tabonly)

更新履歴

  • ウインドウのクローズのキーを追加 (Fri, 23 May 2008 12:52:31 +0900)
  • cosmetic (Wed, 21 May 2008 23:11:22 +0900)
  • ウインドウそのものの操作で Shift のつもりで C- をつけていたのを修正 (thanks to kana1) (Wed, 21 May 2008 23:06:37 +0900)
  • 改行を除去 (Wed, 21 May 2008 19:57:13 +0900)
  • cosmetic (Wed, 21 May 2008 19:55:30 +0900)
  • vim-split-window: 初稿 (Wed, 21 May 2008 19:47:54 +0900)