Vim :tnext 不会将光标移动到下一个标签
Vim :tnext doesn't move cursor to the next tag
我尝试将 ctags 与 vim 一起使用,但我发现了以下问题:
首先我们来看下图:
如果我按 C-],那么光标将移动到第 7 行,如您所见:
但是如果我输入命令 :tn 光标仍然在第 7 行而不是第 14 行,下一个标记所在的位置。为什么会发生这种情况,我该如何解决?如果您查看左下角的下图 ,它会显示:"tag 2 of 3" 所以这意味着 :tn 有效,我认为,但光标没有移动。
如果您查看 tags
文件,您会发现 fc()
的三个定义是相同的:
fc pam.cpp /^ void fc() {$/;" f class:A
fc pam.cpp /^ void fc() {$/;" f class:B
fc pam.cpp /^ void fc() {$/;" f class:C
默认情况下,Ctags 不向 Vim 提供 line:column 信息,它仅提供搜索模式。由于所有三个标签的搜索模式相同,Vim 始终执行相同的搜索并始终在相同的位置结束。使用 :tag fc
、<C-]>
、:tnext
、:tselect
或他们的任何朋友都没关系。
使用 -n
选项,Ctags 输出行号而不是搜索模式:
fc pam.cpp 14;" f class:B
fc pam.cpp 21;" f class:C
fc pam.cpp 7;" f class:A
更好,因为 Vim 现在可以跳转到正确的行,但标签的顺序不正确。解决此问题的一种方法是使用 -u
选项:
A pam.cpp 5;" c file:
fc pam.cpp 7;" f class:A
B pam.cpp 12;" c file:
fc pam.cpp 14;" f class:B
C pam.cpp 19;" c file:
fc pam.cpp 21;" f class:C
总之,您应该使用 -n
和 -u
选项生成 tags
。类似于:
$ ctags -Rnu .
参见 $ man ctags
。
我尝试将 ctags 与 vim 一起使用,但我发现了以下问题:
首先我们来看下图:
但是如果我输入命令 :tn 光标仍然在第 7 行而不是第 14 行,下一个标记所在的位置。为什么会发生这种情况,我该如何解决?如果您查看左下角的下图
如果您查看 tags
文件,您会发现 fc()
的三个定义是相同的:
fc pam.cpp /^ void fc() {$/;" f class:A
fc pam.cpp /^ void fc() {$/;" f class:B
fc pam.cpp /^ void fc() {$/;" f class:C
默认情况下,Ctags 不向 Vim 提供 line:column 信息,它仅提供搜索模式。由于所有三个标签的搜索模式相同,Vim 始终执行相同的搜索并始终在相同的位置结束。使用 :tag fc
、<C-]>
、:tnext
、:tselect
或他们的任何朋友都没关系。
使用 -n
选项,Ctags 输出行号而不是搜索模式:
fc pam.cpp 14;" f class:B
fc pam.cpp 21;" f class:C
fc pam.cpp 7;" f class:A
更好,因为 Vim 现在可以跳转到正确的行,但标签的顺序不正确。解决此问题的一种方法是使用 -u
选项:
A pam.cpp 5;" c file:
fc pam.cpp 7;" f class:A
B pam.cpp 12;" c file:
fc pam.cpp 14;" f class:B
C pam.cpp 19;" c file:
fc pam.cpp 21;" f class:C
总之,您应该使用 -n
和 -u
选项生成 tags
。类似于:
$ ctags -Rnu .
参见 $ man ctags
。