如果您明确知道某个标签的名称,那么可以使用匹配单个标签章节中介绍的命令直接跳转。本节将继续介绍搜索和匹配多个标签的操作。
我们可以在文件的任意位置上执行:tag
或:tjump
命令,以跳转至指定的标签定义处。这样就省去了将光标移动至标签之上,然后再点击跳转快捷键的繁琐。
如果启用了wildmenu选项,那么在输入命令时,我们只需要输入标签的开头几个字母,然后点击Tab键即可以自动补全标签名。
通过在命令中使用正则表达式,可以查找符合条件的标签。例如以下命令,将查找所有以“HTML”开头的标签,并跳转至第一个匹配标签:
:tag /^HTML*
而以下命令,将会显示所有以“Color”开头的标签,你可以选择跳转至某一匹配标签:
:tjump /^Color*
如果有多个匹配项存在,比如在几个文件中都定义了同名的函数,那么默认情况下,将优先跳转至当前文件中的匹配项。
使用:h tag-priority
命令,可以查看关于优先级的帮助信息。
使用以下命令,将在屏幕底部显示标签匹配列表,然后根据您的选择在当前窗口中跳转至标签定义处:
:tselect [name]
在常规模式下,使用g]快捷键,将显示与光标下标签匹配的列表:
使用以下命令,将在屏幕底部显示标签匹配列表,然后根据您的选择在新建窗口中跳转至标签定义处:
:stselect [name]
在常规模式下,使用Ctrl-Wg]快捷键,将在新建窗口中,针对光标下的标签执行:tselect命令。
使用以下命令,可以根据匹配列表中的顺序进行标签跳转:
缩写 | 命令 | 功能 |
---|---|---|
:tn | :tnext | 跳转至下一个匹配项 |
:tp | :tprevious | 跳转至上一个匹配项 |
:tf | :tfirst | 跳转至第一个匹配项 |
:tl | :tlast | 跳转至最后一个匹配项 |
在进行标签跳转的过程中,将在屏幕底部显示其相对位置:
tag 1 of n or more
当我们在代码中遇到某个函数,但不太清楚其具体含义,那么可以使用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快捷键,也可以关闭预览窗口。
使用以下命令,可以跳转到指定标签,并在当前窗口的新位置列表中加入匹配的标签:
:ltag [name]
使用以下命令,可以显示位置列表:
:lopen
例如,首先使用:ltag /^HTML*
命令,查找所有以“HTML”开头的标签并将它们放入到位置列表当中;然后使用:lopen
命令,查看位置列表。
使用以下命令,可以在位置列表中进行标签跳转:
缩写 | 命令 | 功能 |
---|---|---|
:lop | :lopen | 显示位置列表 |
:lne | :lnext | 移动到下一个标签 |
:lp | :lprevious | 移动到下一个标签 |
:lfir | :lfirst | 移动到第一个标签 |
:lla | :llast | 移动到最后一个标签 |
:lcl | :lclose | 关闭位置列表 |
看了这么多命令,是不是已经心烦意乱了?我们期待的理想状况应该是:如果只有一个匹配标签,那么直接跳转;如果发现多个匹配标签,则显示匹配列表。
使用:tjump {name}
命令,如果只发现一个匹配标签,将直接跳转至标签定义处;如果发现多个匹配标签,那么将显示标签匹配列表。
在常规模式下,使用gCtrl-]快捷键,将针对光标下的标签执行:tjupm命令。
使用:stjump
命令,则可以在新建窗口中执行:tjupm命令。
在常规模式下,使用Ctrl-W g Ctrl-]快捷键,将针对光标下的标签在新建窗口中执行:tjupm命令。
命令 | 快捷键 | ||
---|---|---|---|
标签跳转 | :tag | Ctrl-] | |
新建窗口 | :stag | Ctrl-W] | |
预览窗口 | :ptag | Ctrl-W} | |
:tjump | gCtrl-] | ||
新建窗口 | :stjump | Ctrl-W g Ctrl-] | |
预览窗口 | :ptjump | Ctrl-Wg} | |
标签跳转返回 | :pop | Ctrl-T | |
预览窗口 | :ppop | ||
查看标签栈 | :tags | ||
显示匹配列表 | :tselect | g] | |
新建窗口 | :stselect | Ctrl-Wg] | |
预览窗口 | :ptselect | ||
添加位置列表 | :ltag | ||
显示位置列表 | :lopen |