Next: , Previous: , Up: 目次   [Index]


ウィンドウの分割

*usr_08.txt*	For Vim バージョン 8.1.  Last change: 2017 Aug 11

		     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|タブページ

ウィンドウの分割

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

: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

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

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

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

:split two.c

例へば、one.c を編輯してゐたなら、結果は次のやうになります。

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

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

:new

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

ウィンドウのサイズ

":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’ オプションが設定されてゐると、ウィンドウを閉ぢたり開いたりするたびに、全てのウィンドウのサイズが同じになります。

縱分割

":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|

ウィンドウの移動

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

+----------------------------------+
|/* 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ウィンドウを右端に移動

全ウィンドウを對象とするコマンド

Vim を終了しようと思つたときに、複數のウィンドウが開いてゐた場合、ウィンドウを 1 つずつ閉ぢていけば 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" だと縱分割になります。

vimdiff で差分を表示する

特別な方法で Vim を起動すると、2 つのファイルの差分を表示することができます。例へば、"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| をご覽ください。

その他

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}下、または右の端

タブページ

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

"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 の略です。

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

:tab split

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

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

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

:tab help gt

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

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

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


Next: , Previous: , Up: 目次   [Index]