• vim多窗口操作


    *tabpage.txt*   For Vim version 7.3.  最近更新: 2010年8月
    
    
                      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 无此功能}
    {仅当编译时加入 |+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|。
    
    :[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      " 在新标签页上打开当前缓冲区
                            :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*
    <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 个标签页之后。用 0 使当前标签页成为首个标
                    签页。如果没有 N,当前标签页成为最后一个。
    
    
    循 环 遍 历 所 有 标 签 页:
    
                                                            *:tabd* *:tabdo*
    :tabd[o] {cmd}  对每个标签页执行 {cmd}。
                    大致相当于:
                            :tabfirst
                            :{cmd}
                            :tabnext
                            :{cmd}
                            等等
                    只对每个标签页的当前窗口进行操作。如果某个标签页出现错误,不再
                    继续访问其余的标签页。
                    最后一个标签页 (或任何出错的标签页) 成为当前标签页。
                    {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' 选项指定标签页行的外观。只有没有 GUI 标签页行时才使用该选项。
    
    用 'showtabline' 选项可以指定何时显示标签页行: 从不、多于一个标签页才显示、总
    是。
    
    标签页行的高亮用 TabLine、TabLineSel 和 TabLineFill 分别指定。|hl-TabLine|
    |hl-TabLineSel| |hl-TabLineFill|
    
    包含修改过的窗口的标签页会显示 "+"。同时也显示该标签页里包含的窗口数。所以,
    "3+" 意味着有三个窗口,其中一个有修改过的缓冲区。
    
    '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 Thu Aug 11 19:14:49 UTC 2011

  • 相关阅读:
    Mybatis resultMap和resultType的区别
    根据xml文件生成javaBean
    WebService如何封装XML请求 以及解析接口返回的XML
    Java SE练习
    Maven手动将jar导入本地仓库
    【公告】【公告】【公告】【公告】
    【题解】SDOI2010地精部落
    【题解】CF559C C. Gerald and Giant Chess(容斥+格路问题)
    【题解】任务安排(斜率优化)
    【题解】Cats Transport (斜率优化+单调队列)
  • 原文地址:https://www.cnblogs.com/UnGeek/p/2685785.html
Copyright © 2020-2023  润新知