vim-jp / vimdoc-ja / usr_08

usr_08 - Vimドキュメント

メインヘルプファイルに戻る
usr_08.txt    For Vim バージョン 8.2.  Last change: 2021 May 20

                     VIM USER MANUAL - by Bram Moolenaar

                               ウィンドウの分割


関係のない2つの違ったファイルを表示したい。1つのファイルの2個所を同時に
見たい。2つのファイルを横に並べて差分を見てみたい。
ウィンドウ分割を使えばどれもできてしまいます。

08.1  ウィンドウの分割
08.2  ウィンドウを分割してファイルを開く
08.3  ウィンドウのサイズ
08.4  縦分割
08.5  ウィンドウの移動
08.6  全ウィンドウを対象とするコマンド
08.7  vimdiff で差分を表示する
08.8  その他
08.9  タブページ

次章: usr_09.txt  GUI を使う
前章: usr_07.txt  複数のファイルを開く
目次: usr_toc.txt

==============================================================================
08.1  ウィンドウの分割

新しいウィンドウを開く一番簡単なコマンドはこれです。

        :split

画面が上下2つのウィンドウに分割されます。カーソルは上側のウィンドウに置かれま
す。

        +----------------------------------+
        |/* file one.c */                  |
        |~                                 |
        |~                                 |
        |one.c=============================|
        |/* file one.c */                  |
        |~                                 |
        |one.c=============================|
        |                                  |
        +----------------------------------+

2つのウィンドウに同じファイルが表示されています。"====" のラインはステータス
行です。各ウィンドウの一番下にあってそのウィンドウの情報を表示します。(実際に
はステータス行は反転表示になります)
各ウィンドウには同じファイルの違う場所を表示できます。例えば、上側のウィンド
ウにはプログラムの変数宣言部を表示し、下の方にはその変数を使っている箇所を
表示させる、といったことができます。

CTRL-W w コマンドでウィンドウ間をジャンプできます。上側のウィンドウにカーソル
がある時に CTRL-W w を押すとその下のウィンドウにジャンプします。一番下のウィン
ドウにカーソルがある時は一番上のウィンドウに戻ります。(CTRL-W CTRL-W も同じ動
作をするので、CTRL キーを離すのがちょっと遅れても大丈夫です)


ウィンドウを閉じる
------------------

ウィンドウを閉じるのは次のコマンドです。

        :close

":quit" や "ZZ" のようなファイルを閉じるコマンドでもウィンドウを閉じることがで
きますが、":close" を使えば、最後のウィンドウを閉じて Vim を終了してしまうよう
な間違いを防げます。


他ウィンドウを全部閉じる
------------------------

ウィンドウをたくさん開いたときに、どれか1つのウィンドウに集中したいと思った場
合は、次のコマンドが便利です。

        :only

カーソルのあるウィンドウを残して全てのウィンドウが閉じます。他のウィンドウに保
存されていない変更がある場合には、エラーメッセージが表示され、そのウィンドウは
閉じません。

==============================================================================
08.2  ウィンドウを分割してファイルを開く

次のコマンドを実行すると、2つ目のウィンドウが開き、指定されたファイルの編集が
開始されます。

        :split two.c

例えば、one.c を編集していたなら、結果は次のようになります。

        +----------------------------------+
        |/* file two.c */                  |
        |~                                 |
        |~                                 |
        |two.c=============================|
        |/* file one.c */                  |
        |~                                 |
        |one.c=============================|
        |                                  |
        +----------------------------------+

新しいウィンドウに新規ファイルを開くには、次のコマンドを使います。

        :new

":split" や ":new" コマンドを使って好きなだけウィンドウを作成できます。

==============================================================================
08.3  ウィンドウのサイズ

":split" コマンドは数値を引数として取れます。その値は新しいウィンドウの高さと
なります。例えば、次のコマンドは3行分の高さのウィンドウを作成し、alpha.c を開
きます。

        :3split alpha.c

ウィンドウのサイズを変更する方法はいくつかあります。マウスが使えれば話は簡単で
す。ウィンドウを分割しているステータス行にマウスを動かし、上下にドラッグしてく
ださい。

ウィンドウを大きくするには次のようにします:

        CTRL-W +

小さくするには次のようにします:

        CTRL-W -

どちらのコマンドも数値を引数として取り、その行数分、ウィンドウサイズを増減しま
す。つまり、"4 CTRL-W +" ならウィンドウが4行分大きくなります。

ウィンドウの高さを明示的に指定するには次のコマンドを使います:

        {height}CTRL-W _

{height} に数値を指定し、CTRL-W と _ (アンダースコア) を入力します。
ウィンドウを最大まで大きくするには、CTRL-W _ コマンドを数値指定なしで実行して
ください。


マウスを使う

Vim では様々なことをキーボードから極めて素早く操作できますが、残念ながら、ウィ
ンドウサイズを変更するのは少し面倒です。この場合、マウスを使う方が簡単です。マ
ウスポインタをステータス行に合せてから左ボタンを押してドラッグしてください。ス
テータス行が動き、片方のウィンドウが大きくなり、もう片方は小さくなります。


オプション

'winheight' オプションにはウィンドウの最小の高さ (それ以上は小さくならない) の
希望値を、'winminheight' には最小の高さの強制値を設定できます。
同様に、'winwidth' オプションにはウィンドウの最小の幅の希望値を、'winminwidth'
には最小の幅の強制値を設定できます。
'equalalways' オプションが設定されていると、ウィンドウを閉じたり開いたりするた
びに、全てのウィンドウのサイズが同じになります。

==============================================================================
08.4  縦分割

":split" コマンドは現在のウィンドウの上側に新しいウィンドウを作ります。ウィン
ドウを左側に作るには、次のコマンドを使います:

        :vsplit

あるいは、
        :vsplit two.c

実行後は次のようになります。

        +--------------------------------------+
        |/* file two.c */   |/* file one.c */  |
        |~                  |~                 |
        |~                  |~                 |
        |~                  |~                 |
        |two.c===============one.c=============|
        |                                      |
        +--------------------------------------+

中央の縦棒 (|) は実際には反転表示されます。これは縦セパレータと呼ばれ、これに
よって左右のウィンドウが区切られます。

ウィンドウを縦分割して新しい空ファイルを作成する ":vnew" コマンドもあります。
次のコマンドでも同じことができます:

        :vertical new

":vertical" コマンドは、ウィンドウを分割する他のコマンドにも適用できます。これ
を指定すると、ウィンドウは横ではなく、縦に分割されるようになります。(ウィンド
ウを分割しないコマンドの場合は何も変わりません)


他のウィンドウへの移動

横でも縦でも好きなようにウィンドウを分割できるので、自在にウィンドウを配置でき
ます。他のウィンドウへ移動するには次のコマンドを使います。

        CTRL-W h        左側のウィンドウに移動
        CTRL-W j        下側のウィンドウに移動
        CTRL-W k        上側のウィンドウに移動
        CTRL-W l        右側のウィンドウに移動

        CTRL-W t        一番上のウィンドウに移動
        CTRL-W b        一番下のウィンドウに移動

カーソル移動と同じ文字を使っていることに注目してください。もちろん、矢印キーも
使うことができます。
他のウィンドウへ移動するためのコマンドは他にもあります: Q_wi

==============================================================================
08.5 ウィンドウの移動

ウィンドウを分割したが、配置が好ましくなかった場合、ウィンドウをどこか別の場所
に動かしたいと思うしょう。例えば、次のように三つのウィンドウがあるとします:

        +----------------------------------+
        |/* file two.c */                  |
        |~                                 |
        |~                                 |
        |two.c=============================|
        |/* file three.c */                |
        |~                                 |
        |~                                 |
        |three.c===========================|
        |/* file one.c */                  |
        |~                                 |
        |one.c=============================|
        |                                  |
        +----------------------------------+

明らかに一番下のウィンドウが一番上にくるべきです。一番下のウィンドウに移動して
(CTRL-W w を使用)、次のコマンドを入力してください:

        CTRL-W K

ここでは大文字の K を使います。これを実行すると、ウィンドウが一番上に移動しま
す。上への移動に K が使われていることに注目してください。
縦分割しているときに CTRL-W K を使うと、ウィンドウが一番上に移動し、Vim ウィン
ドウと同じ幅になります。例えば、次のようなレイアウトになっているとします。

        +-------------------------------------------+
        |/* two.c */  |/* three.c */  |/* one.c */  |
        |~            |~              |~            |
        |~            |~              |~            |
        |~            |~              |~            |
        |~            |~              |~            |
        |~            |~              |~            |
        |two.c=========three.c=========one.c========|
        |                                           |
        +-------------------------------------------+

中央のウィンドウ (three.c) で CTRL-W K を実行すると、次のような結果になります:

        +-------------------------------------------+
        |/* three.c */                              |
        |~                                          |
        |~                                          |
        |three.c====================================|
        |/* two.c */           |/* one.c */         |
        |~                     |~                   |
        |two.c==================one.c===============|
        |                                           |
        +-------------------------------------------+

他に同じようなコマンドが3つあります。(説明する必要はありませんね)

        CTRL-W H        ウィンドウを左端に移動
        CTRL-W J        ウィンドウを下端に移動
        CTRL-W L        ウィンドウを右端に移動

==============================================================================
08.6  全ウィンドウを対象とするコマンド

Vim を終了しようと思ったときに、複数のウィンドウが開いていた場合、ウィンドウを
一つずつ閉じていけば Vim を終了できますが、次のコマンドを使えばもっと速く終了
できます。:

        :qall

これは "quit all" (すべて閉じる) という意味です。まだ保存していないファイルが
ある場合は、Vim は終了しません。保存していないファイルを表示しているウィンドウ
にカーソルが自動的に移動するので、":write" で保存するか ":quit!" で変更を破棄
するかしてください。

未保存のファイルを全て保存するには、次のコマンドを使ってください:

        :wall

これは "write all" (すべて保存) という意味です。とはいっても、実際に保存される
のは変更のあったファイルだけです。変更していないファイルを上書きしても意味がな
いことを Vim はわかってますから。
":qall" と ":wall" を組み合わせた "write and quit all" (すべて保存して終了) コ
マンドもあります:

        :wqall

このコマンドは、変更されたファイルをすべて保存して Vim を終了します。
最後に、次のコマンドは、すべての変更を破棄して Vim を終了するコマンドです:

        :qall!

このコマンドはアンドゥできないので、使う時には慎重に!


引数で指定したすべてのファイルをウィンドウで開く

それぞれのファイルごとにウィンドウを開くには、起動パラメーターに "-o" を指定
します。

        vim -o one.txt two.txt three.txt

結果はこうなります。

        +-------------------------------+
        |file one.txt                   |
        |~                              |
        |one.txt========================|
        |file two.txt                   |
        |~                              |
        |two.txt========================|
        |file three.txt                 |
        |~                              |
        |three.txt======================|
        |                               |
        +-------------------------------+

起動パラメーター "-O" を使えば、ウィンドウが縦分割になります。
Vim が既に起動している場合、":all" コマンドを使うと引数リストの各ファイルごと
にウィンドウを開くことができます。":vertical all" だと縦分割になります。

==============================================================================
08.7  vimdiff で差分を表示する

特別な方法で Vim を起動すると、二つのファイルの差分を表示することができます。
例えば、"main.c" というファイルを開き、どこかの行に文字を挿入したとします。そ
して、オプション 'backup' を有効にしてファイルを保存しました。バックアップファ
イル "main.c~" には変更前のファイルが保存されています。
シェルで (vim上ではありません) 次のコマンドを入力します:

        vimdiff main.c~ main.c

2つのウィンドウを左右に並べた状態で Vim が起動します。画面には先ほど文字を挿
入した行とその前後の数行が表示されています。

         VV                   VV
        +-----------------------------------------+
        |+ +--123 lines: /* a|+ +--123 lines: /* a|  <- 折り畳み
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  changed text      |  <- 変更された行
        |  text              |  text              |
        |  text              |  ------------------|  <- 削除された行
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  text              |
        |+ +--432 lines: text|+ +--432 lines: text|  <- 折り畳み
        |  ~                 |  ~                 |
        |  ~                 |  ~                 |
        |main.c~==============main.c==============|
        |                                         |
        +-----------------------------------------+

(上の図は強調表示されてないので、ちゃんと見たければ、vimdiff コマンドを実行し
てみてください)

変更のない行は一行に折り畳まれて表示されます。これを閉じた折り畳みと呼びます。
上の図では "<- 折り畳み" とある行がそうです。最初の折り畳みは 123 行を折り畳ん
でいます。それらの行は両方のファイルで一致しています。
"<- 変更された行" とある行は強調表示されていて、挿入した文字列が別の色で表示さ
れています。強調表示されているので、どこが違うのかが一目でわかります。
削除された行は main.c のウィンドウにあるように "---" と表示されます。上の図の、
"<- 削除された行" とある行を見てください。実際には、そこに文字はありません。そ
の行は、main.c を別のウィンドウと同じ行数で表示するために使われています。


折り畳み表示列

各ウィンドウの左側に色の違う列があります。上の図では "VV" で示されています。そ
の列の、閉じた折り畳みのある行に、"+" 記号が表示されています。マウスポインタを
その "+" 記号に合わせて、左ボタンをクリックしてください。折り畳みが開き、折り
畳まれていたテキストが表示されます。
開いた折り畳みは "-" 記号で表示されます。"-" 記号をクリックすると折り畳みは閉
じます。
当り前ですが、これはマウスが利用できる場合のみ機能します。キーボードの場合は
"zo" で折り畳みを開いたり、"zc" で閉じたりできます。


Vim の中で差分を取る

Vim の中から差分モードを開始する方法もあります。"main.c" を開いて、ウィンドウ
を分割し差分を表示するには、次のようにします:

        :edit main.c
        :vertical diffsplit main.c~

":vertical" コマンドはウィンドウを縦分割するために使用します。使わなかった場合
は横分割になります。

パッチ、または diff ファイルがある場合は、3つめの方法で差分モードを開始できま
す。最初に、パッチを適用するファイルを開き、次に、Vim にパッチファイルの名前を
教えてやります:

        :edit main.c
        :vertical diffpatch main.c.diff

警告: パッチファイルは、開いているファイル用のパッチが1つだけ含まれているもの
でなければなりません。そうでない場合は、大量のエラーメッセージが表示されたり、
予期せずに、他のファイルにパッチが適用されてしまう場合があります。
パッチ処理は Vim 内部の、ファイルのコピーに対して実行されます。ハードディスク
上のファイルは (それを上書きしない限り) 変更されません。


同期スクロール

ファイル間の差分がたくさんある場合、通常どおりスクロールすればそれらを表示でき
ます。もう一方のウィンドウも同じ場所を表示するように自動的にスクロールされるの
で、簡単に差分を並べて表示できます。
同期スクロールを無効にするには、次のコマンドを使います:

        :set noscrollbind


変更された場所にジャンプする

折り畳みを無効にしている場合、変更された場所を見つけるのは簡単ではありません。
次のコマンドを使うと、前方の変更にジャンプできます:

        ]c

逆方向にジャンプするには次のコマンドを使います:

        [c

回数指定を使えば、さらに遠くまでジャンプできます。


変更を取り除く

ウィンドウからウィンドウへテキストを移動できます。これによって、差分が増えたり
減ったりします。強調表示は自動的に更新されません。更新するには次のコマンドを使
います:

        :diffupdate

差分を取り除くには、強調表示された範囲のテキストをもう一方のウィンドウに移動し
ます。上述の "main.c" と "main.c~" の例を使って説明します。左ウィンドウに移動
して、もう一方のウィンドウでは削除されている行に移動します。そして、次のコマン
ドを入力します:

        dp

カレントウィンドウのテキストがもう一方のウィンドウにプットされ、変更がなくなり
ます。"dp" は "diff put" の意味です。
別の方法でも同じことができます。右のウィンドウに移動して、"changed" が挿入され
た行に移動します。そして、次のコマンドを入力します:

        do

もう一方のファイルからテキストがコピーされ、変更はなくなります。これで変更がな
くなってしまったので、すべてのテキストが折り畳まれて表示されます。"do" は
"diff obtain" の意味です。意味的には "dg" の方が良いのですが、それはすでに他で
使われています ("dgg" でカーソル位置から最初の行まで削除されます)。

差分モードの詳細は vimdiff をご覧ください。

==============================================================================
08.8  その他

'laststatus' オプションを使うと、最後のウィンドウにステータスラインを表示する
かどうかを設定できます:

        0       表示しない
        1       分割ウィンドウがある時だけ表示 (初期設定)
        2       常に表示

ほとんどの、ファイルを開くコマンドには、ウィンドウを分割するバージョンが存在し
ます。
Ex コマンドの場合、先頭に "s" が付いています。例えば、":tag" はタグジャンプで
すが、":stag" はウィンドウを分割してからタグジャンプします。
ノーマルモードコマンドの場合、CTRL-W を前置します。例えば、CTRL-^ はオルタネー
トファイルへのジャンプですが、CTRL-W CTRL-^ はウィンドウを分割してからオルタネー
トファイルを開きます。

'splitbelow' オプションを設定すると、カレントウィンドウの下に新しいウィンドウ
が作られるようになります。'splitright' オプションを設定すると、縦分割したとき
に、カレントウィンドウの右に新しいウィンドウが作られるようになります。

ウィンドウを分割するときに、次の修飾コマンドを使うと、ウィンドウの位置を指定で
きます:

        :leftabove {cmd}        カレントウィンドウの左、または上
        :aboveleft {cmd}        同上
        :rightbelow {cmd}       カレントウィンドウの右、または下
        :belowright {cmd}       同上
        :topleft {cmd}          上、または左の端
        :botright {cmd}         下、または右の端


==============================================================================
08.9  タブページ

ウィンドウは重ねることができないので、画面がすぐにいっぱいになってしまいます。
それを解決するために、タブページ、というものが用意されています。

"thisfile" というファイルを開いているとしましょう。新しいタブページを作成する
ために次のコマンドを実行します:

        :tabedit thatfile

"thatfile" が開かれ、Vim ウィンドウ全体を占める大きさのウィンドウに表示されま
す。そして、上部にバーが表示され、ファイル名が2つ表示されているのが確認できる
と思います:

        +----------------------------------+
        | thisfile | /thatfile/ __________X|    (thatfile は太字)
        |/* thatfile */                    |
        |that                              |
        |that                              |
        |~                                 |
        |~                                 |
        |~                                 |
        |                                  |
        +----------------------------------+

これは2つのタブページがある状態です。1つ目のタブページには "thisfile" を開いて
いるウィンドウが、2つ目のタブページには "thatfile" を開いているウィンドウが入
っています。これは、紙が2枚重なっていて、それぞれの紙にファイル名が書かれたラ
ベルが付いているようなものです。

マウスを使って "thisfile" をクリックしてみましょう。次のようになります。

        +----------------------------------+
        | /thisfile/ | thatfile __________X|    (thisfile は太字)
        |/* thisfile */                    |
        |this                              |
        |this                              |
        |~                                 |
        |~                                 |
        |~                                 |
        |                                  |
        +----------------------------------+

上部のラベルをクリックすると、タブページを切替えることができます。マウスがな
い、あるいは使いたくない場合には、"gt" コマンドでも切替えられます。"gt" は
Goto Tab の略です。

次のコマンドを実行し、タブページをもう一つ作成してみましょう:

        :tab split

ウィンドウを1つもったタブページが作成され、そのウィンドウには、さっきまで開い
ていたのと同じバッファが表示されています:

        +-------------------------------------+
        | thisfile | /thisfile/ | thatfile __X|   (thisfile は太字)
        |/* thisfile */                       |
        |this                                 |
        |this                                 |
        |~                                    |
        |~                                    |
        |~                                    |
        |                                     |
        +-------------------------------------+

":tab" コマンドは、ウィンドウを開く Ex コマンドと組み合わせて使います。そうす
ると、ウィンドウは新しいタブページで開かれます。もう一つ例をあげます:

        :tab help gt

このコマンドを実行すると、"gt" についてのヘルプが新しいタブページで開きます。

タブページの操作には、他にも次のようなものがあります:

- 上部バーの最後のラベルより右 (ラベルのないとこ) をマウスでクリック
        "gt" と同じように、次のタブページを選択します。

- 上部右端の "X" をクリック
        現在のタブページを閉じます。ただし、そのタブページ内に未保存の変更があ
        る場合は閉じません。

- 上部バーをダブルクリック
        新しいタブページを作成します。

- "tabonly" コマンド
        現在のタブページ以外を閉じます。ただし、それらのタブページ内に未保存の
        変更がある場合は閉じません。

タブページについての詳細は tab-page を参照してください。

==============================================================================

次章: usr_09.txt  GUI を使う

Copyright: see manual-copyright  vim:tw=78:ts=8:noet:ft=help:norl:
関連キーワード:  ウィンドウ, コマンド, usr, 表示, CTRL, 分割, 移動, Vim, 変更, タブ