Usr_08

Nvim の :help ページは、生成されており、ソースtree-sitter-vimdoc パーサーを使って解析したものです。


VIM ユーザーマニュアル - Bram Moolenaar 著
ウィンドウの分割
異なる2つのファイルを上下に表示したり、ファイル内の異なる2つの場所を同時に表示したりします。2つのファイルを並べて表示することで、その違いを確認できます。これらはすべて、ウィンドウを分割することで可能になります。
08.1 ウィンドウの分割 08.2 別のファイルでウィンドウを分割 08.3 ウィンドウのサイズ 08.4 垂直分割 08.5 ウィンドウの移動 08.6 すべてのウィンドウに対するコマンド 08.7 diffモードでの差異表示 08.8 その他 08.9 タブページ
次の章:usr_09.txt GUI の利用 前の章:usr_07.txt 複数のファイルの編集 目次:usr_toc.txt

ウィンドウの分割

新しいウィンドウを開く最も簡単な方法は、次のコマンドを使用することです。
:split
このコマンドは画面を2つのウィンドウに分割し、カーソルを上のウィンドウに置きます。
+----------------------------------+
|/* file one.c */                   |
|~                                   |
|~                                   |
|one.c=============================|
|/* file one.c */                   |
|~                                   |
|one.c=============================|
|                                   |
+----------------------------------+
ここで表示されているのは、同じファイルに対する2つのウィンドウです。「====」の行はステータスラインです。上のウィンドウに関する情報が表示されます。(実際には、ステータスラインは反転表示になります。)2つのウィンドウを使用すると、同じファイルの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
既存のウィンドウについては、いくつかの方法でサイズを変更できます。マウスを使用できる場合は簡単です。マウスカーソルを2つのウィンドウを区切るステータスラインに移動し、上下にドラッグします。
ウィンドウのサイズを大きくするには
CTRL-W +
小さくするには
CTRL-W -
これらのコマンドはどちらもカウントを取り、ウィンドウサイズをその行数だけ増減します。したがって、"4 CTRL-W +" はウィンドウを4行高くします。
ウィンドウの高さを指定された行数に設定するには
{height}CTRL-W _
つまり、数値 {height}CTRL-W、そしてアンダースコア(英語(米国)キーボードでは Shift キーを押しながら - キー)です。ウィンドウを可能な限り高くするには、カウントなしで CTRL-W _ コマンドを使用します。

マウスの使用

Vim では、キーボードから多くのことを非常に迅速に行うことができます。残念ながら、ウィンドウのサイズ変更コマンドには、かなりの入力が必要です。この場合、マウスを使用する方が速いです。マウスカーソルをステータスラインに置きます。次に、マウスの左ボタンを押してドラッグします。ステータスラインが移動し、片側のウィンドウが高くなり、もう片方が小さくなります。

オプション

'winheight' オプションはウィンドウの最小の希望高さを設定でき、'winminheight' はハードな最小高さを設定できます。同様に、最小の希望幅については 'winwidth' があり、ハードな最小幅については 'winminwidth' があります。'equalalways' オプションをセットすると、ウィンドウが閉じられたり開かれたりするときに、Vim がウィンドウサイズを均等化します。

08.4 垂直分割

":split" コマンドは、現在のウィンドウの上に新しいウィンドウを作成します。ウィンドウを左側に表示するには、次を使用します。
:vsplit
または
:vsplit two.c
結果は次のようになります。
+--------------------------------------+
|/* file two.c */   |/* file one.c */  |
|~                    |~                       |
|~                    |~                       |
|~                    |~                       |
|two.c===============one.c=============|
|                                       |
+--------------------------------------+
実際には、中央の | 線は反転表示になります。これは垂直セパレータと呼ばれます。左右の2つのウィンドウを区切ります。
新しい空のファイルで垂直分割されたウィンドウを開くための ":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 ウィンドウの移動

いくつかのウィンドウを分割しましたが、それらが間違った場所にあります。次に、ウィンドウを別の場所に移動するコマンドが必要です。たとえば、次のような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 ウィンドウを一番右に移動

08.6 すべてのウィンドウに対するコマンド

複数のウィンドウを開いていて、Vim を終了する場合は、各ウィンドウを個別に閉じることができます。より迅速な方法は、次のコマンドを使用することです。
:qall
これは「すべて終了」を意味します。いずれかのウィンドウに変更が含まれている場合、Vim は終了しません。カーソルは変更のあるウィンドウに自動的に配置されます。次に、":write" を使用して変更を保存するか、":quit!" を使用して変更を破棄することができます。
変更のあるウィンドウがあることを知っていて、これらの変更をすべて保存する場合は、次のコマンドを使用します。
:wall
これは「すべて書き込む」を意味します。ただし、実際には、変更のあるファイルのみを書き込みます。Vim は、変更されていないファイルを書き込むことは意味がないことを認識しています。そして、":qall" と ":wall" の組み合わせがあります。つまり、「すべて書き込んで終了」コマンドです。
:wqall
これにより、変更されたすべてのファイルが書き込まれ、Vim が終了します。最後に、Vim を終了し、すべての変更を破棄するコマンドがあります。
:qall!
注意してください。このコマンドを元に戻す方法はありません!
すべての引数に対してウィンドウを開く
Vim が各ファイルに対してウィンドウを開くようにするには、"-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 diff モードでの差異表示

2つのファイル間の違いを表示する、特別な Nvim の起動方法があります。「main.c」というファイルを作成し、1行にいくつかの文字を挿入してみましょう。バックアップファイル「main.c~」にファイルの前のバージョンが含まれるように、'backup' オプションを設定してこのファイルを書き込みます。diff モードで Nvim を起動するには、シェルで次のコマンドを入力します。
nvim -d main.c~ main.c
Vim が起動し、2つのウィンドウが並んで表示されます。文字を追加した行と、その上下の数行のみが表示されます。
 VV                      VV
+-----------------------------------------+
|+ +--123 lines: /* a|+ +--123 lines: /* a|  <- fold
|  text                     |        text                  |
|  text                     |        text                  |
|  text                     |        text                  |
|  text                     |        changed text          |  <- changed line
|  text                     |        text                  |
|  text                     |        ------------------|  <- deleted line
|  text                     |        text                  |
|  text                     |        text                  |
|  text                     |        text                  |
|+ +--432 lines: text|+ +--432 lines: text|  <- fold
|  ~                     |        ~                  |
|  ~                     |        ~                  |
|main.c~==============main.c==============|
|                                          |
+-----------------------------------------+
(この画像はハイライト表示を示していません。それには "nvim -d" を使用してください。)
変更されていない行は1行に折りたたまれています。これは閉じられた折りたたみと呼ばれます。画像では「<- fold」で示されています。したがって、上部の単一の折りたたみ線は123行のテキスト行を表しています。これらの行は両方のファイルで同じです。「<- changed line」でマークされた行は強調表示され、挿入されたテキストは別の色で表示されます。これにより、2つのファイルの違いが明確に示されます。削除された行は、main.c ウィンドウに「---」と表示されます。画像内の「<- deleted line」マーカーを参照してください。これらの文字は実際にはそこにはありません。これらは、他のウィンドウと同じ行数を表示するために main.c を埋めるだけです。

折りたたみ列

各ウィンドウには、わずかに異なる背景を持つ左側の列があります。上の図では、これらは「VV」で示されています。閉じられた各折りたたみの前にプラス文字があることに気づくでしょう。マウスカーソルをそのプラスに移動し、左ボタンをクリックします。折りたたみが開き、その内容が表示されます。折りたたみ列には、開いた折りたたみに対してマイナス記号が表示されます。この - をクリックすると、折りたたみが閉じられます。明らかに、これはマウスを使用できる場合にのみ機能します。「zo」を使用して折りたたみを開き、「zc」を使用して閉じることもできます。

Vim での差分

diff モードで起動する別の方法は、Vim 内部から行うことができます。「main.c」ファイルを編集し、分割して差異を表示します。
:edit main.c
:vertical diffsplit main.c~
":vertical" コマンドは、ウィンドウを垂直に分割するために使用されます。これを省略すると、水平分割になります。
パッチまたは diff ファイルがある場合は、diff モードを起動する3番目の方法を使用できます。最初に、パッチが適用されるファイルを編集します。次に、Vim にパッチファイルの名前を伝えます。
:edit main.c
:vertical diffpatch main.c.diff
警告: パッチファイルには、編集中のファイルに対するパッチが1つだけ含まれている必要があります。そうしないと、多くのエラーメッセージが表示され、一部のファイルが予期せずパッチされる可能性があります。パッチは Vim のファイルコピーに対してのみ行われます。ハードディスク上のファイルは変更されません(ファイルを書き込むことを決定するまで)。

スクロールバインディング

ファイルに変更が多い場合は、通常の方法でスクロールできます。Vim は両方のウィンドウを同じ位置から開始するように試みるため、違いを簡単に並べて確認できます。しばらくの間これをしたくない場合は、次のコマンドを使用します。
:set noscrollbind

変更箇所へのジャンプ

何らかの方法で折りたたみ機能を無効にした場合、変更箇所を見つけるのが難しいことがあります。このコマンドを使って、次の変更箇所へジャンプします。
]c
逆方向に移動するには、こちらを使用します。
[c
数字を先頭に付けると、より遠くへジャンプできます。

変更の削除

テキストをあるウィンドウから別のウィンドウへ移動できます。これにより、差異が削除されたり、新しい差異が追加されたりします。Vimは常にハイライトを更新するわけではありません。更新するには、このコマンドを使用します。
:diffupdate
差異を削除するには、ハイライトされたブロック内のテキストをあるウィンドウから別のウィンドウへ移動します。上記の「main.c」と「main.c~」の例を使用します。カーソルを左ウィンドウに移動し、もう一方のウィンドウで削除された行に合わせます。次に、このコマンドを入力します。
dp
現在のウィンドウのテキストをもう一方のウィンドウに入れることで、変更が削除されます。「dp」は「diff put」の略です。逆も可能です。カーソルを右ウィンドウに移動し、「changed」が挿入された行に合わせます。次に、このコマンドを入力します。
do
もう一方のウィンドウからテキストを取得することで、変更が削除されます。変更がなくなったため、Vimはすべてのテキストを閉じられた折りたたみにまとめます。「do」は「diff obtain」の略です。「dg」の方が適切だったかもしれませんが、既に別の意味(「dgg」はカーソルから最初の行までを削除する)で使用されています。
diffモードの詳細については、diff-modeを参照してください。

08.8 その他

'laststatus'オプションを使用すると、最後のウィンドウにステータスラインを表示するタイミングを指定できます。
0:表示しない。 1:ウィンドウが分割されている場合のみ(デフォルト)。 2:常に表示する。 3:各ウィンドウではなく、一番下にグローバルなステータスラインを表示する。
別のファイルを編集する多くのコマンドには、ウィンドウを分割するバリアントがあります。コマンドラインコマンドの場合、これは先頭に「s」を付けることで行われます。例:「:tag」はタグへジャンプしますが、「:stag」はウィンドウを分割してタグへジャンプします。ノーマルモードコマンドの場合、CTRL-Wを先頭に付けます。CTRL-^は別のファイルへジャンプしますが、CTRL-W CTRL-^はウィンドウを分割して別のファイルを編集します。
'splitbelow'オプションを設定すると、新しいウィンドウが現在のウィンドウの下に表示されるようにできます。'splitright'オプションを設定すると、垂直に分割されたウィンドウが現在のウィンドウの右側に表示されるようにできます。
ウィンドウを分割するとき、修飾子コマンドを先頭に付けると、ウィンドウを表示する場所を指定できます。
:leftabove {cmd} 現在のウィンドウの左または上。 :aboveleft {cmd} 同上。 :rightbelow {cmd} 現在のウィンドウの右または下。 :belowright {cmd} 同上。 :topleft {cmd} Vimウィンドウの一番上または左。 :botright {cmd} Vimウィンドウの一番下または右。

08.9 タブページ

ウィンドウが重ならないことに気づいたでしょう。つまり、画面スペースがすぐに不足します。この解決策は、タブページと呼ばれます。
「thisfile」を編集していると仮定します。新しいタブページを作成するには、このコマンドを使用します。
:tabedit thatfile
これにより、Vimウィンドウ全体を占有するウィンドウでファイル「thatfile」が編集されます。そして、上部に2つのファイル名が表示されるバーがあることに気づくでしょう。
+----------------------------------+
| thisfile | /thatfile/ __________X|    (thatfile is bold)
|/* thatfile */                           |
|that                                   |
|that                                   |
|~                                   |
|~                                   |
|~                                   |
|                                   |
+----------------------------------+
これで2つのタブページができました。最初のタブページには「thisfile」のウィンドウがあり、2番目のタブページには「thatfile」のウィンドウがあります。これは、ファイル名を示すタブがそれぞれのページから突き出た、互いに重ねられた2つのページのようなものです。
次に、マウスを使用して上部にある「thisfile」をクリックします。結果は次のとおりです。
+----------------------------------+
| /thisfile/ | thatfile __________X|    (thisfile is bold)
|/* thisfile */                           |
|this                                   |
|this                                   |
|~                                   |
|~                                   |
|~                                   |
|                                   |
+----------------------------------+
このように、上部のラベルをクリックすることでタブページを切り替えることができます。マウスがない場合や、使用したくない場合は、「gt」コマンドを使用できます。ニーモニック:Goto Tab。
次に、次のコマンドで別のタブページを作成しましょう。
:tab split
これにより、いたウィンドウと同じバッファを編集するウィンドウが1つある新しいタブページが作成されます。
+-------------------------------------+
| thisfile | /thisfile/ | thatfile __X|   (thisfile is bold)
|/* thisfile */                              |
|this                                      |
|this                                      |
|~                                      |
|~                                      |
|~                                      |
|                                      |
+-------------------------------------+
ウィンドウを開くExコマンドの前に「:tab」を付けることができます。ウィンドウは新しいタブページで開かれます。別の例:
:tab help gt
「gt」のヘルプテキストが新しいタブページに表示されます。
タブページでできることをいくつか紹介します。
最後のラベルの後のスペースをマウスでクリックします。 「gt」と同様に、次のタブページが選択されます。
右上隅にある「X」をマウスでクリックします。 現在のタブページが閉じられます。現在のタブページに保存されていない変更がある場合を除きます。
上部をマウスでダブルクリックします。 新しいタブページが作成されます。
「tabonly」コマンド 現在のタブページを除くすべてのタブページを閉じます。他のタブページに保存されていない変更がある場合を除きます。
タブページの詳細については、tab-pageを参照してください。
次の章:usr_09.txt GUIの使用
著作権:manual-copyrightを参照してください vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンド索引
クイックリファレンス