2017-01-22 101 views
1

我试图用CTAGS用vim,我发现了以下问题:的Vim:T下一页不将光标移动到下一个标签

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

但是,如果我键入命令:tn光标仍然在第7行而不是第14行,下一个标记是。为什么会发生这种情况,我该如何解决这个问题?如果你看下面的图片enter image description here在左下角显示:“tag 2 of 3”,这意味着:tn的作品,我认为,但光标不移动。

+0

再次阅读':help:tnext'。 – romainl

+0

@romainl,它表示:跳转到[count]下一个匹配标签,默认情况下[count]为1。我读了标签 - !部分,我看到如果标签在当前文件中,将执行以下操作:goto标签。这正是我所期待的,但不幸的是它不起作用。我错过了什么? – IonutC

+0

您可以通过':tselect'显示列表来理解'3的标签2'。 –

回答

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 

默认情况下,C标签不提供行:列信息Vim的,它只是提供了一个搜索模式。由于所有三个标签都是相同的搜索模式,因此Vim始终执行相同的搜索,并始终在同一个地方结束。如果您使用:tag fc,<C-]>,:tnext,:tselect或他们的任何朋友,则无关紧要。

随着-n选项,C标签输出行号,而不是搜索模式:

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

+0

我以为Vim会看到他们来自不同的类,但是我读了':help ctags',并且我看到';''被Vi解释为评论的开始(我不知道)以下内容将被忽略,Vim将不会看到它们来自不同的类别,现在这一切都是有道理的,谢谢你的回答 – IonutC

+0

请参阅我的编辑 – romainl

+0

Vim根本不关心类或除文件名之外的任何内容ex执行的命令 – romainl

相关问题