*tabpage.txt*	For Vim バージョン 9.2.  Last change: 2026 May 04


		  VIM リファレンスマニュアル	by Bram Moolenaar


タブページの使い方					*tab-page* *tabpage*

タブページを使うために追加されたコマンドについて説明します。複数のタブページを
開いていると違う働きをするコマンドについても説明します。

1. はじめに			|tab-page-intro|
2. コマンド			|tab-page-commands|
3. その他			|tab-page-other|
4. 'tabline' の設定		|setting-tabline|
5. 'tabpanel' の設定		|setting-tabpanel|
6. 'guitablabel' の設定		|setting-guitablabel|

{|+windows| 機能がコンパイル時に無効になっていると、複数のタブページを使用でき
ません}
{|+tabpanel| 機能がコンパイル時に無効になっていると、|tabpanel| 機能を使用でき
ません}

==============================================================================
1. はじめに						*tab-page-intro*

タブページは複数のウィンドウを持てます。タブページを使うと、作業別のウィンドウ
の集合を簡単に切り替えることができます。

通常、Vim ウィンドウの最上部にタブページを表すラベルの一覧が表示されます。その
ラベルをマウスでクリックすると、そのタブページにジャンプできます。他の方法でも
タブページを移動できます。

ほとんどのコマンドは作業中のタブページ内だけで動作します。|CTRL-W| コマンド
や、|:tab| を前置しない |:windo|、|:all|、|:ball| なども同様です。カレントタブ
ページ以外にも作用するコマンドについては以下で説明しています。

タブページを使うと、一時的なバッファを使用するときに、作業中のウィンドウレイア
ウトを変更しなくてすみます。新しいタブページを開いて、何か作業をし、そのタブ
ページを閉じる、という具合です。

==============================================================================
2. コマンド						*tab-page-commands*

タブページを開くには:

Vim を "vim -p filename ..." と起動すると、それぞれのファイルごとに (最大
'tabpagemax' までの) タブページを開けます。|-p| 参照。

CUI の Vim でタブページラインをダブルクリックすると新しいタブページが作成され
ます。新しいタブページはクリックした場所の左に作成されます。最初のクリックが他
のタブページの選択になってしまうときは、スクリーンが余計に更新されます。

この機能は Win32 と Motif の GUI でも使えます。ただし、ラベルの右をクリックし
た場合のみです。

GUI でタブページラインを右クリックするとメニューが表示されます。|tabline-menu|

関連する自動コマンドについては、|tabnew-autocmd| を参照してください。

:[count]tabe[dit]				*:tabe* *:tabedit* *:tabnew*
:[count]tabnew
		カレントタブページの後ろに空のウィンドウを持った新しいタブペー
		ジを作成します。[count] が与えられた場合、新しいタブページは
		[count] 番目のタブページの後ろに作成され、[count] が省略された
		場合はカレントタブページの後ろに作成されます。  >
			:tabnew		" カレントタブページの後ろに新規タブ
					" ページを作成
			:.tabnew	" 同上
			:+tabnew	" 右のタブページの後ろに新規タブページ
					" を作成
					" 注: tabnew よりも1つ右側に作られる
			:-tabnew	" カレントタブページの前に新規タブ
					" ページを作成
			:0tabnew	" 新規タブページを左端に作成
			:$tabnew	" 新規タブページを右端に作成
<
:[count]tabe[dit] [++opt] [+cmd] {file}
:[count]tabnew [++opt] [+cmd] {file}
		{file} を新しいタブページで開きます。|:edit| と同じです。
		[count] については上記 |:tabnew| 参照。

:[count]tabf[ind] [++opt] [+cmd] {file}			*:tabf* *:tabfind*
		'path' 内の {file} を新しいタブページで開きます。|:find| と同
		じです。[count] については上記 |:tabnew| 参照。

:[count]tab {cmd}					*:tab*
		{cmd} を実行します。そのコマンドが新しいウィンドウを作成すると
		きは、その代わりに新しいタブページを作成します。|:diffsplit|と
		|:diffpatch|, |:execute|, |:normal| に対しては機能しません。
		[count] が与えられた場合、新しいタブページは [count] 番目のタ
		ブページの後ろに作成され、[count] が省略された場合はカレントタ
		ブページの後ろに作成されます。
		例: >
		    :tab split	    " 現在のバッファを新規タブで開く
		    :tab help gt    " "gt" に対するヘルプを新規タブで開く
		    :.tab help gt   " 同上
		    :+tab help	    " 次のタブページのその次に help のタブ
				    " ページを開く
		    :-tab help	    " 現在のタブの前に help のタブを開く
		    :0tab help	    " 最初のタブページの前に help のタブページ
				    " を開く
		    :$tab help	    " 最後のタブページの次に help のタブページ
				    " を開く
<
CTRL-W gf	カーソル下のファイル名のファイルを新しいタブページで開きます。
		|CTRL-W_gf| を参照してください。

CTRL-W gF	カーソル下のファイル名のファイルを新しいタブページで開きます。
		そして、ファイル名の後ろに指定された行番号にジャンプします。
		|CTRL-W_gF| を参照してください。

タブページを閉じるには:

複数のタブページを開いているときは、タブページ内の最後のウィンドウを閉じると、
そのタブページが閉じられます。

タブページラインが表示されているときは、右上に表示されている "X" をマウスでク
リックすると、カレントタブページが閉じます。'tabline' を設定しているときは、他
の何かが表示されているかもしれません。

							*:tabc* *:tabclose*
:tabc[lose][!]	カレントタブページを閉じます。
		このコマンドは次のときに失敗します:
		- タブページが一つしかないとき。			*E784*
		- 'hidden' がオフのときに [!] を使わず、バッファに変更があり、
		  そのバッファを表示しているウィンドウが他にない場合。
		バッファの変更はファイルに保存されませんが、失われることもあり
		ません。このコマンドは安全なコマンドです。 >
		    :tabclose	    " カレントタブページを閉じる
<
:{count}tabc[lose][!]
:tabc[lose][!] {count}
		{count} 番目のタブページを閉じます。`:tabclose` と同じ理由で失
		敗することがあります。 >
		    :-tabclose	    " カレントタブページの前のタブページを
				    " 閉じる
		    :+tabclose	    " カレントタブページの次のタブページを
				    " 閉じる
		    :1tabclose	    " 左端のタブページを閉じる
		    :$tabclose	    " 右端のタブページを閉じる
		    :tabclose -2    " 2つ前のタブページを閉じる
		    :tabclose +	    " 次のタブページを閉じる
		    :tabclose 3	    " 3番目のタブページを閉じる
		    :tabclose $	    " 右端のタブページを閉じる
		    :tabclose #     " 最後にアクセスしたタブページを閉じる

タブページが閉じられると、次のタブページがカレントタブページになります。この挙
動は、'tabclose' オプションを使用してカスタマイズできます。

							*:tabo* *:tabonly*
:tabo[nly][!]	カレントタブページ以外のすべてのタブページを閉じます。
		オプション 'hidden' がオンのとき、閉じたウィンドウのバッファは
		すべて隠しバッファになります。
		'hidden' がオフ、'autowrite' がオンのときは、変更のあるバッ
		ファはファイルに保存されます。そうでないときは、変更のあるバッ
		ファを表示しているウィンドウは閉じません。[!] を指定した場合
		は、変更のあるバッファは隠しバッファになります。変更のあるバッ
		ファは絶対に破棄されないので、変更を失うことはありません。 >
		    :tabonly	    " カレントタブページ以外のすべてのタブ
				    " ページを閉じる
<
:{count}tabo[nly][!]
		{count} のタブページ以外のすべてのタブページを閉じます。 >
		    :.tabonly	    " 上に同じ
		    :-tabonly	    " カレントタブページの前のタブページ以外を
				    " 全て閉じる
		    :+tabonly	    " カレントタブページの次のタブページ以外を
				    " 全て閉じる
		    :1tabonly	    " 最初のタブページ以外を全て閉じる
		    :$tabonly	    " 最後のタブページ以外を全て閉じる
		    :tabonly -	    " カレントタブページの前のタブページ以外を
				    " 全て閉じる
		    :tabonly +2	    " カレントタブページの2つ次のタブページ
				    " 以外を全て閉じる
		    :tabonly 1	    " 最初のタブページ以外を全て閉じる
		    :tabonly $	    " 最後のタブページ以外を全て閉じる
		    :tabonly #	    " 最後にアクセスしたタブページ以外を全て閉
				    " じる
<

タブページを切り替えるには:

タブページラインが表示されているときは、タブページラベルをマウスでクリックする
と、そのタブページに移動できます。ラベルが表示されていない場所をクリックする
と、次のタブページに移動できます。 '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	" 前のタブページに移動する
		    :+tabnext	" 次のタブページに移動する
		    :+2tabnext	" 2つ次のタブページに移動する
		    :1tabnext	" 最初のタブページに移動する
		    :$tabnext	" 最後のタブページに移動する
		    :tabnext $	" 同上
		    :tabnext #	" 最後にアクセスしたタブページに移動する
		    :tabnext -	" 前のタブページに移動する
		    :tabnext -1	" 同上
		    :tabnext +	" 次のタブページに移動する
		    :tabnext +1	" 同上

{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} の数だけ前のタブページに移動します。前のタブページがな
		い場合は最後のタブページに移動します。 Note: |:tabnext| とは
		{count} の使われ方が異なっていて、そちらでは移動先のタブ番号と
		して扱われます。

:tabr[ewind]			*:tabfir* *:tabfirst* *:tabr* *:tabrewind*
:tabfir[st]	最初のタブページに移動します。

							*:tabl* *:tablast*
:tabl[ast]	最後のタブページに移動します。

<C-Tab>					*g<Tab>* *CTRL-W_g<Tab>* *<C-Tab>*
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 番目のタブページの後ろに移動します。カ
		レントタブページを1番目のタブページにするにはゼロを指定します。
		N は移動前に数えられるので、2 番目のタブページがカレントタブで
		あれば、`:tabmove 1` と `:tabmove 2` は効果がありません。
		N を省略すると最後に移動します。 >
		    :.tabmove	" 何もしない
		    :-tabmove	" タブページを左に移動
		    :+tabmove	" タブページを右に移動
		    :0tabmove	" タブページを先頭に移動
		    :tabmove 0	" 同上
		    :tabmove	" タブページを最後尾に移動
		    :$tabmove	" 同上
		    :tabmove $	" 同上
		    :tabmove #	" 最後にアクセスしたタブページの後ろにタブペー
				" ジを移動
<
:tabm[ove] +[N]
:tabm[ove] -[N]
		カレントタブページを N 個右 (+ の場合) または左 (- の場合) に
		移動します。 >
		    :tabmove -	" タブページを左に移動
		    :tabmove -1	" 同上
		    :tabmove +	" タブページを右に移動
		    :tabmove +1	" 同上
<

Note :Ntabmove を使うことでタブページを N 番目のタブページの後ろに移動すること
ができることと、:+Ntabmove を使って N 個後ろに移動できることに注意してくださ
い。この場合に +N が何を意味するかについては、|[range]| を参照してください。


タブページごとにコマンドを実行するには:

							*:tabd* *:tabdo*
:[range]tabd[o] {cmd}
		タブページごと、または [range] が与えられた場合はその範囲のタ
		ブページのみにコマンドを実行します。これは次のような動作をしま
		す: >
			:tabfirst
			:{cmd}
			:tabnext
			:{cmd}
			etc.
<		このコマンドは各タブページのカレントウィンドウで実行されます。
		いずれかのタブページでエラーが起きたときは、その場で実行を中断
		します。
		最後のタブページ (またはエラーが起きたタブページ) がカレントタ
		ブページになります。
		{cmd} は '|' を使って複数のコマンドを繋げることができます。
		{cmd} はタブページを開いたり閉じたり並べ替えたりしてはいけませ
		ん。
		|:windo|、|:argdo|、|:bufdo|、|:cdo|、|:ldo|、|:cfdo|、|:lfdo|
		も参照してください。

==============================================================================
3. その他						*tab-page-other*

							*tabline-menu*
GUI のタブページラインにはポップアップメニューがあります。右クリックで次のメ
ニューが表示されます:
	Close		マウスポインタの下のタブページを閉じます。マウスがラベ
			ルの上にないときは、カレントタブページを閉じます。
	New Tab		タブページを新規バッファで開きます。マウスポインタの左
			側に作成されます。
	Open Tab...	"New Tab" と同じですが、ファイル選択ダイアログを使っ
			て選択したファイルを新しいタブページで開きます。

差分モードはタブページ単位で機能します。一つのタブページ内でファイル間の差分を
表示できます。そして、他のタブページでは他のファイルとの差分を表示することがで
きます。

タブページローカル変数は "t:" で始まります。|tabpage-variable|

現在、タブページローカルなオプションは 'cmdheight' だけです。

						*tabnew-autocmd*
自動コマンドイベントの TabLeave と TabEnter を使って、タブページを切り替えると
きにコマンドを実行できます。イベントが起きる正確な順番は何をしたかによって変わ
ります。新しいタブページを作成したときは、例えば、編集中のバッファを新しいウィ
ンドウで開き、それからそのウィンドウで別のバッファを開いたときと同じような動き
をします。つまり、":tabnew" では次の順番でイベントが実行されます:
	WinLeave		カレントウィンドウから離れる
	TabLeave		カレントタブページから離れる
	WinEnter		新しいタブページのウィンドウに入る
	TabEnter		新しいタブページに入る
	BufLeave		カレントバッファから離れる
	BufEnter		新しい空のバッファに入る

タブページを切り替えたときは次の順番です:
	BufLeave
	WinLeave
	TabLeave
	TabEnter
	WinEnter
	BufEnter

==============================================================================
4. 'tabline' の設定					*setting-tabline*

オプション 'tabline' を設定してタブページラベルの表示方法を指定できます。これ
は CUI の タブページラインで使います。

オプション 'showtabline' を設定してタブページラインを表示するかどうかを指定で
きます。表示しない、タブページが複数あるときだけ表示する、常に表示する、から選
べます。

タブページラインの強調表示には TabLine、TabLineSel、TabLineFill が使われます。
|hl-TabLine| |hl-TabLineSel| |hl-TabLineFill|

変更されているウィンドウを含むタブページには "+" が表示されます。タブページ内
のウィンドウの個数も表示されます。よって "3+" という表示は3個のウィンドウを含
む、そのうちの1つが変更されているバッファを含むということを意味します。

複数のタブページが開いていて、'mouse' が有効になっている場合にのみ、最後のカラ
ムに "X" (閉じるボタン) が表示されます。

オプション 'tabline' を使って、タブページラベルを好みの表示に設定できます。こ
れはあまり簡単ではないので、サンプルを用意してあります。

基本的な情報については、'statusline' オプションを参照ください。同じ項目は
'tabline' および 'tabpanel' オプションでも使用できます。さらに、
|tabpagebuflist()|、|tabpagenr()|、|tabpagewinnr()| 関数も便利です。

タブページラベルの数は変化するので、オプションには式を使う必要があります。次の
ように設定します: >
	:set tabline=%!MyTabLine()

では、関数 MyTabLine() を定義して、すべてのタブページラベルを表示するようにし
ます。タブページラベル全体の作成と、個々のタブページラベルの作成、という二つの
段階に分けると簡単です。 >

	function MyTabLine()
	  let s = ''
	  for i in range(tabpagenr('$'))
	    " ハイライトグループの選択
	    if i + 1 == tabpagenr()
	      let s ..= '%#TabLineSel#'
	    else
	      let s ..= '%#TabLine#'
	    endif

	    " タブページ番号の設定 (マウスクリック用)
	    let s ..= '%' .. (i + 1) .. 'T'

	    " ラベルは MyTabLabel() で作成する
	    let s ..= ' %{MyTabLabel(' .. (i + 1) .. ')} '
	  endfor

	  " 最後のタブページの後は TabLineFill で埋め、タブページ番号をリセッ
	  " トする
	  let s ..= '%#TabLineFill#%T'

	  " カレントタブページを閉じるボタンのラベルを右添えで作成
	  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. 'tabpanel' の設定				*tabpanel* *setting-tabpanel*

タブパネルは、ウィンドウの横にタブページのラベルを表示する垂直サイドバーです。
次のように表示されます:
>
	+-----------+----------------------------------
	|(1)        |text text text text text text text
	|  ~/aaa.txt|text text text text text text text
	|(2)        |text text text text text text text
	|  ~/.vimrc |text text text text text text text
	|(3)        |text text text text text text text
	|  ~/bbb.js |text text text text text text text
	|  ~/ccc.css|text text text text text text text
	|           |text text text text text text text
	|           |text text text text text text text
	|           |text text text text text text text
<
タブパネルを設定するには、'tabpanel'、'showtabpanel'、'tabpanelopt' オプション
を使用します。'tabpanel' オプションは 'statusline' や 'tabline' と同様に機能
し、'showtabpanel' オプションは 'laststatus' や 'showtabline' と同様に機能しま
す。

'tabpanelopt' オプションの "columns:" 項目は、タブパネルの幅を指定します:
>
	      +------ この幅
	      |
	 <----+----->
	+-----------+----------------------------------
	|(1)        |text text text text text text text
	|  ~/aaa.txt|text text text text text text text
	|(2)        |text text text text text text text
<
'tabpanelopt' オプションの "align:" 項目は、タブパネルをウィンドウの左側に表示
するか右側に表示するかを決定します:
>
	+----------------------------------+-----------
	|text text text text text text text|(1)
	|text text text text text text text|  ~/aaa.txt
	|text text text text text text text|(2)
<
'tabpanelopt' オプションの "vert" 項目は、タブパネルとウィンドウの表示部分の間
に垂直セパレーターを表示するかどうかを指定します:
>
		    +------ ここ
		    |
		    v
	+-----------+----------------------------------
	|(1)        |text text text text text text text
	|  ~/aaa.txt|text text text text text text text
	|(2)        |text text text text text text text
<
垂直区切り文字は、'fillchars' の "tpl_vert" から取得されます。

ハイライトグループを使用して、タブページラベルの外観をカスタマイズできます:
|hl-TabPanel| |hl-TabPanelSel| |hl-TabPanelFill|

☆タブパネルのスクロール				*tabpanel-scroll*

タブページのリストの総高さが画面表示の高さを超えると、タブパネル領域内でのマウ
スホイールイベントによってタブページのリストが上下にスクロールする。スクロール
のステップ数は 'mousescroll' 設定に従う。タブパネル領域内でのホイールイベント
はタブパネルによって消費され、|<ScrollWheelUp>| または |<ScrollWheelDown>| の
マッピングはトリガーされない。

カレントタブページは常に表示される。選択されたタブページが変更されると
(|gt|、|gT|、|:tabnext| など)、パネルがスクロールして現在のエントリが表示され
る。

現在のスクロール位置を示す垂直スクロールバーを表示するには、'tabpanelopt' に
"scrollbar" を追加する: >
	:set tabpanelopt+=scrollbar

タブパネルの右端には、'tabpanelopt' の "align:" 設定に関係なく常に 1 列のスク
ロールバーが表示される。スクロールバーの列をクリックすると、サムがクリック位置
に移動し、サムをドラッグすることで連続的にスクロールできる。

スクロールバーは、トラックに |hl-PmenuSbar| ハイライトグループを、サムに
|hl-PmenuThumb| を使用する。

スクロールオフセットは再描画後も保持される。

☆タブパネル内でのマウスクリック			*tabpanel-mouse*

タブパネルの行を左クリックすると、その行に対応するタブページが選択される。タブ
ラインとは異なり、タブパネルでダブルクリックしても新しい空のタブページは開かれ
ず、シングルクリックと同じように扱われる。

より詳細な制御を行うために、'tabpanel' の値には、|stl-%[FuncName]| クリック領
域を含めることができる。これらの領域のクリックは、タブページ選択にフォールス
ルーする代わりに、コールバック関数に処理が渡される。

==============================================================================
6. 'guitablabel' の設定					*setting-guitablabel*

GUI のタブページラインが表示されているとき、'guitablabel' を設定してタブページ
ラベルの表示方法を指定できます。'tabline' とは違い、一度にタブページライン全体
を指定するのではなく、個々のラベルを得るために 'guitablabel' が使われます。

'guitabtooltip' という良く似たオプションがあります。これはラベルのツールチップ
を表示するために使われます。ツールチップはマウスポインタがラベルの上に乗ってい
るときだけ表示されるので、普通は、長い文字を表示します。いくつかのシステムだけ
サポートされています。

書式についてはオプション 'statusline' を参照してください。

"%N" はカレントタブページ番号になります。このオプションを評価するときに、
|v:lnum| にも同じ番号が設定されます。ファイル名を参照するアイテムにはタブペー
ジのカレントウィンドウのものが使われます。

Note: このオプションでは強調表示は使えません。%T と %X は無視されます。

簡単な例として、次のものはタブページ番号とバッファ名をラベルに表示します: >
	:set guitablabel=%N\ %f

次の例は 'guitablabel' の標準設定の動作と似た動作をします。タブページのウィン
ドウ数と、変更のあるバッファがあるときには '+' を表示します: >

	function GuiTabLabel()
	  let label = ''
	  let bufnrlist = tabpagebuflist(v:lnum)

	  " このタブページに変更のあるバッファがるときには '+' を追加する
	  for bufnr in bufnrlist
	    if getbufvar(bufnr, "&modified")
	      let label = '+'
	      break
	    endif
	  endfor

	  " ウィンドウが複数あるときにはその数を追加する
	  let wincount = tabpagewinnr(v:lnum, '$')
	  if wincount > 1
	    let label ..= wincount
	  endif
	  if label != ''
	    let label ..= ' '
	  endif

	  " バッファ名を追加する
	  return label .. bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
	endfunction

	set guitablabel=%{GuiTabLabel()}

Note: この関数はオプションを設定する前に定義しておく必要があります。そうしない
と、関数未定義のエラーが表示されてしまいます。

標準のラベルを使いたい場合は、空文字列を返してください。

あるタブページに固有の何かを表示したいときは、タブページローカル変数 |t:var|
が便利です。

 vim:tw=78:ts=8:noet:ft=help:norl:
