TABPAGE

*tabpage.txt*   For Vim version 7.0.  最近更新: 2006年5月


                  VIM 参考手册    by Bram Moolenaar
                                译者: Willis
                                http://vimcdoc.sf.net


多分页窗口编辑                                          *tab-page* *tabpage*

这里解释新加入的处理多分页的命令。另外,也提供因为和多于一个分页组合使用而行为
不同的命令的解释。

1. 简介                         |tab-page-intro|
2. 命令                         |tab-page-commands|
3. 其它项目                     |tab-page-other|
4. 设置 'tabline'               |setting-tabline|
5. 设置 'guitablabel'           |setting-guitablabel|

{Vi 无此功能}
{only 仅当编译时加入 |+windows| 特性才能使用多分页}


1. 简介 *tab-page-intro*

一个分页容纳一或多个窗口。分页间很容易切换,这种方式使你可以拥有多个窗口集合, 每个集合做不同的工作。 通常你会在 Vim 窗口顶部看到一组标签的列表,每个分页一个。用鼠标点击标签可以跳 转到对应的分页。下面还介绍在其它分页间移动的方式。 多数命令只能用于当前分页,其中包括 |CTRL-W| 命令、|:windo|、|:all| 和 |:ball| (除非用 |:tab| 修饰符)。 下面会列出那些能意识到有其它分页存在的命令。 分页也是临时编辑某个缓冲区而不用修改当前窗口布局的好方法。只要打开新分页,做你 想做的事,然后关闭该分页就可以了。

2. 命令 *tab-page-commands*

打 开 新 分 页: 启动 Vim 时用 "vim -p filename ..." 为每个文件参数打开一个新分页 (分页个数不能 超过 'tabpagemax')。|-p| 非 GUI 分页行上双击鼠标打开新的空白分页。该分页出现在点击位置的左侧。第一击可 能会先选择不同的分页,从而导致额外的屏幕刷新。 在一些 GUI 版本上,特别是 Win32 和 Motif,也可以这么用。但必须在所有标签右侧点 击。 GUI 分页行可以用鼠标右键打开菜单。|tabline-menu|。 :tabe[dit] *:tabe* *:tabedit* *:tabnew* :tabnew 在当前分页之后后打开带空窗口的新分页。 :tabe[dit] [++opt] [+cmd] {file} :tabnew [++opt] [+cmd] {file} 打开新分页并编辑 {file},其余和 |:edit| 类同。 :tabf[ind] [++opt] [+cmd] {file} *:tabf* *:tabfind* 打开新分页并编辑 'path' 里的 {file},其余和 |:find| 类同。 {only 仅当编译时加入 |+file_in_path| 特性才有效} :[count]tab {cmd} *:tab* 执行 {cmd},如果它打开新窗口,使用新分页代替。不能用于 |:diffsplit| 或 |:diffpatch|。 如果省略 [count],分页出现在当前分页之后。如果指定 [count],新 分页出现在第 [count] 个分页之后。":0tab cmd" 使新分页出现在第 一个位置。例如: :tab split " 在新分页上打开当前缓冲区 :tab help gt " 打开分页显示 "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* gt *CTRL-<PageDown>* *<C-PageDown>* <C-PageDown> *i_CTRL-<PageDown>* *i_<C-PageDown>* 转到下一个分页。最后一个分页则回绕到第一个。 :tabn[ext] {count} *CTRL-<PageUp>* *<C-PageUp>* {count}gt *i_CTRL-<PageUp>* *i_<C-PageUp>* <C-PageUp> 转到第 {count} 个分页。首个分页编号为 1。 :tabp[revious] *:tabp* *:tabprevious* *gT* :tabN[ext] *:tabN* *:tabNext* gT 转到前一个分页。首个分页则回绕到最后一个。 :tabp[revious] {count} :tabN[ext] {count} {count}gT 转到前面 {count} 个分页。首个分页则回绕到最后一个。 :tabr[ewind] *:tabfir* *:tabfirst* *:tabr* *:tabrewind* :tabfir[st] 转到第一个分页。 *:tabl* *:tablast* :tabl[ast] 转到最后一个分页。 其它命令: *:tabs* :tabs 列出分页和它们包含的窗口。 当前窗口显示 ">"。 修改过的缓冲区显示 "+"。 重 新 排 列 分 页: :tabm[ove] [N] *:tabm* *:tabmove* 把当前分页移到第 N 个分页之后。用 0 使当前分页成为首个分页。如 果没有 N,当前分页成为最后一个。 循 环 遍 历 所 有 分 页: *:tabd* *:tabdo* :tabd[o] {cmd} 对每个分页执行 {cmd}。 大致相当于: :tabfirst :{cmd} :tabnext :{cmd} 等等 只对每个分页的当前窗口进行操作。如果某个分页出现错误,不再继续 访问其余的分页。 最后一个分页 (或任何出错的分页) 成为当前分页。 {cmd} 可以包含 '|' 以连接多个命令。 {cmd} 不能打开分页、关闭分页或重排分页。 {Vi 无此功能} {only 仅当编译时加入 |+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' 选项指定分页行的外观。只有没有 GUI 分页行时才使用该选项。 用 'showtabline' 选项可以指定何时显示分页行: 从不、多于一个分页才显示、总是。 分页行的高亮用 TabLine、TabLineSel 和 TabLineFill 分别指定。|hl-TabLine| |hl-TabLineSel| |hl-TabLineFill| '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| 变量也设置为该值。使 用文件名的项目引用当前分页的当前窗口。 注意 此选项不使用语法高亮。也忽略 %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:ft=help:norl:

Generated by vim2html on 2006年 06月 24日 星期六 00:27:59 UTC