vim-jp / vimdoc-ja / tabpage

tabpage - Vimドキュメント

メインヘルプファイルに戻る
tabpage.txt   For Vim バージョン 8.2.  Last change: 2020 Oct 14


                  VIMリファレンスマニュアル    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

{+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

関連する自動コマンドについては、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 参照。
                {+file_in_path が有効な場合のみ利用できます}

:[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 #     " 最後にアクセスしたタブページを閉じる

                                                        :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]      最後のタブページに移動します。

                                        g<Tab> CTRL-W_g<Tab> <C-Tab>
g<Tab>          最後にアクセスしたタブページへ移動します。

その他のコマンド:
                                                        :tabs
:tabs           タブページと、含まれているウィンドウの一覧を表示します。
                ">" と表示されるのはカレントウィンドウです。
                "+" と表示されるのは変更のあるバッファです。
                例:
                        タブページ1
                          + tabpage.txt
                            ex_docmd.c
                        タブページ2
                        >   main.c


タブページを並べ替えるには:

:tabm[ove] [N]                                          :tabm :tabmove
:[N]tabm[ove]
                カレントタブページを N 番目のタブページの後ろに移動します。カ
                レントタブページを一番目のタブページにするにはゼロを指定します。
                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つが変更されているバッファを含むということを意味します。

オプション '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 .= '%' . (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. '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:
関連キーワード:  タブ, ページ, 表示, 移動, usr, count, バッファ, カレントタブページ, ウィンドウ, 作成