我尝试使用带有vim的ctags,我发现了以下问题:
首先,让我们看看下面的图片: 如果按C-],光标将在第7行移动,如下所示:
但是如果我输入命令:tn光标仍然在第7行而不是第14行,其中下一个标记是。为什么会发生这种情况,我该如何解决这个问题呢?如果您查看左下方的以下图片,则会显示:"标记2的3"所以这意味着:tn有效,我认为,但光标不会移动。
答案 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
。