VIM学习笔记 匹配多个标签(Matching Multiple Tags)

如果您明确知道某个标签的名称,那么可以使用匹配单个标签章节中介绍的命令直接跳转。本节将继续介绍搜索和匹配多个标签的操作。

标签搜索(Tag Search Pattern)

我们可以在文件的任意位置上执行:tag:tjump命令,以跳转至指定的标签定义处。这样就省去了将光标移动至标签之上,然后再点击跳转快捷键的繁琐。

如果启用了wildmenu选项,那么在输入命令时,我们只需要输入标签的开头几个字母,然后点击Tab键即可以自动补全标签名。

tag_tab_wildmenu

通过在命令中使用正则表达式,可以查找符合条件的标签。例如以下命令,将查找所有以“HTML”开头的标签,并跳转至第一个匹配标签:

:tag /^HTML*

而以下命令,将会显示所有以“Color”开头的标签,你可以选择跳转至某一匹配标签:

:tjump /^Color*

tjump_regex

如果有多个匹配项存在,比如在几个文件中都定义了同名的函数,那么默认情况下,将优先跳转至当前文件中的匹配项。

使用:h tag-priority命令,可以查看关于优先级的帮助信息。

标签匹配列表(Tag Match List)

使用以下命令,将在屏幕底部显示标签匹配列表,然后根据您的选择在当前窗口中跳转至标签定义处:

:tselect [name]

在常规模式下,使用g]快捷键,将显示与光标下标签匹配的列表:

g-ctrl-]

使用以下命令,将在屏幕底部显示标签匹配列表,然后根据您的选择在新建窗口中跳转至标签定义处:

:stselect [name]

在常规模式下,使用Ctrl-Wg]快捷键,将在新建窗口中,针对光标下的标签执行:tselect命令。

使用以下命令,可以根据匹配列表中的顺序进行标签跳转:

缩写命令功能
:tn:tnext跳转至下一个匹配项
:tp:tprevious跳转至上一个匹配项
:tf:tfirst跳转至第一个匹配项
:tl:tlast跳转至最后一个匹配项

在进行标签跳转的过程中,将在屏幕底部显示其相对位置:

tag 1 of n or more

预览窗口(Preview Window)

当我们在代码中遇到某个函数,但不太清楚其具体含义,那么可以使用Ctrl-]键跳转至函数定义处,而此时当前屏幕将会显示该函数的具体实现代码;稍后我们仍需退回到之前的位置继续编写程序。

如果我们希望在编辑当前代码段的同时参考具体的函数定义,那么可以使用预览窗口(Preview Window)。

请注意,为了使用预览窗口,Vim必须包含QuickFix特性。

使用以下命令,将在屏幕上方的预览窗口中显示指定标签的定义,并且保持当前光标的位置不变。也即是说,你可以同时在屏幕上查看引用函数的代码和定义函数的代码。

:ptag [name]

如果当前已经存在一个预览窗口,那么将重用此窗口。

使用Ctrl-W}快捷键,也可以针对当前光标下的标签执行:ptag命令。

使用以下命令,将执行:tjump命令,并在预览窗口中显示标签:

:ptjump [name]

使用Ctrl-Wg}快捷键,也可以针对当前光标下的标签执行:ptjump命令。

使用以下命令,将执行:tselect命令,并在预览窗口中显示标签:

:ptselect [name]

使用以下命令,可以在预览窗口中进行标签跳转:

缩写命令功能
:ptn:ptnext在预览窗口中执行:tnext命令
:ptp:ptprevious在预览窗口中执行:tprevious命令
:ptf:ptfirst在预览窗口中执行:tfirst命令
:ptl:ptlast在预览窗口中执行:tlast命令
:pp:ppop在预览窗口中执行:pop命令
:pc:pclose关闭预览窗口

使用Ctrl-Wz快捷键,也可以关闭预览窗口。

位置列表(Location List)

使用以下命令,可以跳转到指定标签,并在当前窗口的新位置列表中加入匹配的标签:

:ltag [name]

使用以下命令,可以显示位置列表:

:lopen

例如,首先使用:ltag /^HTML*命令,查找所有以“HTML”开头的标签并将它们放入到位置列表当中;然后使用:lopen命令,查看位置列表。

ltag

使用以下命令,可以在位置列表中进行标签跳转:

缩写命令功能
:lop:lopen显示位置列表
:lne:lnext移动到下一个标签
:lp:lprevious移动到下一个标签
:lfir:lfirst移动到第一个标签
:lla:llast移动到最后一个标签
:lcl:lclose关闭位置列表

智能跳转(tjump)

看了这么多命令,是不是已经心烦意乱了?我们期待的理想状况应该是:如果只有一个匹配标签,那么直接跳转;如果发现多个匹配标签,则显示匹配列表。

使用:tjump {name}命令,如果只发现一个匹配标签,将直接跳转至标签定义处;如果发现多个匹配标签,那么将显示标签匹配列表。

在常规模式下,使用gCtrl-]快捷键,将针对光标下的标签执行:tjupm命令。

使用:stjump命令,则可以在新建窗口中执行:tjupm命令。

在常规模式下,使用Ctrl-W g Ctrl-]快捷键,将针对光标下的标签在新建窗口中执行:tjupm命令。

命令小结
命令快捷键
标签跳转:tagCtrl-]
新建窗口:stagCtrl-W]
预览窗口:ptagCtrl-W}
:tjumpgCtrl-]
新建窗口:stjumpCtrl-W g Ctrl-]
预览窗口:ptjumpCtrl-Wg}
标签跳转返回:popCtrl-T
预览窗口:ppop
查看标签栈:tags
显示匹配列表:tselectg]
新建窗口:stselectCtrl-Wg]
预览窗口:ptselect
添加位置列表:ltag
显示位置列表:lopen

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>