vim怎么跳转到函数定义处_VIM学习笔记 匹配多个标签(Matching Multiple Tags)

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

标签搜索(Tag Search Pattern)

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

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

62b5af27a853ce23328718317d4c3284.png

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

:tag /^HTML*

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

:tjump /^Color*

700de4cd3e48bfacff67b06d65754643.png

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

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

标签匹配列表(Tag Match List)

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

:tselect [name]

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

84214ad676dbc4f8e28cbfe51f2b49a6.png

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

:stselect [name]

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

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

  • :tnext跳转至下一个匹配项
  • :tprevious跳转至上一个匹配项
  • :tfirst跳转至第一个匹配项
  • :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]

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

  • :ptnext在预览窗口中执行:tnext命令
  • :ptprevious在预览窗口中执行:tprevious命令
  • :ptfirst在预览窗口中执行:tfirst命令
  • :ptlast在预览窗口中执行:tlast命令
  • :ppop在预览窗口中执行:pop命令
  • :pclose关闭预览窗口

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

位置列表(Location List)

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

:ltag [name]

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

:lopen 

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

2527cf229aaeecbbf8814a6d4cd09582.png

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

  • :lnext移动到下一个标签
  • :lprevious移动到下一个标签
  • :lfirst移动到第一个标签
  • :llast移动到最后一个标签
  • :lclose关闭位置列表

智能跳转(tjump)

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

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

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

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

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

7d2ae8509c4a39e7d5d1259ed25ba347.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值