我遇到的问题是vim/gvim中的ctags很多时候都会将我带到前向声明而不是函数的实际定义.
有办法解决这个问题吗?
我认为最简单的方法是使用"g ctrl-]"而不是"ctrl-]".如果只有一场比赛,它会带你到那里.如果有多个匹配项,它会将它们全部列出,让您选择所需的匹配项,如:tselect.两全其美的.:)
您应该能够使用tn
和tp
跳转到各种匹配标签.
按此^]
即可转到第一场比赛.
如果那不是您想要的匹配,请键入:tn
以转到下一个.
如果键入的:tn
次数过多,则可以键入:tp
以返回上一个.
我相信Vim默认会转到标签文件中的第一个标签.如果您愿意,可以选择不同的一个:使用:tj
(类似于:tselect,但如果只有一个匹配则自动跳转)或Ctrl-]
后面跟着:tn
).
更改默认值的唯一方法是更改标记文件的顺序,但我不相信ctags提供了一个命令行选项来执行此操作.
这并不像听起来那么难,因为你基本上需要一个打开标签文件的脚本,按照'kind'标签对其进行排序并再次将其写回.在"类"的标签是描述它是否是一个函数(f),函数原型(P),宏单个字符,一个枚举名称等等等等等等.如果你使用Linux,那么它可能,在理论上,就像这样简单:
#!/bin/sh ctags -R -f - . | tac > tags
由于tac
反转了文件中行的顺序,因此这将自动将定义放在第一位.但是,由于需要维护标头并且Vim更喜欢对标签文件进行排序,因此它会变得有点复杂,所以最好通过文件并按正向顺序对第一个条目(标签名称)进行排序,然后以相反的顺序排序.因此,更复杂的事情可能会更好.
我为无耻的插件道歉,但我写了一个(间接)做你需要的Vim插件.它用于为函数名,宏,枚举等添加许多额外的突出显示组.但是,这样做的其中一个是重新排序标记文件,以便函数实现在函数声明之前,从而实现你想要的(我和你有同样的需求).如果你不想要任何突出显示功能,你可能很容易将它全部剥离:它是一个相当简单的python程序和一个更简单的Vim脚本,可从我的网站获得.