Windows

Nvim の :help ページは、生成されたもので、ソースtree-sitter-vimdoc パーサーを使用して作成しています。


複数のウィンドウとバッファを使用した編集。buffers
ここでは、複数のウィンドウとバッファを使用するために追加されたコマンドについて説明します。さらに、複数のウィンドウと組み合わせて使用した場合に動作が異なるコマンドについても説明します。
基本については、ユーザーマニュアルの第7章と第8章で説明されています。 usr_07.txt usr_08.txt

1. はじめに windows-intro window

要約:バッファは、ファイル内のテキストをメモリに格納したものです。ウィンドウは、バッファのビューポートです。タブページは、ウィンドウのコレクションです。
ウィンドウはバッファのビューポートです。1つのバッファで複数のウィンドウを使用したり、異なるバッファで複数のウィンドウを使用したりできます。
バッファは、編集のためにメモリにロードされたファイルです。元のファイルは、バッファをファイルに書き込むまで変更されません。
バッファは、次の3つの状態のいずれかになります。
active-buffer
アクティブ:バッファがウィンドウに表示されています。このバッファにファイルがある場合、そのファイルはバッファに読み込まれています。バッファはそれ以降に変更されている可能性があるため、ファイルとは異なる場合があります。hidden-buffer
非表示:バッファは表示されていません。このバッファにファイルがある場合、そのファイルはバッファに読み込まれています。それ以外の場合は、アクティブなバッファと同じですが、表示することはできません。inactive-buffer
非アクティブ:バッファは表示されておらず、何も含まれていません。ファイルが一度ロードされた場合、バッファのオプションは記憶されます。shada ファイルのマークを含めることができます。ただし、バッファにはテキストは含まれていません。
表形式
状態 表示済み ロード済み ":buffers"
ウィンドウ内 表示
アクティブ はい はい 'a' 非表示 いいえ はい 'h' 非アクティブ いいえ いいえ ' '
buffer-reuse
各バッファには一意の番号が割り当てられており、この番号はVimセッション内では変更されません。bufnr() 関数と bufname() 関数を使用すると、バッファ名とバッファ番号を相互に変換できます。例外が1つあります。新しい空のバッファが作成され、変更されていない場合、別のファイルをそのバッファにロードすると、そのバッファが再利用されます。これは、バッファ番号も変更されないことを意味します。
メインのVimウィンドウには、複数の分割ウィンドウを含めることができます。また、各ウィンドウに複数のウィンドウを含めることができるタブページ tab-page もあります。
focusable
ウィンドウがフォーカス可能である場合、それは「ナビゲーションスタック」の一部です。つまり、:windo、CTRL-W などのエディターコマンドは、ウィンドウを「現在のウィンドウ」にすることができるものと見なします。フォーカスできないウィンドウは、このようなコマンドではスキップされます(ただし、nvim_set_current_win() で明示的にフォーカスできます)。
ウィンドウ(特にフローティングウィンドウ)には、「非表示」や「固定」など、動作にも影響を与える他の多くの api-win_config プロパティを設定できます。
window-ID winid windowid 各ウィンドウには、ウィンドウIDと呼ばれる一意の識別子があります。この識別子は、Vimセッション内では変更されません。win_getid() 関数と win_id2tabwin() 関数を使用して、ウィンドウ/タブ番号と識別子を相互に変換できます。ウィンドウ番号もあり、ウィンドウが開閉されるたびに変更される場合があります。 winnr() を参照してください。ウィンドウ番号は、特定のタブでのみ有効です。ウィンドウIDは、タブ全体で有効です。ウィンドウIDまたはウィンドウ番号を受け取るほとんどの関数では、ウィンドウ番号は現在のタブにのみ適用され、ウィンドウIDは任意のタブのウィンドウを参照できます。

2. Vimの起動 windows-starting

デフォルトでは、VimはViと同じように1つのウィンドウで起動します。
Vimへの"-o"および"-O"引数を使用して、引数リスト内の各ファイルに対してウィンドウを開くことができます。"-o"引数はウィンドウを水平に分割します。"-O"引数はウィンドウを垂直に分割します。"-o"と"-O"の両方が指定されている場合、最後に検出された引数が分割方向を決定するために使用されます。たとえば、これは3つのウィンドウを水平に分割して開きます
vim -o file1 file2 file3
" -oN "。Nは10進数で、N個のウィンドウを水平に分割して開きます。ファイル名がウィンドウの数よりも多い場合、N個のウィンドウのみが開かれ、一部のファイルにはウィンドウが割り当てられません。ウィンドウの数がファイル名よりも多い場合、最後のいくつかのウィンドウは空のバッファを編集します。同様に、"-ON"はN個のウィンドウを垂直に分割して開き、同じ制限があります。
ファイル名が多いと、ウィンドウが非常に小さくなります。作業可能な状態にするには、'winheight' および/または 'winwidth' オプションを設定する必要がある場合があります。
新しいウィンドウを開いてファイルを読み込むときには、Buf/Win Enter/Leave autocommand は実行されません。これらは、実際にウィンドウが入力された場合にのみ実行されます。
status-line
ステータスラインは、ウィンドウを区切るために使用されます。'laststatus' オプションは、最後のウィンドウにもステータスラインがあるかどうかを示します:'laststatus' = 0 ステータスラインなし 'laststatus' = 1 ウィンドウが複数ある場合にステータスラインを表示 'laststatus' = 2 常にステータスラインを表示 'laststatus' = 3 各ウィンドウにではなく、一番下にグローバルなステータスラインを表示
ステータスラインの内容は、'statusline' オプションを使用して変更できます。このオプションはウィンドウに対してローカルに設定できるため、各ウィンドウに異なるステータスラインを設定できます。
通常、反転はステータスラインを表示するために使用されます。これは、hl-StatusLine ハイライトグループで変更できます。ステータスラインにハイライトが使用されていない場合、現在のウィンドウには '^' 文字が使用され、他のウィンドウには '=' が使用されます。'mouse' が有効になっている場合、ステータスラインをドラッグしてウィンドウのサイズを変更できます。
filler-lines
ウィンドウ内の最後のバッファ行の後の行は、フィラー行と呼ばれます。デフォルトでは、これらの行はチルダ(〜)文字で始まります。'fillchars' オプションの「eob」項目を使用して、この文字を変更できます。デフォルトでは、これらの文字はNonText(hl-NonText)として強調表示されます。EndOfBuffer ハイライトグループ(hl-EndOfBuffer)を使用して、フィラー文字の強調表示を変更できます。

3. ウィンドウを開閉する opening-window

CTRL-W s CTRL-W_s
CTRL-W S CTRL-W_S
CTRL-W CTRL-S CTRL-W_CTRL-S
:[N]sp[lit] [++opt] [+cmd] [file] :sp :split 現在のウィンドウを2つに分割します。結果として、同じファイルに2つのビューポートができます。
新しいウィンドウの高さをNにします(デフォルトでは、現在のウィンドウの高さの半分を使用します)。現在のウィンドウの高さを小さくして、スペースを作成します(および、'equalalways' オプションが設定されており、'eadirection' が「hor」ではなく、それらのいずれかが現在のウィンドウまたは新しいウィンドウよりも高い場合、他のウィンドウも小さくします)。
[file] が指定されている場合は、新しいウィンドウで編集されます。どのバッファにもロードされていない場合は、読み込まれます。それ以外の場合は、新しいウィンドウはすでにロードされているバッファを使用します。
注: CTRL-S はすべての端末で機能するとは限らず、それ以降の入力をブロックする可能性があります。CTRL-Q を使用して再開してください。++opt+cmd も参照してください。E242 E1159 autocommand でウィンドウを分割するときは注意が必要です。他のウィンドウレイアウトの変更中にこれが起こると、ウィンドウレイアウトが混乱する可能性があります。
CTRL-W CTRL-V CTRL-W_CTRL-V
CTRL-W v CTRL-W_v
:[N]vs[plit] [++opt] [+cmd] [file] :vs :vsplit :split と同様ですが、垂直に分割します。1. 幅が指定されていない場合、2. 'equalalways' が設定されている場合、3. 'eadirection' が「ver」ではなく、4. 他のウィンドウのいずれかが現在のウィンドウまたは新しいウィンドウよりも幅が広い場合、ウィンドウは水平に広がります。Nが指定されている場合は、可能な限り新しいウィンドウの幅をN列にします。注:他の場所では CTRL-QCTRL-V と同じことをしますが、ここではそうではありません!
CTRL-W n CTRL-W_n
CTRL-W CTRL-N CTRL-W_CTRL-N
:[N]new [++opt] [+cmd] :new
新しいウィンドウを作成し、そのウィンドウで空のファイルの編集を開始します。新しいウィンドウの高さをNにします(デフォルトでは、既存の高さの半分を使用します)。現在のウィンドウの高さを小さくして、スペースを作成します(および、'equalalways' オプションが設定されており、'eadirection' が「hor」ではない場合、他のウィンドウも小さくします)。++opt+cmd も参照してください。'fileformats' が空でない場合、指定された最初の形式が新しいバッファに使用されます。'fileformats' が空の場合、現在のバッファの 'fileformat' が使用されます。これは、++opt 引数で上書きできます。autocommand は次の順序で実行されます:1. 現在のウィンドウの WinLeave 2. 新しいウィンドウの WinEnter 3. 現在のバッファの BufLeave 4. 新しいバッファの BufEnter これは、最初に ":split" を実行し、次に ":enew" コマンドを実行するのと同じように動作します。
:[N]new [++opt] [+cmd] {file} :[N]sp[lit] [++opt] [+cmd] {file} :split_f
新しいウィンドウを作成し、そのウィンドウでファイル {file} の編集を開始します。これは、最初に ":split" を実行し、次に ":edit" コマンドを実行するのと同じように動作しますが、元のウィンドウの代替ファイル名が {file} に設定されます。[+cmd] が指定されている場合は、ファイルのロード後にコマンドを実行します +cmd++opt も参照してください。新しいウィンドウの高さをNにします(デフォルトでは、既存の高さの半分を使用します)。現在のウィンドウの高さを小さくして、スペースを作成します(および、'equalalways' オプションが設定されている場合、他のウィンドウも小さくします)。
:[N]vne[w] [++opt] [+cmd] [file] :vne :vnew :new と同様ですが、垂直に分割します。'equalalways' が設定されており、'eadirection' が「ver」ではない場合は、幅が指定されていない限り、ウィンドウは水平に広がります。
:[N]sv[iew] [++opt] [+cmd] [ファイル] :sv :sview splitview ":split"と同じですが、このバッファに'readonly'オプションを設定します。
:[N]sf[ind] [++opt] [+cmd] {ファイル} :sf :sfi :sfind splitfind ":split"と同じですが、:findのように'path'内で{ファイル}を検索します。{ファイル}が見つからない場合は分割しません。
CTRL-W CTRL-^ CTRL-W_CTRL-^ CTRL-W_^ CTRL-W ^ 現在のウィンドウを2つに分割し、代替ファイルを編集します。カウントNが指定されている場合、現在のウィンドウを分割し、バッファNを編集します。":sp #"および":sp #N"に似ていますが、他のバッファを名前なしにすることができます。このコマンドは、CTRL-^の動作に一致しますが、最初にウィンドウを分割します。
CTRL-W ge CTRL-W_ge
現在のウィンドウを外部ウィンドウとして分離します。ui-multigridサポートを備えたUIを使用している場合にのみ利用可能です。
'splitbelow''splitright'オプションは、新しいウィンドウが表示される場所に影響を与えることに注意してください。E36
ウィンドウを作成するには、十分なスペースがないと失敗します。すべてのウィンドウは、少なくとも1つの画面行と列を必要とし、場合によってはさらに必要です。'winminheight'オプションと'winminwidth'オプションが関連しています。
:vert :vertical :vert[ical] {cmd} {cmd}を実行します。ウィンドウを分割するコマンドが含まれている場合、垂直に分割されます。vertical wincmd =の場合、ウィンドウは垂直方向にのみ均等化されます。:execute:normalでは機能しません。
:hor :horizontal :hor[izontal] {cmd} {cmd}を実行します。現在、次のコマンドでのみ違いが生じます。
:wincmd =: ウィンドウを水平方向にのみ均等化します。
:terminal: 分割ウィンドウにターミナルバッファを開きます。
:checkhealth: 分割ウィンドウにヘルスチェックバッファを開きます。
:lefta[bove] {cmd} :lefta :leftabove :abo[veleft] {cmd} :abo :aboveleft {cmd}を実行します。ウィンドウを分割するコマンドが含まれている場合、現在のウィンドウの左側(垂直分割)または上側(水平分割)に開かれます。'splitbelow'および'splitright'をオーバーライドします。:executeおよび:normalでは機能しません。
:rightb[elow] {cmd} :rightb :rightbelow :bel[owright] {cmd} :bel :belowright {cmd}を実行します。ウィンドウを分割するコマンドが含まれている場合、現在のウィンドウの右側(垂直分割)または下側(水平分割)に開かれます。'splitbelow'および'splitright'をオーバーライドします。:executeおよび:normalでは機能しません。
:topleft E442 :to[pleft] {cmd} {cmd}を実行します。ウィンドウを分割するコマンドが含まれている場合、Vimウィンドウの上部に表示され、幅全体を占有します。分割が垂直の場合、ウィンドウは一番左に表示され、Vimウィンドウの高さ全体を占有します。:executeおよび:normalでは機能しません。
:bo :botright :bo[tright] {cmd} {cmd}を実行します。ウィンドウを分割するコマンドが含まれている場合、Vimウィンドウの下部に表示され、幅全体を占有します。分割が垂直の場合、ウィンドウは一番右に表示され、Vimウィンドウの高さ全体を占有します。:executeおよび:normalでは機能しません。
これらのコマンド修飾子を組み合わせて、垂直に分割されたウィンドウが高さ全体を占有するようにすることができます。例
:vertical topleft split tags
Vimウィンドウの一番左にある「tags」ファイルに、垂直に分割されたフルハイトウィンドウを開きます。

ウィンドウを閉じる

:q[uit] :{count}q[uit] :count_quit
CTRL-W q CTRL-W_q
CTRL-W CTRL-Q CTRL-W_CTRL-Q
{count}がない場合:現在のウィンドウを閉じます。{count}が指定されている場合は、{count}番目のウィンドウを閉じます。edit-window
最後の編集ウィンドウ(ヘルプウィンドウまたはプレビューウィンドウを除く)を閉じると、Vimが終了します。
'hidden'が設定されていて、現在のバッファに対して1つのウィンドウしかない場合は、非表示になります。'hidden'が設定されておらず、現在のバッファに対して1つのウィンドウしかなく、バッファが変更された場合、コマンドは失敗します。(注:CTRL-Qはすべてのターミナルで機能するわけではありません)。[count]が最後のウィンドウ番号より大きい場合は、最後のウィンドウが閉じられます。
:1quit  " quit the first window
:$quit  " quit the last window
:9quit  " quit the last window
        " if there are fewer than 9 windows opened
:-quit  " quit the previous window
:+quit  " quit the next window
:+2quit " quit the second next window
ヘルプウィンドウを閉じるときに、これが唯一のウィンドウではない場合、Vimは前のウィンドウレイアウトを復元しようとします。:helpcloseを参照してください。
:q[uit]! :{count}q[uit]! {count}がない場合:現在のウィンドウを閉じます。{count}が指定されている場合は、{count}番目のウィンドウを閉じます。これがバッファの最後のウィンドウだった場合、そのバッファへの変更はすべて失われます。最後のウィンドウ(ヘルプウィンドウを除く)を閉じると、Vimが終了します。バッファの内容は、'hidden'が設定されている場合でも失われます。
:clo[se][!] :{count}clo[se][!] CTRL-W c CTRL-W_c :clo :close {count}がない場合:現在のウィンドウを閉じます。指定された場合は、{count}番目のウィンドウを閉じます。
'hidden'が設定されている場合、またはバッファが変更され、[!]が使用されている場合は、バッファが非表示になります(それを編集している別のウィンドウがない限り)。
現在のタブページに編集ウィンドウが1つしかなく、別のタブページがある場合、これは現在のタブページを閉じます。タブページ
このコマンドは、次の場合に失敗します:E444
画面にウィンドウが1つしかない。
'hidden'が設定されておらず、[!]が使用されておらず、バッファに変更があり、このバッファに他のウィンドウがない場合。バッファへの変更は書き込まれず、失われることもないため、これは「安全な」コマンドです。
CTRL-W CTRL-C CTRL-W_CTRL-C
CTRL-W CTRL-Cが現在のウィンドウを閉じると予想したかもしれませんが、CTRL-Cがコマンドをキャンセルするため、機能しません。
:hide
:hid[e] :{count}hid[e] {count}がない場合:画面上の最後のウィンドウでない限り、現在のウィンドウを閉じます。{count}が指定されている場合は、{count}番目のウィンドウを閉じます。
バッファは非表示になります(それを編集している別のウィンドウがない場合、または'bufhidden'unloaddelete、またはwipeである場合を除く)。ウィンドウが現在のタブページの最後のウィンドウである場合、タブページは閉じられます。タブページ
'hidden'の値は、このコマンドには関係ありません。バッファへの変更は書き込まれず、失われることもないため、これは「安全な」コマンドです。
:hid[e] {cmd} 'hidden'が設定された状態で{cmd}を実行します。'hidden'の前の値は、{cmd}が実行された後に復元されます。例
:hide edit Makefile
これにより、「Makefile」が編集され、現在のバッファに変更がある場合は非表示になります。
:on[ly][!] :{count}on[ly][!] CTRL-W o CTRL-W_o E445 CTRL-W CTRL-O CTRL-W_CTRL-O :on :only 現在のウィンドウを画面上で唯一のウィンドウにします。他のすべてのウィンドウが閉じられます。{count}については、上記の:quitコマンド:count_quitを参照してください。
'hidden'オプションが設定されている場合、閉じられたウィンドウ内のすべてのバッファが非表示になります。
'hidden'が設定されておらず、'autowrite'オプションが設定されている場合、変更されたバッファが書き込まれます。それ以外の場合、変更されたバッファを持つウィンドウは、[!]が指定されていない限り削除されません。その後、非表示になります。ただし、変更されたバッファは破棄されないため、変更が失われることはありません。
:fc :fclose :[count]fc[lose][!] zindex値が最も高い[count]個のフローティングウィンドウを閉じます。'!'ですべてのフローティングウィンドウを閉じます。

4. カーソルを他のウィンドウに移動する window-move-cursor

CTRL-W <Down> CTRL-W_<Down>
CTRL-W CTRL-J CTRL-W_CTRL-J CTRL-W_j CTRL-W j カーソルを現在のウィンドウの下のN番目のウィンドウに移動します。カーソル位置を使用して、代替を選択します。
CTRL-W <Up> CTRL-W_<Up>
CTRL-W CTRL-K CTRL-W_CTRL-K CTRL-W_k CTRL-W k カーソルを現在のウィンドウからN番目の上のウィンドウへ移動します。カーソル位置を使用して、代替案を選択します。
CTRL-W <Left> CTRL-W_<Left>
CTRL-W CTRL-H CTRL-W_CTRL-H
CTRL-W <BS> CTRL-W_<BS> CTRL-W_h CTRL-W h カーソルを現在のウィンドウからN番目の左のウィンドウへ移動します。カーソル位置を使用して、代替案を選択します。
CTRL-W <Right> CTRL-W_<Right>
CTRL-W CTRL-L CTRL-W_CTRL-L CTRL-W_l CTRL-W l カーソルを現在のウィンドウからN番目の右のウィンドウへ移動します。カーソル位置を使用して、代替案を選択します。
CTRL-W w CTRL-W_w CTRL-W_CTRL-W CTRL-W CTRL-W カウントなしの場合:カーソルを現在のウィンドウの直下/右にあるフォーカス可能なウィンドウへ移動します。直下または右に(フォーカス可能な)ウィンドウがない場合は、左上のウィンドウに移動します。カウントありの場合:N番目のウィンドウに移動します(ウィンドウは左上から右下へ番号付けされます)。ウィンドウ番号を取得するには、bufwinnr()およびwinnr()を参照してください。Nがウィンドウ数よりも大きい場合、最後のウィンドウに移動します。
CTRL-W_W
CTRL-W W カウントなしの場合:カーソルを現在のウィンドウの直上/左にあるフォーカス可能なウィンドウへ移動します。上または左にウィンドウがない場合は、右下のウィンドウに移動します。カウントありの場合:CTRL-W w のように、N番目のウィンドウに移動します。
CTRL-W t CTRL-W_t CTRL-W_CTRL-T CTRL-W CTRL-T カーソルを左上のウィンドウへ移動します。
CTRL-W b CTRL-W_b CTRL-W_CTRL-B CTRL-W CTRL-B カーソルを右下のウィンドウへ移動します。
CTRL-W p CTRL-W_p CTRL-W_CTRL-P CTRL-W CTRL-P 前の(最後にアクセスした)ウィンドウへ移動します。
CTRL-W_P E441 CTRL-W P プレビューウィンドウへ移動します。プレビューウィンドウがない場合は、エラーになります。
ビジュアルモードがアクティブで、新しいウィンドウが同じバッファ用ではない場合、ビジュアルモードは終了します。ウィンドウが同じバッファ上にある場合、カーソル位置は同じビジュアル領域が選択された状態になるように設定されます。
:winc :wincmd これらのコマンドは、":wincmd" で実行することもできます。
:[count]winc[md] {arg} :winc[md] [count] {arg} CTRL-W [count] {arg} を実行するのと同様です。例:
:wincmd j
現在のウィンドウの下にあるウィンドウに移動します。このコマンドは、ノーマルモードを使用できない場合(CursorHold 自動コマンドイベントの場合)や、ノーマルモードコマンドが不便な場合に役立ちます。カウントはウィンドウ番号でもかまいません。例:
:exe nr .. "wincmd w"
これにより、ウィンドウ "nr" に移動します。
注: すべての CTRL-W コマンドは、ノーマルモードコマンドを使用できない場所や不便な場所(例えば、ブラウザベースのターミナルなど)で使用するために、:wincmd でも実行できます。

5. ウィンドウの移動 window-moving

CTRL-W r CTRL-W_r CTRL-W_CTRL-R E443 CTRL-W CTRL-R ウィンドウを下方/右方にローテートします。最初のウィンドウが2番目のウィンドウになり、2番目のウィンドウが3番目のウィンドウになる、といった具合です。最後のウィンドウは最初のウィンドウになります。カーソルは同じウィンドウに残ります。これは、現在のウィンドウがある行または列のウィンドウ内でのみ機能します。
CTRL-W_R
CTRL-W R ウィンドウを上方/左方にローテートします。2番目のウィンドウが最初のウィンドウになり、3番目のウィンドウが2番目のウィンドウになる、といった具合です。最初のウィンドウは最後のウィンドウになります。カーソルは同じウィンドウに残ります。これは、現在のウィンドウがある行または列のウィンドウ内でのみ機能します。
CTRL-W x CTRL-W_x CTRL-W_CTRL-X CTRL-W CTRL-X カウントなしの場合:現在のウィンドウと次のウィンドウを交換します。次のウィンドウがない場合は、前のウィンドウと交換します。カウントありの場合:現在のウィンドウをN番目のウィンドウ(最初のウィンドウは1)と交換します。カーソルはもう一方のウィンドウに移動します。垂直および水平のウィンドウ分割が混在している場合、交換は現在のウィンドウがある行または列のウィンドウ内でのみ行われます。
以下のコマンドを使用して、ウィンドウレイアウトを変更できます。例えば、2つの垂直に分割されたウィンドウがある場合、CTRL-W K はそれを水平に分割されたウィンドウに変更します。CTRL-W H はその逆を行います。
CTRL-W_K
CTRL-W K 現在のウィンドウを、画面の幅全体を使用して、最上部に移動します。これは、:topleft split のように機能しますが、現在のウィンドウに適用され、新しいウィンドウは作成されません。
CTRL-W_J
CTRL-W J 現在のウィンドウを、画面の幅全体を使用して、最下部に移動します。これは、:botright split のように機能しますが、現在のウィンドウに適用され、新しいウィンドウは作成されません。
CTRL-W_H
CTRL-W H 現在のウィンドウを、画面の高さ全体を使用して、左端に移動します。これは、:vert topleft split のように機能しますが、現在のウィンドウに適用され、新しいウィンドウは作成されません。
CTRL-W_L
CTRL-W L 現在のウィンドウを、画面の高さ全体を使用して、右端に移動します。これは、:vert botright split のように機能しますが、現在のウィンドウに適用され、新しいウィンドウは作成されません。
CTRL-W_T
CTRL-W T 現在のウィンドウを新しいタブページに移動します。現在のタブページにウィンドウが1つしかない場合、これは失敗します。これは、:tab split のように機能しますが、以前のウィンドウは閉じられます。カウントが指定されている場合、新しいタブページはこのインデックスを持つタブページの前に開かれます。それ以外の場合は、現在のタブページの後に開かれます。

6. ウィンドウのリサイズ window-resize

CTRL-W_=
CTRL-W = すべてのウィンドウを(ほぼ)同じ高さと幅にしますが、現在のウィンドウには 'winheight' および 'winwidth' を使用します。'winfixheight' が設定されたウィンドウは高さを維持し、'winfixwidth' が設定されたウィンドウは幅を維持します。垂直方向のみを均等化する場合(ウィンドウの高さを均等にする場合)は、vertical wincmd = を使用します。水平方向のみを均等化する場合(ウィンドウの幅を均等にする場合)は、horizontal wincmd = を使用します。
:res[ize] -N :res :resize CTRL-W_- CTRL-W - 現在のウィンドウの高さを N (デフォルト 1) だけ小さくします。 :vertical の後に使用された場合: 幅を N だけ小さくします。
:res[ize] +N CTRL-W_+
CTRL-W + 現在のウィンドウの高さを N (デフォルト 1) だけ大きくします。 :vertical の後に使用された場合: 幅を N だけ大きくします。
:res[ize] [N] CTRL-W CTRL-_ CTRL-W_CTRL-_ CTRL-W__ CTRL-W _ 現在のウィンドウの高さを N (デフォルト: 最大可能な高さ) に設定します。
:{winnr}res[ize] [+-]N 上記の :resize と同様ですが、サイズを現在のウィンドウではなく、ウィンドウ {winnr} に適用します。
z{nr}<CR> 現在のウィンドウの高さを {nr} に設定します。
CTRL-W_<
CTRL-W < 現在のウィンドウの幅を N (デフォルト 1) だけ小さくします。
CTRL-W_>
CTRL-W > 現在のウィンドウの幅を N (デフォルト 1) だけ大きくします。
:vert[ical] res[ize] [N] :vertical-resize CTRL-W_bar CTRL-W | 現在のウィンドウの幅を N (デフォルト: 最大可能な幅) に設定します。
マウスを使用してステータスラインを上下にドラッグするか、垂直の区切り線を左右にドラッグすることで、ウィンドウのサイズを変更することもできます。これは、使用されている Vim のバージョンがマウスをサポートし、'mouse' オプションが有効になっている場合にのみ機能します。
オプション 'winheight' ('wh') は、現在のウィンドウの最小ウィンドウ高さを設定するために使用されます。このオプションは、別のウィンドウが現在のウィンドウになるたびに使用されます。オプションが '0' の場合、無効になります。'winheight' を非常に大きな値 (例: '9999') に設定すると、現在のウィンドウが常に利用可能なスペース全体を埋めるようになります。快適に編集できるように、適切な値 (例: '10') に設定してください。
同等の 'winwidth' ('wiw') オプションは、現在のウィンドウの最小幅を設定するために使用されます。
オプション 'equalalways' ('ea') が設定されている場合、ウィンドウの分割または閉じられた後に、すべてのウィンドウが自動的に同じサイズになります。このオプションを設定しない場合、ウィンドウを分割すると、現在のウィンドウのサイズが縮小され、他のウィンドウは同じままになります。ウィンドウを閉じると、余分な行は上のウィンドウに与えられます。
'eadirection' オプションは、'equalalways' オプションが適用される方向を制限します。デフォルトの "both" では、両方向でサイズが変更されます。値が "ver" の場合、ウィンドウの高さのみが均等化されます。垂直に分割されたウィンドウを手動でサイズ変更し、この幅を維持したい場合に使用します。同様に、"hor" を指定すると、ウィンドウの幅のみが均等化されます。
オプション 'cmdheight' ('ch') は、コマンドラインの高さを設定するために使用されます。長いメッセージの hit-enter プロンプトが煩わしい場合は、このオプションを 2 または 3 に設定してください。
ウィンドウが1つしかない場合、そのウィンドウのサイズを変更すると、コマンドラインの高さも変更されます。ウィンドウが複数ある場合、現在のウィンドウのサイズを変更すると、その下のウィンドウの高さも変更されます (場合によっては上のウィンドウも変更されます)。
ウィンドウの最小の高さと幅は、'winminheight' および 'winminwidth' で設定します。これらは固定値であり、ウィンドウがこれより小さくなることはありません。
WinScrolled と WinResized の自動コマンド
win-scrolled-resized
ウィンドウサイズの変更を通知したい場合は、WinResized 自動コマンドイベントを使用できます。ウィンドウ内のテキストが垂直または水平にスクロールしたときに通知を受けたい場合は、WinScrolled 自動コマンドイベントを使用できます。これはウィンドウサイズの変更時にもトリガーされます。例外として、'incsearch' によってテキストがスクロールされた場合は、これらのイベントはトリガーされません。WinResized-event
WinResized イベントは、ディスプレイの更新後にトリガーされ、その時点で複数のウィンドウのサイズが変更されている可能性があります。最後にサイズが変更されてから変更されたウィンドウの ID のリストは、v:event.windows 変数に提供されます。例:[1003, 1006] WinScrolled-event
WinScrolled イベントは、WinResized の後にトリガーされ、ウィンドウがスクロールされた場合にもトリガーされます。これは、垂直方向(ウィンドウの上部にあるテキストが変更された場合)または水平方向('wrap' がオフの場合、または最初の行の最初の表示部分が変更された場合)の場合があります。WinScrolledWinResized よりもはるかに多くトリガーされるため、編集が少し遅くなる可能性があることに注意してください。
WinScrolled によって提供される情報は、変更があった各ウィンドウの辞書であり、ウィンドウ ID をキーとして使用し、キー "all" で変更の合計数を持ちます。v:event の値の例
{
   all: {width: 0, height: 2, leftcol: 0, skipcol: 0, topline: 1, topfill: 0},
   1003: {width: 0, height: -1, leftcol: 0, skipcol: 0, topline: 0, topfill: 0},
   1006: {width: 0, height: 1, leftcol: 0, skipcol: 0, topline: 1, topfill: 0},
}
「all」エントリには、個々のウィンドウの絶対値が累積されていることに注意してください。
何が変更されたかに関する詳細情報が必要な場合、またはイベントを「デバウンス」(処理が多すぎるのを避けるためにすべてのイベントを処理しない)したい場合は、winlayout() 関数と getwininfo() 関数を使用するとよいでしょう。
WinScrolledWinResized は、最初の自動コマンドが追加されたときはトリガーされず、最初のスクロールまたはサイズ変更の後でのみトリガーされます。別のタブページに切り替えるときにトリガーされる場合があります。
実行されるコマンドは、ウィンドウのサイズやスクロールの変更を引き起こさないことが期待されます。これが起こった場合、イベントはすぐに再びトリガーされます。言い換えれば、イベントをトリガーする直前に、現在のサイズとスクロール位置が保存され、変更があったかどうかを判断するために使用されます。

7. 引数およびバッファリストコマンド buffer-list

args リスト buffer リスト 意味
1. :[N]argument [N] 11. :[N]buffer [N] N番目の引数/バッファへ 2. :[N]next [file ..] 12. :[N]bnext [N] N番目の次の引数/バッファへ 3. :[N]Next [N] 13. :[N]bNext [N] N番目の前の引数/バッファへ 4. :[N]previous [N] 14. :[N]bprevious [N] N番目の前の引数/バッファへ 5. :rewind / :first 15. :brewind / :bfirst 最初の引数/バッファへ 6. :last 16. :blast 最後の引数/バッファへ 7. :all 17. :ball すべての引数/バッファを編集 18. :unhide ロードされたすべてのバッファを編集 19. :[N]bmod [N] N番目の変更されたバッファへ
分割 & args リスト 分割 & buffer リスト 意味
21. :[N]sargument [N] 31. :[N]sbuffer [N] 分割 + N番目の引数/バッファへ 22. :[N]snext [file ..] 32. :[N]sbnext [N] 分割 + N番目の次の引数/バッファへ 23. :[N]sNext [N] 33. :[N]sbNext [N] 分割 + N番目の前の引数/バッファへ 24. :[N]sprevious [N] 34. :[N]sbprevious [N] 分割 + N番目の前の引数/バッファへ 25. :srewind / :sfirst 35. :sbrewind / :sbfirst 分割 + 最初の引数/バッファへ 26. :slast 36. :sblast 分割 + 最後の引数/バッファへ 27. :sall 37. :sball すべての引数/バッファを編集 38. :sunhide ロードされたすべてのバッファを編集 39. :[N]sbmod [N] 分割 + N番目の変更されたバッファへ
40. :args 引数リスト 41. :buffers バッファリスト
[N]の意味はコマンドによって異なります。[N]は2/12/22/32、3/13/23/33、および4/14/24/34で前後に移動するバッファの数です。[N]は、1および21の現在の引数をデフォルトとする引数番号です。[N]は、11および31の現在のバッファをデフォルトとするバッファ番号です。[N]は、19および39のカウントです。
注: ":next" は、Viとの互換性のためにファイル名のリストを受け入れる必要があるため、例外です。

引数リストと複数のウィンドウ

引数リスト内の現在の位置は、ウィンドウごとに異なる場合があります。":e file" を実行すると、引数リスト内の位置は同じままですが、その位置にあるファイルを編集しているわけではないことに注意してください。これを示すために、ファイルメッセージ(およびタイトルがある場合はタイトル)には、「(file (N) of M)」と表示されます。ここで、「(N)」はファイルリスト内の現在の位置であり、「M」はファイルリスト内のファイル数です。
引数リスト内のすべてのエントリは、バッファリストに追加されます。したがって、":bnext" のようなバッファリストコマンドを使用してアクセスすることもできます。
:[N]al[l][!] [N] :al :all :sal :sall :[N]sal[l][!] [N] 各引数に対して1つのウィンドウを開くように画面を再配置します。他のすべてのウィンドウは閉じられます。カウントが指定されている場合、これは開くウィンドウの最大数です。:tab 修飾子を使用すると、引数ごとにタブページが開きます。引数の数が 'tabpagemax' よりも多い場合、それ以降の引数は最後のタブページに分割ウィンドウとして表示されます。'hidden' オプションが設定されている場合、閉じられたウィンドウ内のすべてのバッファは非表示になります。'hidden' が設定されておらず、'autowrite' オプションが設定されている場合、変更されたバッファは書き込まれます。それ以外の場合、変更されたバッファを持つウィンドウは、[!] が指定されない限り削除されません。この場合、ウィンドウは非表示になります。ただし、変更されたバッファは破棄されないため、変更が失われることはありません。[N] は、開くウィンドウの最大数です。'winheight' は、開くウィンドウの数も制限します(:vertical が先頭に付いている場合は 'winwidth')。ここでの新しいウィンドウでは、Buf/Win Enter/Leave 自動コマンドは実行されません。これらは、実際にウィンドウに入ったときにのみ実行されます。このコマンドの実行中に自動コマンドがウィンドウレイアウトを変更すると、エラーが発生します。E249
:[N]sa[rgument][!] [++opt] [+cmd] [N] :sa :sargument ":split | argument [N]" の短縮形:ウィンドウを分割し、N番目の引数に移動します。ただし、そのような引数がない場合、ウィンドウは分割されません。++opt および +cmd も参照してください。
:[N]sn[ext][!] [++opt] [+cmd] [file ..] :sn :snext ":split | [N]next" の短縮形:ウィンドウを分割し、N番目の次の引数に移動します。ただし、次のファイルがない場合、ウィンドウは分割されません。++opt および +cmd も参照してください。
:[N]spr[evious][!] [++opt] [+cmd] [N] :spr :sprevious :[N]sN[ext][!] [++opt] [+cmd] [N] :sN :sNext ":split | [N]Next" の短縮形:ウィンドウを分割し、N番目の前の引数に移動します。ただし、前のファイルがない場合、ウィンドウは分割されません。++opt および +cmd も参照してください。
:sre :srewind :sre[wind][!] [++opt] [+cmd] ":split | rewind" の短縮形:ウィンドウを分割し、最初の引数に移動します。ただし、引数リストがない場合、ウィンドウは分割されません。++opt および +cmd も参照してください。
:sfir :sfirst :sfir[st] [++opt] [+cmd] ":srewind" と同じです。
:sla :slast :sla[st][!] [++opt] [+cmd] ":split | last" の短縮形:ウィンドウを分割し、最後の引数に移動します。ただし、引数リストがない場合、ウィンドウは分割されません。++opt および +cmd も参照してください。
:dr :drop :dr[op] [++opt] [+cmd] {file} .. 最初の{file}をウィンドウで編集します。
ファイルがすでにウィンドウで開いている場合は、そのウィンドウに切り替えます。
ファイルがウィンドウで開いていない場合は、現在のウィンドウでファイルを編集します。現在のバッファが破棄できない場合は、最初にウィンドウが分割されます。
引数リストにない、または全幅でないウィンドウは、可能な限り閉じられます。:next コマンドと同様に、引数リストが設定されます。このコマンドの目的は、Vimに別のファイルを編集させたいプログラム(デバッガーなど)から使用できることです。:tab 修飾子を使用すると、各引数がタブページで開かれます。最後のウィンドウが空の場合は、そのウィンドウが使用されます。++opt および +cmd も参照してください。

8. すべてのバッファまたはウィンドウでコマンドを実行する list-repeat

:windo
:[range]windo {cmd}フォーカス可能なウィンドウ、または指定されたウィンドウ番号の[範囲]内のウィンドウに対してのみ、{cmd}を実行します。これは次のように機能します
CTRL-W t
:{cmd}
CTRL-W w
:{cmd}
etc.
これは現在のタブページでのみ動作します。1つのウィンドウでエラーが検出された場合、それ以降のウィンドウはアクセスされません。最後のウィンドウ(またはエラーが発生したウィンドウ)が現在のウィンドウになります。{cmd} には、複数のコマンドを連結するための '|' を含めることができます。{cmd} は、ウィンドウを開いたり閉じたり、並べ替えたりしてはなりません。
:tabdo:argdo:bufdo:cdo:ldo:cfdo、および :lfdo も参照してください。
:bufdo
:[range]bufdo[!] {cmd} バッファリスト内の各バッファ、または[範囲]が指定されている場合は、バッファ番号が[範囲]内にあるバッファに対してのみ、{cmd} を実行します。これは次のように機能します
:bfirst
:{cmd}
:bnext
:{cmd}
etc.
カレントファイルが破棄できず、[!] が存在しない場合、コマンドは失敗します。あるバッファでエラーが検出されると、それ以降のバッファは訪問されません。非表示のバッファはスキップされます。最後のバッファ(またはエラーが発生した場所)がカレントバッファになります。{cmd}には複数のコマンドを連結するための'|'を含めることができます。{cmd}は、バッファを削除したり、バッファリストにバッファを追加したりしてはいけません。注: このコマンドの実行中、構文自動コマンドイベントは'eventignore'に追加されることで無効化されます。これにより、各バッファの編集が大幅に高速化されます。
:tabdo:argdo:windo:cdo:ldo:cfdo:lfdoも参照してください。
:windo set nolist foldcolumn=0 | normal! zn
これは、すべてのウィンドウで'list'オプションをリセットし、折り畳みを無効にします。
:bufdo set fileencoding= | update
これは、各バッファの'fileencoding'をリセットし、バッファが変更された場合は書き込みます。その結果、すべてのバッファは(変換が成功した場合)'encoding'エンコーディングを使用します。

9. カーソル下のタグまたはファイル名 window-tag

:sta :stag :sta[g][!] [tagname] ":tag[!] [tagname]" を実行し、見つかったタグ用にウィンドウを分割します。:tag も参照してください。
CTRL-W ] CTRL-W_] CTRL-W_CTRL-] CTRL-W CTRL-] カレントウィンドウを2つに分割します。カーソル下の識別子をタグとして使用し、新しい上部のウィンドウでジャンプします。ビジュアルモードでは、ビジュアルで選択したテキストをタグとして使用します。新しいウィンドウをNの高さにします。
CTRL-W_g]
CTRL-W g ] カレントウィンドウを2つに分割します。カーソル下の識別子をタグとして使用し、新しい上部のウィンドウで ":tselect" を実行します。ビジュアルモードでは、ビジュアルで選択したテキストをタグとして使用します。新しいウィンドウをNの高さにします。
CTRL-W_g_CTRL-]
CTRL-W g CTRL-] カレントウィンドウを2つに分割します。カーソル下の識別子をタグとして使用し、新しい上部のウィンドウで ":tjump" を実行します。ビジュアルモードでは、ビジュアルで選択したテキストをタグとして使用します。新しいウィンドウをNの高さにします。
CTRL-W f CTRL-W_f CTRL-W_CTRL-F CTRL-W CTRL-F カレントウィンドウを2つに分割します。カーソル下のファイル名を編集します。":split gf" のようですが、ファイルが存在しない場合はウィンドウは分割されません。'path'変数をファイルを探すディレクトリ名のリストとして使用します。また、カレントファイルのパスもファイル名の検索に使用されます。名前が「type://machine/path」のようなハイパーテキストリンクの場合、「/path」のみが使用されます。カウントが指定された場合、カウント番目に一致するファイルが編集されます。
CTRL-W F CTRL-W_F
カレントウィンドウを2つに分割します。カーソル下のファイル名を編集し、ファイル名に続く行番号にジャンプします。行番号の取得方法の詳細については、gFを参照してください。
CTRL-W gf CTRL-W_gf
新しいタブページを開き、カーソル下のファイル名を編集します。"tab split" と "gf" のようですが、ファイルが存在しない場合、新しいタブページは作成されません。
CTRL-W gF CTRL-W_gF
新しいタブページを開き、カーソル下のファイル名を編集し、ファイル名に続く行番号にジャンプします。"tab split" と "gF" のようですが、ファイルが存在しない場合、新しいタブページは作成されません。
CTRL-W gt CTRL-W_gt
次のタブページに移動します。gtと同じです。
CTRL-W gT CTRL-W_gT
前のタブページに移動します。gTと同じです。
CTRL-W_CTRL-I: カーソル下のキーワードを含むインクルードファイル用にウィンドウを開くも参照してください。

10. プレビューウィンドウ preview-window

プレビューウィンドウは、別のファイルを表示(プレビュー)するための特別なウィンドウです。通常、インクルードファイルや関数の定義を表示するために使用される小さなウィンドウです。
(タブページごとに)プレビューウィンドウは1つしか存在できません。これは以下のいずれかのコマンドで作成されます。'previewheight'オプションを設定すると、プレビューウィンドウが開かれたときの高さを指定できます。プレビューウィンドウを認識できるように、'previewwindow'オプションがプレビューウィンドウに設定されます。他のウィンドウを開閉するときに同じ高さを維持するには、'winfixheight'オプションが設定されます。
:pta :ptag :pta[g][!] [tagname] ":tag[!] [tagname]" を実行し、カレントバッファまたはカーソル位置を変更せずに、見つかったタグを「プレビュー」ウィンドウに表示します。「プレビュー」ウィンドウがすでに存在する場合は、(ヘルプウィンドウと同様に)再利用されます。新しいウィンドウが開かれた場合は、ウィンドウの高さに'previewheight'が使用されます。:tagも参照してください。例については以下を参照してください。CursorHold-example :tagとの小さな違い:[tagname]がすでに表示されているタグと等しい場合、一致するタグリスト内の位置はリセットされません。これにより、:ptnextの後にCursorHoldの例が機能します。
CTRL-W z CTRL-W_z
CTRL-W CTRL-Z CTRL-W_CTRL-Z :pc :pclose :pc[lose][!] 現在開いている「プレビュー」ウィンドウをすべて閉じます。'hidden'オプションが設定されている場合、またはバッファが変更されていて、[!]が使用されている場合、バッファは非表示になります(別のウィンドウで編集している場合を除く)。いずれかの「プレビュー」バッファを閉じることができない場合、コマンドは失敗します。:closeも参照してください。
:pp :ppop :[count]pp[op][!] プレビューウィンドウで ":[count]pop[!]" を実行します。:pop:ptagを参照してください。
CTRL-W } CTRL-W_}
カーソル下の識別子をタグとして使用し、その上で :ptag を実行します。新しいプレビューウィンドウ(必要な場合)をNの高さにします。Nが指定されていない場合、'previewheight'が使用されます。
CTRL-W g } CTRL-W_g}
カーソル下の識別子をタグとして使用し、その上で :ptjump を実行します。新しいプレビューウィンドウ(必要な場合)をNの高さにします。Nが指定されていない場合、'previewheight'が使用されます。
:ped :pedit :ped[it][!] [++opt] [+cmd] {file} プレビューウィンドウで{file}を編集します。プレビューウィンドウは、:ptagと同じように開きます。カレントウィンドウとカーソル位置は変更されません。便利な例
:pedit +/fputc /usr/include/stdio.h
:ps :psearch :[range]ps[earch][!] [count] [/]pattern[/] :ijumpのように動作しますが、プレビューウィンドウで見つかった一致を表示します。プレビューウィンドウは、:ptagと同じように開きます。カレントウィンドウとカーソル位置は変更されません。便利な例
:psearch popen
:ptagコマンドと同様に、これを使用してカーソル下の単語に関する情報を自動的に表示できます。:ptagを使用するよりもスマートではありませんが、タグファイルは必要なく、システムインクルードファイル内の一致も検出します。例
:au! CursorHold *.[ch] ++nested exe "silent! psearch " .. expand("<cword>")
警告: これは遅くなる可能性があります。
CursorHold-example
:au! CursorHold *.[ch] ++nested exe "silent! ptag " .. expand("<cword>")
これにより、カーソルが'updatetime'で設定された時間移動していない場合、カーソル下のキーワードに対して ":ptag" が実行されます。"++nested" は他の自動コマンドを実行させ、プレビューウィンドウで構文強調表示が機能するようにします。"silent!" は、タグが見つからなかったときのエラーメッセージを回避します。CursorHoldも参照してください。これを再度無効にするには
:au! CursorHold
見つかったタグを強調表示し、カーソル下に単語がない場合は ":ptag" を回避し、他のいくつかのことを行うのが良い追加機能です
:au! CursorHold *.[ch] ++nested call PreviewWord()
:func PreviewWord()
:  if &previewwindow                        " don't do this in the preview window
:    return
:  endif
:  let w = expand("<cword>")                " get the word under cursor
:  if w =~ '\a'                        " if the word contains a letter
:
:    " Delete any existing highlight before showing another tag
:    silent! wincmd P                        " jump to preview window
:    if &previewwindow                " if we really get there...
:      match none                        " delete existing highlight
:      wincmd p                        " back to old window
:    endif
:
:    " Try displaying a matching tag for the word under the cursor
:    try
:       exe "ptag " .. w
:    catch
:      return
:    endtry
:
:    silent! wincmd P                        " jump to preview window
:    if &previewwindow                " if we really get there...
:         if has("folding")
:           silent! .foldopen                " don't want a closed fold
:         endif
:         call search("$", "b")                " to end of previous line
:         let w = substitute(w, '\\', '\\\\', "")
:         call search('\<\V' .. w .. '\>')        " position cursor on match
:         " Add a match highlight to the word at this position
:      hi previewWord term=bold ctermbg=green guibg=green
:         exe 'match previewWord "\%' .. line(".") .. 'l\%' .. col(".") .. 'c\k*"'
:      wincmd p                        " back to old window
:    endif
:  endif
:endfun

11. 非表示バッファの使用 buffer-hidden

非表示バッファはウィンドウには表示されませんが、メモリにロードされたままです。これにより、ウィンドウに別のバッファを取得するたびにファイルを読み書きする必要なしに、ファイルからファイルへジャンプできます。
:buffer-!
オプション'hidden''hid')が設定されている場合、破棄されたバッファは、別のファイルの編集を開始するすべてのコマンド(":edit"、":next"、":tag"など)に対して保持されます。バッファリストを移動するコマンドは、'hidden'オプションが設定されていなくても、カレントバッファを非表示にする場合があります。これは、バッファが変更されたが、ウィンドウから強制的に('!'で)削除され、'autowrite'がオフになっているか、バッファを書き込めない場合に発生します。
非表示バッファを非表示でなくするには、任意のコマンドで編集を開始するか、":bdelete"コマンドで削除します。
'hidden'はグローバルであり、すべてのバッファに使用されます。'bufhidden'オプションを使用して、特定のバッファの例外を作成できます。これは次の値を取ることができます:<empty> 'hidden'の値を使用します。hide 'hidden'が設定されていない場合でも、このバッファを非表示にします。unload 'hidden'が設定されている場合でも、このバッファを非表示にせずにアンロードします。delete バッファを削除します。
hidden-quit
非表示の変更されたバッファがあるときにVimを終了しようとすると、エラーメッセージが表示され、Vimはそのバッファをカレントバッファにします。その後、このバッファを書き込む(":wq")か、書き込まずに終了する(":q!")かを決定できます。注意してください:さらに非表示の変更されたバッファが存在する可能性があります!
バッファは非表示にすることもできます。これは、バッファが存在するが、バッファのリストにはないことを意味します。unlisted-buffer
:files[!] [flags] :files
:buffers[!] [flags] :buffers :ls :ls[!] [flags] すべてのバッファを表示します。例
1 #h "/test/text" line 1
2u "asdf" line 0
3 %a + "version.c" line 1
[!]が含まれている場合、リストには非表示バッファが表示されます(この場合、「非表示」という用語は少し紛らわしいです...)。
各バッファには一意の番号があります。その番号は変更されないため、常に ":buffer N" または "N CTRL-^" を使用して、特定のバッファに移動できます。ここで、Nはバッファ番号です。
インジケータ(同じ列の文字は互いに排他的です):u 非表示のバッファ([!] が使用されている場合にのみ表示されます)unlisted-buffer % カレントウィンドウのバッファ # ":e #" および CTRL-^ の代替バッファ a アクティブなバッファ:ロードされ、表示されています h 非表示のバッファ:ロードされていますが、現在はウィンドウに表示されていません hidden-buffer - 'modifiable'がオフのバッファ = 読み取り専用バッファ R 実行中のジョブを持つターミナルバッファ F 完了したジョブを持つターミナルバッファ ? ジョブのないターミナルバッファ::terminal NONE + 変更されたバッファ x 読み取りエラーのあるバッファ
[flags] は、以下の文字の組み合わせで、リスト表示するバッファを制限できます。 + 変更されたバッファ - 'modifiable' オプションがオフのバッファ = 読み取り専用バッファ a アクティブなバッファ u リストにないバッファ ("!" を上書き) h 非表示バッファ x 読み込みエラーが発生したバッファ % カレントバッファ # 代替バッファ R 実行中のジョブがあるターミナルバッファ F 完了したジョブがあるターミナルバッファ t 最終使用時刻を表示し、バッファをソートします。 フラグを組み合わせると、「and」で結合されます。例えば、h+ は変更された非表示バッファ、a+ は変更されたアクティブなバッファとなります。
:filter を使用する場合、パターンは表示されるバッファ名と照合されます。例:
filter /\.vim/ ls
:bad :badd :bad[d] [+lnum] {fname} ファイル名 {fname} をバッファリストに追加します。まだリストにない場合は、ロードしません。バッファが以前に削除された(消去ではない)場合、再びリストに表示されます。"lnum" が指定されている場合は、バッファに最初に入ったときにカーソルがその行に移動します。+ の後の他のコマンドは無視されることに注意してください。
:balt
:balt [+lnum] {fname} :badd と同様ですが、カレントウィンドウの代替ファイルを {fname} に設定します。
:[N]bd[elete][!] :bd :bdel :bdelete E516 :bd[elete][!] [N] バッファ [N] (デフォルト: カレントバッファ) をアンロードし、バッファリストから削除します。バッファが変更されている場合、[!] が指定されていない限り、このコマンドは失敗します。その場合、変更は失われます。ファイルは影響を受けません。このバッファのウィンドウはすべて閉じられます。バッファ [N] がカレントバッファの場合、別のバッファが代わりに表示されます。これは、ロードされたバッファを指すジャンプリスト内の最も新しいエントリです。実際には、バッファは完全に削除されず、バッファリストから削除され unlisted-buffer になり、バッファのオプション値、変数、マッピング/省略形がクリアされます。例
:.,$-bdelete   "delete buffers from the current one to
               " last but one
:%bdelete      " delete all buffers
:bdelete[!] {bufname} E93 E94 ":bdelete[!] [N]" と同様ですが、名前で指定されたバッファを使用します。{bufname} を参照してください。
:bdelete[!] N1 N2 ... バッファ N1, N2 などに対して ":bdelete[!]" を実行します。引数にはバッファ番号またはバッファ名を指定できます(ただし、数値であるバッファ名は指定できません)。バッファ名にスペースが含まれている場合は、その前にバックスラッシュを挿入してください。
:N,Mbdelete[!] 範囲 N から M までのすべてのバッファに対して ":bdelete[!]" を実行します。inclusiveを参照してください。
:[N]bw[ipeout][!] :bw :bwipe :bwipeout E517 :bw[ipeout][!] {bufname} :N,Mbw[ipeout][!] :bw[ipeout][!] N1 N2 ... :bdelete と同様ですが、バッファを実際に削除します。バッファに関連するすべてのものが失われます。このバッファ内のすべてのマークが無効になり、オプション設定が失われ、ジャンプリストとタグスタックデータが消去されます。何をしているのかを理解している場合を除き、これを使用しないでください。例
:.+,$bwipeout   " wipe out all buffers after the current
                " one
:%bwipeout            " wipe out all buffers
:[N]bun[load][!] :bun :bunload E515 :bun[load][!] [N] バッファ [N] (デフォルト: カレントバッファ) をアンロードします。このバッファに割り当てられたメモリは解放されます。バッファはバッファリストに残ります。バッファが変更されている場合、[!] が指定されていない限り、このコマンドは失敗します。その場合、変更は失われます。このバッファのウィンドウはすべて閉じられます。バッファ [N] がカレントバッファの場合、別のバッファが代わりに表示されます。これは、ロードされたバッファを指すジャンプリスト内の最も新しいエントリです。
:bunload[!] {bufname} ":bunload[!] [N]" と同様ですが、名前で指定されたバッファを使用します。{bufname} も参照してください。
:N,Mbunload[!] 範囲 N から M までのすべてのバッファに対して ":bunload[!]" を実行します。inclusiveを参照してください。
:bunload[!] N1 N2 ... バッファ N1, N2 などに対して ":bunload[!]" を実行します。引数にはバッファ番号またはバッファ名を指定できます(ただし、数値であるバッファ名は指定できません)。バッファ名にスペースが含まれている場合は、その前にバックスラッシュを挿入してください。
:[N]b[uffer][!] [+cmd] [N] :b :bu :buf :buffer E86 バッファリストからバッファ [N] を編集します。[N] が指定されていない場合、カレントバッファが編集されたままになります。[!] については :buffer-! を参照してください。これは、'buflisted' フラグを設定せずに、バッファリストにないバッファも編集します。+cmd も参照してください。
:[N]b[uffer][!] [+cmd] {bufname} {bufname}
バッファリストから {bufname} のバッファを編集します。リスト内のバッファ内で一意である限り、部分名も機能します。名前が数値であるバッファは、その名前で参照できないことに注意してください。代わりにバッファ番号を使用してください。バッファ名にスペースが含まれている場合は、その前にバックスラッシュを挿入してください。[!] については :buffer-! を参照してください。これは、'buflisted' フラグを設定せずに、バッファリストにないバッファも編集します。+cmd も参照してください。
:[N]sb[uffer] [+cmd] [N] :sb :sbuffer ウィンドウを分割し、バッファリストからバッファ [N] を編集します。[N] が指定されていない場合、カレントバッファが編集されます。分割する際には、'switchbuf' の "useopen" 設定が尊重されます。これは、'buflisted' フラグを設定せずに、バッファリストにないバッファも編集します。+cmd も参照してください。
:[N]sb[uffer] [+cmd] {bufname} ウィンドウを分割し、バッファリストから {bufname} のバッファを編集します。これは、'buflisted' フラグを設定せずに、バッファリストにないバッファも編集します。注意: もしあなたがやりたいことがバッファを分割し、別の名前でコピーすることであるならば、この方法でそれを行うことができます。
:w foobar | sp #
+cmd も参照してください。
:[N]bn[ext][!] [+cmd] [N] :bn :bnext [b E87 バッファリスト内の [N] 番目の次のバッファに移動します。[N] のデフォルトは 1 です。バッファリストの末尾でラップアラウンドします。[!] については :buffer-! を参照してください。+cmd も参照してください。ヘルプバッファにいる場合、次のヘルプバッファ(存在する場合)に移動します。同様に、通常の(ヘルプではない)バッファにいる場合、次の通常のバッファに移動します。これは、ヘルプを起動した場合、コード/テキストバッファの閲覧を妨げないようにするためです。次の 3 つのコマンドも同様に機能します。
:sbn :sbnext :[N]sbn[ext] [+cmd] [N] ウィンドウを分割し、バッファリスト内の [N] 番目の次のバッファに移動します。バッファリストの末尾でラップアラウンドします。'switchbuf' を使用します。+cmd も参照してください。
:[N]bN[ext][!] [+cmd] [N] :bN :bNext :bp :bprevious ]b E88 :[N]bp[revious][!] [+cmd] [N] バッファリスト内の [N] 番目の前のバッファに移動します。[N] のデフォルトは 1 です。バッファリストの先頭でラップアラウンドします。[!] については :buffer-! を、'switchbuf' を参照してください。+cmd も参照してください。
:[N]sbN[ext] [+cmd] [N] :sbN :sbNext :sbp :sbprevious :[N]sbp[revious] [+cmd] [N] ウィンドウを分割し、バッファリスト内の [N] 番目の前のバッファに移動します。バッファリストの先頭でラップアラウンドします。'switchbuf' を使用します。+cmd も参照してください。
:br[ewind][!] [+cmd] :br :bre :brewind [B バッファリストの最初のバッファに移動します。バッファリストが空の場合、最初のリストにないバッファに移動します。[!] については :buffer-! を参照してください。
:bf[irst] [+cmd] :bf :bfirst :brewind と同じです。+cmd も参照してください。
:sbr[ewind] [+cmd] :sbr :sbrewind ウィンドウを分割し、バッファリストの最初のバッファに移動します。バッファリストが空の場合、最初のリストにないバッファに移動します。'switchbuf' オプションを尊重します。+cmd も参照してください。
:sbf[irst] [+cmd] :sbf :sbfirst ":sbrewind" と同じです。
:bl[ast][!] [+cmd] :bl :blast ]B バッファリストの最後のバッファに移動します。バッファリストが空の場合、最後のリストにないバッファに移動します。[!] については :buffer-! を参照してください。
:sbl[ast] [+cmd] :sbl :sblast ウィンドウを分割し、バッファリストの最後のバッファに移動します。バッファリストが空の場合、最後のリストにないバッファに移動します。'switchbuf' オプションを尊重します。
:[N]bm[odified][!] [+cmd] [N] :bm :bmodified E84 [N] 番目の次の変更されたバッファに移動します。注意: このコマンドは、リストにないバッファも検索します。変更されたバッファがない場合、コマンドは失敗します。
:[N]sbm[odified] [+cmd] [N] :sbm :sbmodified ウィンドウを分割し、[N] 番目の次の変更されたバッファに移動します。'switchbuf' オプションを尊重します。注意: このコマンドは、バッファリストにないバッファも検索します。
:[N]unh[ide] [N] :unh :unhide :sun :sunhide :[N]sun[hide] [N] バッファリストにロードされている各バッファに対して、1つのウィンドウを開くように画面を再配置します。カウントが指定された場合、これは開くウィンドウの最大数です。
:[N]ba[ll] [N] :ba :ball :sba :sball :[N]sba[ll] [N] バッファリストの各バッファに対して、1つのウィンドウを開くように画面を再配置します。カウントが指定された場合、これは開くウィンドウの最大数です。'winheight'も開くウィンドウの数を制限します(:verticalが先頭に付いている場合は'winwidth')。バッファ/ウィンドウのEnter/Leaveの自動コマンドは、ここでは新しいウィンドウに対して実行されません。それらは実際にウィンドウに入ったときにのみ実行されます。:tab修飾子が使用された場合、新しいウィンドウは'tabpagemax'まで新しいタブで開かれます。
注意: 上記の別のバッファの編集を開始するすべてのコマンドは、'readonly'フラグを元の状態のまま保持します。これは、ファイルを読み込むたびに'readonly'フラグを設定する":edit"コマンドとは異なります。

12. 特殊な種類のバッファ special-buffers

バッファは、ファイルの内容を保持する代わりに、他の目的にも使用できます。バッファの動作を変更するために、いくつかのオプションを設定できます。'bufhidden'バッファがウィンドウに表示されなくなったときの動作。'buftype'これはどのような種類のバッファか。'swapfile'バッファにスワップファイルがあるかどうか。'buflisted'バッファがバッファリストに表示されるかどうか。
いくつかの便利なバッファの種類
quickfix エラーリストまたはロケーションリストを保持するために使用されます。:cwindowおよび:lwindowを参照してください。このコマンドは、'buftype'オプションを"quickfix"に設定します。これを変更するべきではありません!'swapfile'はオフです。
help ヘルプファイルを含みます。:helpコマンドでのみ作成されます。ヘルプバッファを示すフラグは内部のものであり、変更することはできません。'buflisted'オプションはヘルプバッファに対してリセットされます。
terminal ターミナルウィンドウバッファです。 terminalを参照してください。ジョブが終了するまで、コンテンツを読み書きしたり変更したりすることはできません。
directory ディレクトリの内容を表示します。ファイルエクスプローラープラグインで使用できます。バッファはこれらの設定で作成されます。
:setlocal buftype=nowrite
:setlocal bufhidden=delete
:setlocal noswapfile
バッファ名はディレクトリの名前であり、:cdコマンドを使用すると調整されます。
scratch-buffer
scratch いつでも破棄できるテキストを保持します。ウィンドウを閉じるときに保持されますが、明示的に削除する必要があります。設定
:setlocal buftype=nofile
:setlocal bufhidden=hide
:setlocal noswapfile
バッファ名を使用してバッファを識別できます。意味のある名前を付けると便利です。
unlisted-buffer
unlisted バッファはバッファリストにありません。通常の編集には使用されませんが、ヘルプファイルの表示、ファイル名やマークの記憶に使用されます。":bdelete"コマンドもこのオプションを設定するため、バッファは完全には削除されません。設定
:setlocal nobuflisted
メイン
コマンドインデックス
クイックリファレンス