帮助总览  ·
快速参考  ·
命令索引  ·
函数列表  ·
选项列表  ·
用户手册  ·
参考手册  ·
 
一个标签页容纳一或多个窗口。标签页间很容易切换,这种方式使你可以拥有多个窗口集
合,每个集合做不同的工作。
通常你会在 Vim 窗口顶部看到一组标签的列表,每个标签页一个。用鼠标点击标签可以
跳转到对应的标签页。下面还介绍在其它标签页间移动的方式。
多数命令只能用于当前标签页,其中包括  CTRL-W   命令、 :windo  、 :all   和
 :ball   (除非用  :tab   修饰符)。
下面会列出那些能意识到有其它标签页存在的命令。
标签页也是临时编辑某个缓冲区而不用修改当前窗口布局的好方法。只要打开新标签页,
做你想做的事,然后关闭该标签页就可以了。
 
打 开 新 标 签 页:
启动 Vim 时用 "vim -p filename ..." 为每个文件参数打开一个新标签页 (标签页个数
不能超过 'tabpagemax' )。见  -p  
非 GUI 标签页行上双击鼠标打开新的空白标签页。该标签页出现在点击位置的左侧。第
一击可能会先选择不同的标签页,从而导致额外的屏幕刷新。
在一些 GUI 版本上,特别是 Win32 和 Motif,也可以这么用。但必须在所有标签右侧点
击。
GUI 标签页行可以用鼠标右键打开菜单。 tabline-menu  。
相关的自动命令可见  tabnew-autocmd  。
:[count]tabe[dit]                                :tabe     :tabedit     :tabnew   
:[count]tabnew
                在当前标签页之后打开带空窗口的新标签页。
                如果给出 [count],新标签页出现在第 [count] 个标签页之后,否则
                新标签页出现在当前页之后。
                    :tabnew     " 在当前页之后打开标签页
                    :.tabnew    " 同上
                    :+tabnew    " 在下页之后打开标签页
                                " 备注: 这比 :tabnew 要后一个位置
                    :-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] 个标签页之后,否则
                新标签页出现在当前页之后。
                例如:
                    :tab split      " 在新标签页上打开当前缓冲区
                    :tab help gt    " 打开标签页显示 "gt" 的帮助
                    :.tab help gt   " 同上
                    :+tab help      " 在下页之后打开标签页显示帮助
                    :-tab help      " 在当前页之前打开标签页显示帮助
                    :0tab help      " 在首页之前打开标签页显示帮助
                    :$tab help      " 在末页之后打开标签页显示帮助
CTRL-W gf       打开新标签页并编辑光标所在的文件名。见  CTRL-W_gf  。
CTRL-W gF       打开新标签页,编辑光标所在的文件名并转到文件名后的行号上。见
                 CTRL-W_gF  。
关 闭 标 签 页:
关闭标签页的最后一个窗口同时也关闭该标签页,除非它是唯一的标签页。
使用鼠标: 如果显示标签页行,点击右上角的 "X" 可以关闭当前标签页。如果使用自定
义的 'tabline' ,显示内容可能有所不同。
                                                         :tabc     :tabclose   
:tabc[lose][!]  关闭当前标签页。
                如下情形使该命令失败:
                - 屏幕上只有一个标签页。                                 E784   
                - 如果 'hidden'  没有置位,没有 [!],缓冲区有修改,而且该缓冲区
                  没有其它窗口。
                缓冲区的修改不会被写入,也不会丢失。所以这可以说是个 "安全的"
                命令。
                    :tabclose       " 关闭当前标签页
{count}
                关闭第 {count} 个标签页。失败条件和上面的  :tabclose   相同。
                    :-tabclose      " 关闭上个标签页
                    :+tabclose      " 关闭下个标签页
                    :1tabclose      " 关闭首个标签页
                    :$tabclose      " 关闭末个标签页
                    :tabclose -2    " 关闭往前第二个标签页
                    :tabclose +     " 关闭下个标签页
                    :tabclose 3     " 关闭第三个标签页
                    :tabclose $     " 关闭末个标签页
                    :tabclose #     " 关闭最近访问的标签页
标签页关闭后,下一个标签页会成为当前标签页。此行为可用 'tabclose'  选项定制。
                                                         :tabo     :tabonly   
:tabo[nly][!]   关闭所有其它的标签页。
                如果置位 'hidden'  选项,所有关闭窗口的缓冲区成为隐藏。
                如果没有置位 'hidden'  但置位 'autowrite'  选项,写回修改过的缓
                冲区。否则,包含修改过的缓冲区的窗口不会被删除。但如果给出
                [!],这些窗口成为隐藏。修改过的缓冲区永远不会被放弃,所以永远
                不被丢失这些改动。
                    :tabonly        " 关闭除了当前页的所有标签页
{count}tabo[nly][!]
:tabo[nly][!] {count}
                关闭除了 {count} 以外的所有的标签页。
                    :.tabonly       " 同上
                    :-tabonly       " 关闭除了上一页之外的所有标签页
                    :+tabonly       " 关闭除了下一页之外的所有标签页
                    :1tabonly       " 关闭除了首页之外的所有标签页
                    :$tabonly       " 关闭除了末页之外的所有标签页
                    :tabonly -      " 关闭除了上一页之外的所有标签页
                    :tabonly +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} 个标签页。首个标签页编号为一。
                    :-tabnext   " 转到上个标签页
                    :+tabnext   " 转到下个标签页
                    :+2tabnext  " 转到往后第二个标签页
                    :1tabnext   " 转到首个标签页
                    :$tabnext   " 转到末个标签页
                    :tabnext $  " 同上
                    :tabnext #  " 转到最近访问的标签页
                    :tabnext -  " 转到上个标签页
                    :tabnext -1 " 同上
                    :tabnext +  " 转到下个标签页
                    :tabnext +1 " 同上
{count}<C-PageDown>
{count}gt       转到第 {count} 个标签页。首个标签页编号为一。
: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>                                  g<Tab>     CTRL-W_g<Tab>     <C-Tab>   
g<Tab>
CTRL-W g<Tab>   转到最近访问的标签页。
其它命令:
                                                         :tabs   
:tabs           列出标签页和它们包含的窗口。
                当前窗口显示 ">"。
                修改过的缓冲区显示 "+"。
                例如:
                        Tab page 1 
                          + tabpage.txt 
                            ex_docmd.c 
                        Tab page 2 
                        >   main.c 
重 新 排 列 标 签 页:
:tabm[ove] [N]                                           :tabm     :tabmove   
:[N]tabm[ove]
                把当前标签页移到第 N 个标签页之后。用 0 使当前标签页成为首个标
                签页。计算 N 是在移动前,所以如果第二个标签页是当前标签页,
                `:tabmove 1` 和 `:tabmove 2` 没有效果。
                如果没有 N,当前标签页成为最后一个。
                    :.tabmove   " 什么都不做
                    :-tabmove   " 往左移动当前标签页
                    :+tabmove   " 往右移动当前标签页
                    :0tabmove   " 移动当前标签页到标签页之首
                    :tabmove 0  " 同上
                    :tabmove    " 移动当前标签页到标签页之末
                    :$tabmove   " 同上
                    :tabmove $  " 同上
                    :tabmove #  " 移动当前标签页到最近访问的标签页之后
                    :tabmove -  " 往左移动当前标签页
                    :tabmove -1 " 同上
                    :tabmove +  " 往右移动当前标签页
                    :tabmove +1 " 同上
注意 可以用 :Ntabmove 来移动标签页到第 N 个标签页之后,也可用 :+Ntabmove 来移
动 N 个位置。在此情形下 +N 的实际含义可见  [range]   处的解释。
循 环 遍 历 所 有 标 签 页:
                                                         :tabd     :tabdo   
:[range]tabd[o] {cmd}
                对每个标签页执行 {cmd},如果给出 [range],只对页号在 [range]
                内的标签页执行。
                大致相当于:
                        :tabfirst
                        :{cmd}
                        :tabnext
                        :{cmd}
                        等等
                只对每个标签页的当前窗口进行操作。如果某个标签页出现错误,不再
                继续访问其余的标签页。
                最后一个标签页 (或任何出错的标签页) 成为当前标签页。
                {cmd} 可以包含 '|' 以连接多个命令。
                {cmd} 不能打开标签页、关闭标签页或重排标签页。
                另见  :windo  、 :argdo  、 :bufdo  、 :cdo  、 :ldo  、 :cfdo   和
                 :lfdo  
 
                                                         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
 
'tabline'  选项指定标签页行的外观。只有没有 GUI 标签页行时才使用该选项。
用 'showtabline'  选项可以指定何时显示标签页行: 从不、多于一个标签页才显示、总
是。
标签页行的高亮用 TabLine、TabLineSel 和 TabLineFill 分别指定。 hl-TabLine  
 hl-TabLineSel    hl-TabLineFill  
包含修改过的窗口的标签页会显示 "+"。同时也显示该标签页里包含的窗口数。所以,
"3+" 意味着有三个窗口,其中一个有修改过的缓冲区。
有多个标签页打开,且仅当设置了 'mouse'  时,最后列会出现 "X" (关闭按钮)。
'tabline'  选项允许你定义自己喜欢的标签页标签显示方式。实现并不简单,所以这里给
出一个例子。
基本知识见 'statusline'  选项。'tabline'  和 'tabpanel'  选项可以使用相同的项目。
此外,还可用  tabpagebuflist()  、 tabpagenr()   和  tabpagewinnr()   函数。
因为标签页标签的编号可以不同,你可以指定整个选项为一个函数。就像这样:
        :set tabline=%!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
        function MyTabLabel(n)
          let buflist = tabpagebuflist(a:n)
          let winnr = tabpagewinnr(a:n)
          return bufname(buflist[winnr - 1])
        endfunction
'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
        |  ~/.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  
 
如果显示 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)
          " 如果标签页里有修改过的缓冲区,加上 '+'
          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()}
注意 设置选项值前就必须已经定义好函数。否则会报错,提示函数未知。
如果你希望回到缺省的标签,返回空字符串。
如果你希望显示标签页特定的内容,可以使用局部于标签页的变量。 t:var  
 vim:tw=78:ts=8:noet:ft=help:norl: