タブページ

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


複数のタブページでウィンドウを編集します。 tabpage
複数のタブページを使用するために追加されたコマンドについて、ここで説明します。さらに、複数のタブページと組み合わせて使用した場合に異なる動作をするコマンドについても説明します。

1. はじめに tab-page-intro

タブページは、1つ以上のウィンドウを保持します。タブページを簡単に切り替えることができるため、異なる作業をするために複数のウィンドウの集合を持つことができます。
通常、Vimウィンドウの上部に各タブページに対応したラベルのリストが表示されます。マウスでラベルをクリックすると、そのタブページにジャンプできます。タブページ間を移動する他の方法については、以下を参照してください。
ほとんどのコマンドは、現在のタブページでのみ動作します。これには、CTRL-W コマンド、:windo:all:ball ( :tab 修飾子を使用しない場合) などが含まれます。現在のタブページ以外のタブページを認識するコマンドについては、以下で説明します。
タブは、現在のウィンドウレイアウトを変更せずに、一時的にバッファを編集するのにも適した方法です。新しいタブページを開き、必要な操作を行い、タブページを閉じます。

2. コマンド tab-page-commands

新しいタブページを開く
Vim を起動する際、"vim -p filename ..." は、各ファイル引数を個別のタブページで開きます ('tabpagemax' まで)。-p を参照してください。
GUI 以外のタブページ行でマウスをダブルクリックすると、新しい空のタブページが開きます。クリックした位置の左側に配置されます。最初のクリックで別のタブページが最初に選択され、余分な画面更新が発生する場合があります。
これは、いくつかの GUI バージョン、特に Win32 でも機能します。ただし、ラベルの右側をクリックした場合に限ります。
GUI のタブページ行では、右マウスボタンを使用してメニューを開くことができます。tabline-menu を参照してください。
関連する自動コマンドについては、tabnew-autocmd を参照してください。
:[count]tabe[dit] :tabe :tabedit :tabnew :[count]tabnew 現在のタブページの後に、空のウィンドウを持つ新しいタブページを開きます。[count] が指定された場合、新しいタブページは [count] 番目のタブページの後に表示されます。それ以外の場合は、現在のタブページの後に表示されます。
:tabnew     " opens tabpage after the current one
:.tabnew    " as above
:+tabnew    " opens tabpage after the next tab page
            " note: it is one further than :tabnew
:-tabnew    " opens tabpage before the current
:0tabnew    " opens tabpage before the first one
:$tabnew    " opens tabpage after the last one
:[count]tabe[dit] [++opt] [+cmd] {file} :[count]tabnew [++opt] [+cmd] {file} :edit と同様に、新しいタブページを開き、{file} を編集します。[count] については、上記の :tabnew を参照してください。
:[count]tabf[ind] [++opt] [+cmd] {file} :tabf :tabfind :find と同様に、新しいタブページを開き、'path' 内の {file} を編集します。[count] については、上記の :tabnew を参照してください。
:[count]tab {cmd} :tab
{cmd} を実行し、新しいウィンドウを開く場合は、代わりに新しいタブページを開きます。:diffsplit:diffpatch:execute:normal では機能しません。[count] が指定された場合、新しいタブページは [count] 番目のタブページの後に表示されます。それ以外の場合は、現在のタブページの後に表示されます。例
:tab split            " opens current buffer in new tab page
:tab help gt    " opens tab page with help for "gt"
:.tab help gt   " as above
:+tab help            " opens tab page with help after the next
                " tab page
:-tab help            " opens tab page with help before the
                " current one
:0tab help            " opens tab page with help before the
                " first one
:$tab help            " opens tab page with help after the last
                " one
CTRL-W gf 新しいタブページを開き、カーソル下のファイル名を編集します。CTRL-W_gf を参照してください。
CTRL-W gF 新しいタブページを開き、カーソル下のファイル名を編集し、ファイル名に続く行番号にジャンプします。CTRL-W_gF を参照してください。
タブページを閉じる
タブページの最後のウィンドウを閉じると、タブページも閉じます。ただし、タブページが1つしかない場合は除きます。
マウスを使用する場合:タブページ行が表示されている場合は、右上にある「X」をクリックして、現在のタブページを閉じることができます。カスタムの 'tabline' では、別のものが表示される場合があります。
:tabc :tabclose :tabc[lose][!] 現在のタブページを閉じます。次の場合は、このコマンドは失敗します。
画面上にタブページが1つしかない場合。E784
'hidden' が設定されておらず、[!] が使用されておらず、バッファに変更があり、このバッファに他のウィンドウがない場合。バッファへの変更は書き込まれませんが、失われることはありません。したがって、これは「安全な」コマンドです。
:tabclose   " close the current tab page
:{count}tabc[lose][!] :tabc[lose][!] {count} {count} 番目のタブページを閉じます。上記の :tabclose と同じように失敗します。
:-tabclose            " close the previous tab page
:+tabclose            " close the next tab page
:1tabclose            " close the first tab page
:$tabclose            " close the last tab page
:tabclose -2    " close the 2nd previous tab page
:tabclose +            " close the next tab page
:tabclose 3            " close the third tab page
:tabclose $            " close the last tab page
:tabclose #     " close the last accessed tab page
タブが閉じられると、次のタブページが現在のタブページになります。この動作は、'tabclose' オプションを使用してカスタマイズできます。
:tabo :tabonly :tabo[nly][!] 他のすべてのタブページを閉じます。'hidden' オプションが設定されている場合、閉じられたウィンドウ内のすべてのバッファは非表示になります。'hidden' が設定されておらず、'autowrite' オプションが設定されている場合、変更されたバッファは書き込まれます。それ以外の場合は、変更されたバッファを持つウィンドウは削除されません。ただし、[!] が指定されている場合は、非表示になります。ただし、変更されたバッファが破棄されることはないため、変更が失われることはありません。
:tabonly " close all tab pages except the current one
:tabo[nly][!] {count} {count} 番目のタブページを除くすべてのタブページを閉じます。
:.tabonly            " as above
:-tabonly            " close all tab pages except the previous
                " one
:+tabonly            " close all tab pages except the next one
:1tabonly            " close all tab pages except the first one
:$tabonly            " close all tab pages except the last one
:tabonly -            " close all tab pages except the previous
                " one
:tabonly +2     " close all tab pages except the two next
                " one
:tabonly 1            " close all tab pages except the first one
:tabonly $            " close all tab pages except the last one
:tabonly #            " close all tab pages except the last
                " accessed one
別のタブページに切り替える
マウスを使用する場合:タブページ行が表示されている場合は、タブページのラベルをクリックして、そのタブページに切り替えることができます。ラベルがない場所をクリックすると、次のタブページに移動します。'tabline' を参照してください。
:tabn[ext] :tabn :tabnext gt <C-PageDown> CTRL-<PageDown> <C-PageDown> gt i_CTRL-<PageDown> i_<C-PageDown> 次のタブページに移動します。最後のタブページから最初のタブページに折り返します。
:{count}tabn[ext] :tabn[ext] {count} {count} 番目のタブページに移動します。最初のタブページは番号 1 です。
:-tabnext        " go to the previous tab page
:+tabnext        " go to the next tab page
:+2tabnext        " go to the two next tab page
:1tabnext        " go to the first tab page
:$tabnext        " go to the last tab page
:tabnext $        " as above
:tabnext #        " go to the last accessed tab page
:tabnext -        " go to the previous tab page
:tabnext -1        " as above
:tabnext +        " go to the next tab page
:tabnext +1        " as above
{count}<C-PageDown> {count}gt {count} 番目のタブページに移動します。最初のタブページは番号 1 です。
:tabp[revious] :tabp :tabprevious gT :tabN :tabN[ext] :tabNext CTRL-<PageUp> <C-PageUp> <C-PageUp> i_CTRL-<PageUp> i_<C-PageUp> gT 前のタブページに移動します。最初のタブページから最後のタブページに折り返します。
:tabp[revious] {count} :tabN[ext] {count} {count}<C-PageUp> {count}gT {count} 個前のタブページに移動します。最初のタブページから最後のタブページに折り返します。{count} の使用方法は、タブページ番号として使用される :tabnext とは異なることに注意してください。
:tabr[ewind] :tabfir :tabfirst :tabr :tabrewind :tabfir[st] 最初のタブページに移動します。
:tabl :tablast :tabl[ast] 最後のタブページに移動します。
<C-Tab> CTRL-<Tab> <C-Tab> g<Tab> g<Tab> CTRL-W_g<Tab> CTRL-W g<Tab> 最後にアクセスしたタブページに移動します。
その他のコマンド: :tabs
:tabs タブページと、それらに含まれるウィンドウをリストします。現在のウィンドウには ">" を表示します。変更されたバッファには "+" を表示します。例
タブページ 1
+ tabpage.txt
ex_docmd.c
タブページ 2
> main.c
タブページの並べ替え
:tabm[ove] [N] :tabm :tabmove :[N]tabm[ove] 現在のタブページを N 番目のタブページの後に移動します。現在のタブページを最初のタブページにするには 0 を使用します。N は移動前にカウントされるため、2番目のタブが現在のタブである場合、:tabmove 1:tabmove 2 は効果がありません。N がない場合、タブページは最後に移動します。
:.tabmove        " do nothing
:-tabmove        " move the tab page to the left
:+tabmove        " move the tab page to the right
:0tabmove        " move the tab page to the first
:tabmove 0        " as above
:tabmove        " move the tab page to the last
:$tabmove        " as above
:tabmove $        " as above
:tabmove #        " move the tab page after the last accessed
            " tab page
:tabm[ove] +[N] :tabm[ove] -[N] 現在のタブページを右 (+ の場合) または左 (- の場合) に N 個移動します。
:tabmove -        " move the tab page to the left
:tabmove -1        " as above
:tabmove +        " move the tab page to the right
:tabmove +1        " as above
:Ntabmove を使用して N 番目のタブの背後にタブを移動できることに注意してください。また、:+Ntabmove を使用して N 個移動することもできます。このコンテキストでの +N の意味については、[range] を参照してください。
タブページのループ処理
:tabd :tabdo :[range]tabd[o] {cmd} 各タブページで、または [range] が指定されている場合は、タブページ番号が [range] に含まれるタブページでのみ、{cmd} を実行します。これは、次のように動作します。
:tabfirst
:{cmd}
:tabnext
:{cmd}
etc.
これは、各タブページの現在のウィンドウ内でのみ動作します。1つのタブページでエラーが検出されると、それ以降のタブページは訪問されません。最後のタブページ(またはエラーが発生した場所)が現在のタブページになります。{cmd} には、複数のコマンドを連結するために '|' を含めることができます。{cmd} は、タブページを開いたり閉じたり、並べ替えたりしてはいけません。また、:windo:argdo:bufdo:cdo:ldo:cfdo:lfdoも参照してください。

3. その他の項目 tab-page-other

tabline-menu
GUIのタブページラインにはポップアップメニューがあります。右クリックでアクセスできます。項目は以下のとおりです: Close マウスポインタの下にあるタブページを閉じます。マウスポインタの下にラベルがない場合は、現在のタブページを閉じます。New Tab 空のバッファを編集するタブページを開きます。マウスポインタの左側に表示されます。Open Tab... "New Tab" と同様ですが、さらにファイルセレクタを使用して編集するファイルを選択します。
Diffモードはタブページごとに動作します。1つのタブページ内で複数のファイル間の差分を表示できます。他のタブページでは、他のファイル間の差分を表示できます。
タブページローカルな変数は "t:" で始まります。 tabpage-variable
現在、タブページローカルなオプションは1つだけです: 'cmdheight'.
tabnew-autocmd
TabLeave および TabEnter 自動コマンドイベントを使用して、タブページを切り替えるときに何かを行うことができます。正確な順序は、何をしているかによって異なります。新しいタブページを作成すると、同じバッファ上に新しいウィンドウを作成し、別のバッファを編集する場合と同様に動作します。したがって、":tabnew" は以下をトリガーします: WinLeave 現在のウィンドウを離れる TabLeave 現在のタブページを離れる WinEnter 新しいタブページのウィンドウに入る TabEnter 新しいタブページに入る BufLeave 現在のバッファを離れる BufEnter 新しい空のバッファに入る
別のタブページに切り替える場合、順序は以下のようになります: BufLeave WinLeave TabLeave WinEnter TabEnter BufEnter
新しいタブページに入る時 (:tabnew) 、TabNew は TabEnter の前、WinEnter の後にトリガーされます。

4. 'tabline' の設定 setting-tabline

'tabline' オプションは、タブページラベルが表示される行の外観を指定します。これはGUIタブラインがない場合にのみ使用されます。
'showtabline' オプションを使用して、タブページラベルの行を表示するタイミングを指定できます: 表示しない、複数のタブページがある場合、または常に表示する。
タブページラインのハイライトは、TabLine、TabLineSel、TabLineFillグループで設定されます。 hl-TabLine hl-TabLineSel hl-TabLineFill
変更されたウィンドウを持つタブページには "+" が表示されます。タブページ内のウィンドウ数も表示されます。したがって、"3+" は3つのウィンドウがあり、そのうちの1つに修正されたバッファがあることを意味します。
'tabline' オプションを使用すると、タブページラベルの好みの表示方法を定義できます。これは簡単ではないため、ここに例を示します。
基本については 'statusline' オプションを参照してください。同じ項目を 'tabline' オプションで使用できます。さらに、tabpagebuflist()tabpagenr()tabpagewinnr() 関数が役立ちます。
タブのラベル数は変動するため、オプション全体に式を使用する必要があります。例えば、
:set tabline=%!MyTabLine()
次に、MyTabLine()関数を定義して、すべてのタブページのラベルをリストします。便利な方法は、2つの部分に分割することです。最初に、すべてのタブページを調べてラベルを定義します。次に、各タブページのラベルを取得します。
function MyTabLine()
  let s = ''
  for i in range(tabpagenr('$'))
    " select the highlighting
    if i + 1 == tabpagenr()
      let s ..= '%#TabLineSel#'
    else
      let s ..= '%#TabLine#'
    endif
    " set the tab page number (for mouse clicks)
    let s ..= '%' .. (i + 1) .. 'T'
    " the label is made by MyTabLabel()
    let s ..= ' %{MyTabLabel(' .. (i + 1) .. ')} '
  endfor
  " after the last tab fill with TabLineFill and reset tab page nr
  let s ..= '%#TabLineFill#%T'
  " right-align the label to close the current tab page
  if tabpagenr('$') > 1
    let s ..= '%=%#TabLine#%999Xclose'
  endif
  return s
endfunction
次に、各タブページのラベルを取得するために、MyTabLabel()関数が呼び出されます。
function MyTabLabel(n)
  let buflist = tabpagebuflist(a:n)
  let winnr = tabpagewinnr(a:n)
  return bufname(buflist[winnr - 1])
endfunction
これは、デフォルトに似たタブページラインを作成するだけの単純な例ですが、変更されたバッファに+を追加したり、名前を切り捨てたりすることはありません。十分なスペースがない場合は、ラベルの幅を賢く縮小する必要があります。'columns' オプションで利用可能なスペースを確認してください。

5. 'guitablabel' の設定 setting-guitablabel

GUIのタブページラインが表示される場合、'guitablabel' を使用して、各タブページに表示するラベルを指定できます。'tabline' はタブページライン全体を一度に指定するのとは異なり、'guitablabel' は各ラベルに個別に使用されます。
'guitabtooltip' は非常に似ており、同じラベルのツールチップに使用されます。これはマウスポインタがラベルの上にホバーしたときにのみ表示されるため、通常はより長くなります。ただし、一部のシステムでのみサポートされています。
値の形式については、'statusline' オプションを参照してください。
"%N" 項目は、現在のタブページ番号に使用できます。v:lnum 変数も、オプションが評価されるときにこの番号に設定されます。ファイル名を使用する項目は、タブページの現在のウィンドウを参照します。
構文のハイライトはオプションには使用されないことに注意してください。%T および %X 項目も無視されます。
タブページ番号とバッファ名をラベルに入れる簡単な例
:set guitablabel=%N\ %f
デフォルトの 'guitablabel' に似た例: タブページ内のウィンドウ数と、変更されたバッファがある場合は '+' を表示します
function GuiTabLabel()
  let label = ''
  let bufnrlist = tabpagebuflist(v:lnum)
  " Add '+' if one of the buffers in the tab page is modified
  for bufnr in bufnrlist
    if getbufvar(bufnr, "&modified")
      let label = '+'
      break
    endif
  endfor
  " Append the number of windows in the tab page if more than one
  let wincount = tabpagewinnr(v:lnum, '$')
  if wincount > 1
    let label ..= wincount
  endif
  if label != ''
    let label ..= ' '
  endif
  " Append the buffer name
  return label .. bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
endfunction
set guitablabel=%{GuiTabLabel()}
関数はオプションを設定する前に定義する必要があることに注意してください。そうしないと、関数が不明であるというエラーメッセージが表示されます。
デフォルトのラベルに戻したい場合は、空の文字列を返します。
タブページに固有のものを表示したい場合は、タブページローカル変数を使用すると良いかもしれません。 t:var
メイン
コマンドインデックス
クイックリファレンス