VIM REFERENCE MANUAL by Bram Moolenaar
タブページの使い方 *tab-page* *tabpage*
タブページを使うために追加されたコマンドについて説明します。複数のタブページを
開いていると違う働きをするコマンドについても説明します。
1. はじめに |tab-page-intro|
2. コマンド |tab-page-commands|
3. その他 |tab-page-other|
4. 'tabline' の設定 |setting-tabline|
5. 'guitablabel' の設定 |setting-guitablabel|
{Vi にはこれらのコマンドはありません}
{|+windows| が有効な場合のみ利用できます}
==============================================================================
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|
:[count]tabe[dit] *:tabe* *:tabedit* *:tabnew*
:[count]tabnew
カレントタブページの後ろに空のウィンドウを持った新しいタブペー
ジを作成します。[count] については下記 |:tab| 参照。
:[count]tabe[dit] [++opt] [+cmd] {file}
:[count]tabnew [++opt] [+cmd] {file}
{file} を新しいタブページで開きます。|:edit| と同じです。
[count] については下記 |:tab| 参照。
:[count]tabf[ind] [++opt] [+cmd] {file} *:tabf* *:tabfind*
'path' 内の {file} を新しいタブページで開きます。|:find| と同
じです。[count] については下記 |:tab| 参照。
{|+file_in_path| が有効な場合のみ利用できます}
:[count]tab {cmd} *:tab*
{cmd} を実行します。そのコマンドが新しいウィンドウを作成すると
きは、その代わりに新しいタブページを作成します。|:diffsplit|と
|:diffpatch|, |:execute|, |:normal| に対しては機能しません。
[count] を省略すると、新しいタブページはカレントタブページの後
ろに作成されます。
[count] を指定すると、[count] 番目のタブページの後ろに作成され
ます。タブページを一番左に作成するには ":0tab cmd" とします。
例:
:tab split " opens current buffer in new tab page
:tab help gt " opens tab page with help for "gt"
:tab help gt " opens tab page with help for "gt"
CTRL-W gf カーソル下のファイル名のファイルを新しいタブページで開きます。
|CTRL-W_gf| を参照してください。
CTRL-W gF カーソル下のファイル名のファイルを新しいタブページで開きます。
そして、ファイル名の後ろに指定された行番号にジャンプします。
|CTRL-W_gF| を参照してください。
タブページを閉じるには:
複数のタブページを開いているときは、タブページ内の最後のウィンドウを閉じると、
そのタブページが閉じられます。
タブページラインが表示されているときは、右上に表示されている "X" をマウスでク
リックすると、カレントタブページが閉じます。|'tabline'| を設定しているときは、
他の何かが表示されているかもしれません。
*:tabc* *:tabclose*
:tabc[lose][!] カレントタブページを閉じます。
このコマンドは次のときに失敗します:
- タブページが一つしかないとき。 *E784*
- 'hidden' がオフのときに [!] を使わず、バッファに変更があり、
そのバッファを表示しているウィンドウが他にない場合。
バッファの変更はファイルに保存されませんが、失われることもあり
ません。このコマンドは安全なコマンドです。
:tabc[lose][!] {count}
{count} 番目のタブページを閉じます。|:tabclose| と同じ理由で失
敗することがあります。
*:tabo* *:tabonly*
:tabo[nly][!] カレントタブページ以外のすべてのタブページを閉じます。
オプション 'hidden' がオンのとき、閉じたウィンドウのバッファは
すべて隠しバッファになります。
'hidden' がオフ、'autowrite' がオンのときは、変更のあるバッ
ファはファイルに保存されます。そうでないときは、変更のあるバッ
ファを表示しているウィンドウは閉じません。[!] を指定した場合
は、変更のあるバッファは隠しバッファになります。変更のあるバッ
ファは絶対に破棄されないので、変更を失うことはありません。
タブページを切り替えるには:
タブページラインが表示されているときは、タブページラベルをマウスでクリックする
と、そのタブページに移動できます。ラベルが表示されていない場所をクリックする
と、次のタブページに移動できます。 |'tabline'|
:tabn[ext] *:tabn* *:tabnext* *gt*
<C-PageDown> *CTRL-<PageDown>* *<C-PageDown>*
gt *i_CTRL-<PageDown>* *i_<C-PageDown>*
次のタブページに移動します。次のタブページがない場合は、最初の
タブページに移動します。
:tabn[ext] {count}
{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} の数だけ前のタブページに移動します。前のタブページがな
い場合は最後のタブページに移動します。
:tabr[ewind] *:tabfir* *:tabfirst* *:tabr* *:tabrewind*
:tabfir[st] 最初のタブページに移動します。
*:tabl* *:tablast*
:tabl[ast] 最後のタブページに移動します。
その他のコマンド:
*:tabs*
:tabs タブページと、含まれているウィンドウの一覧を表示します。
">" と表示されるのはカレントウィンドウです。
"+" と表示されるのは変更のあるバッファです。
タブページを並べ替えるには:
:tabm[ove] [N] *:tabm* *:tabmove*
カレントタブページを N 番目のタブページの後ろに移動します。カ
レントタブページを一番目のタブページにするにはゼロを指定します。
N を省略すると最後に移動します。
タブページごとにコマンドを実行するには:
*:tabd* *:tabdo*
:tabd[o] {cmd} タブページごとにコマンドを実行します。
これは次のような動作をします:
:tabfirst
:{cmd}
:tabnext
:{cmd}
etc.
このコマンドは各タブページのカレントウィンドウで実行されます。:{cmd}
:tabnext
:{cmd}
etc.
いずれかのタブページでエラーが起きたときは、その場で実行を中断
します。
最後のタブページ (またはエラーが起きたタブページ) がカレントタ
ブページになります。
{cmd} は '|' を使って複数のコマンドを繋げることができます。
{cmd} はタブページを開いたり閉じたり並べ替えたりしてはいけませ
ん。
{Vi にはない機能です}
{|+listcmds| が有効な場合のみ利用できます}
|:windo|、|:argdo|、|:bufdo| も参照してください。
==============================================================================
3. その他 *tab-page-other*
*tabline-menu*
GUI のタブページラインにはポップアップメニューがあります。右クリックで次のメ
ニューが表示されます:
Close マウスポインタの下のタブページを閉じます。マウスがラベ
ルの上にないときは、カレントタブページを閉じます。
New Tab タブページを新規バッファで開きます。マウスポインタの左
側に作成されます。
Open Tab... "New Tab" と同じですが、ファイル選択ダイアログを使っ
て選択したファイルを新しいタブページで開きます。
Diff モードはタブページ単位で機能します。一つのタブページ内でファイル間の差分
を表示できます。そして、他のタブページでは他のファイルとの差分を表示することが
できます。
タブページローカル変数は "t:" で始まります。|tabpage-variable|
現在、タブページローカルなオプションは 'cmdheight' だけです。
オートコマンドイベントの TabLeave と TabEnter を使って、タブページを切り替える
ときにコマンドを実行できます。イベントが起きる正確な順番は何をしたかによって変
わります。新しいタブページを作成したときは、例えば、編集中のバッファを新しい
ウィンドウで開き、それからそのウィンドウで別のバッファを開いたときと同じような
動きをします。つまり、":tabnew" では次の順番でイベントが実行されます:
WinLeave カレントウィンドウから離れる
TabLeave カレントタブページから離れる
TabEnter 新しいタブページに入る
WinEnter 新しいタブページのウィンドウに入る
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つが変更されているバッファを含むということを意味します。
オプション 'tabline' を使って、タブページラベルを好みの表示に設定できます。こ
れはあまり簡単ではないので、サンプルを用意してあります。
基本的には 'statusline' を参照してください。同じアイテムが 'tabline' で使用で
きます。加えて、|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 = ''
for i in range(tabpagenr('$'))
" 強調表示グループの選択
if i + 1 == tabpagenr()
let s .= '%#TabLineSel#'
else
let s .= '%#TabLine#'
endif
" タブページ番号の設定 (マウスクリック用)
let s .= '%' . (i + 1) . 'T'
let s .= '%' . (i + 1) . 'T'
" ラベルは MyTabLabel() で作成する
let s .= ' %{MyTabLabel(' . (i + 1) . ')} '
endfor
let s .= ' %{MyTabLabel(' . (i + 1) . ')} '
endfor
" 最後のタブページの後は TabLineFill で埋め、タブページ番号をリセッ
" トする
let s .= '%#TabLineFill#%T'
" トする
let s .= '%#TabLineFill#%T'
" カレントタブページを閉じるボタンのラベルを右添えで作成
if tabpagenr('$') > 1
let s .= '%=%#TabLine#%999Xclose'
endif
if tabpagenr('$') > 1
let s .= '%=%#TabLine#%999Xclose'
endif
return s
endfunction
endfunction
関数 MyTabLabel() は個々のタブページラベルを得るために呼ばれます。
function MyTabLabel(n)
let buflist = tabpagebuflist(a:n)
let winnr = tabpagewinnr(a:n)
return bufname(buflist[winnr - 1])
endfunction
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| にも同じ番号が設定されます。ファイル名を参照するアイテムにはタブペー
ジのカレントウィンドウのものが使われます。
Note: このオプションでは強調表示は使えません。%T と %X は無視されます。
簡単な例として、次のものはタブページ番号とバッファ名をラベルに表示します:
:set guitablabel=%N\ %f
次の例は 'guitablabel' の標準設定の動作と似た動作をします。タブページのウィン
ドウ数と、変更のあるバッファがあるときには '+' を表示します:
function GuiTabLabel()
let label = ''
let bufnrlist = tabpagebuflist(v:lnum)
let label = ''
let bufnrlist = tabpagebuflist(v:lnum)
" このタブページに変更のあるバッファがるときには '+' を追加する
for bufnr in bufnrlist
if getbufvar(bufnr, "&modified")
let label = '+'
break
endif
endfor
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
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
return label . bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
endfunction
set guitablabel=%{GuiTabLabel()}
Note: この関数はオプションを設定する前に定義しておく必要があります。そうしない
と、関数未定義のエラーが表示されてしまいます。
標準のラベルを使いたい場合は、空文字列を返してください。
あるタブページに固有の何かを表示したいときは、タブページローカル変数 |t:var|
が便利です。
vim:tw=78:ts=8:ft=help:norl: