Vim:tnext没有将光标移动到下一个标签

时间:2017-01-22 20:54:28

标签: vim ctags

我尝试使用带有vim的ctags,我发现了以下问题:

首先,让我们看看下面的图片:enter image description here 如果按C-],光标将在第7行移动,如下所示:enter image description here

但是如果我输入命令:tn光标仍然在第7行而不是第14行,其中下一个标记是。为什么会发生这种情况,我该如何解决这个问题呢?如果您查看左下方的以下图片enter image description here,则会显示:"标记2的3"所以这意味着:tn有效,我认为,但光标不会移动。

1 个答案:

答案 0 :(得分:3)

如果您查看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提供一行:列信息,它只提供搜索模式。由于它是所有三个标签的相同搜索模式,因此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

总之,您应该使用tags-n选项生成-u。类似的东西:

$ ctags -Rnu .

请参阅$ man ctags