2012-02-17 83 views
-1

ctags -R dirName,vim -t标记非常强大,因为在这两个命令之后,您现在可以在该项目的代码之间导航,例如,您可以跳转到某些函数的代码使用:tag functionName,但该操作仍然存在一些缺陷,如通常情况下一个源代码可能包含某些函数调用(如va_start()),而此代码未包含在dirName目录中,因此索引没有为这个函数生成,并且你不能导航到va_start()的定义,但是需要导航到这个函数?如何找到该代码?我甚至不知道va_start()的确切位置。如何为系统功能或第三方功能生成ctags索引?为什么vim -t ctags不够?我不能跳转到我想要的功能

+0

你不能只使用简单的搜索va_start()? – hovanessyan 2012-02-17 09:20:32

+0

是的,我可以搜索谷歌和其他搜索引擎,但我想要做的就是跳到va_start()的定义并读取va_start()的代码 – thinke365 2012-02-17 09:22:34

回答

4

当您使用“ctags -R dirName”时,您只是索引目录dirName的内容的符号。

发生了什么“va_args”在stdarg.h中定义,它是C标准库的标头。

每当您使用外部库中的符号时,都会遇到同样的问题。

所以,如果你想让所有的符号都可用,除了你的程序之外,你还可以索引外部库的代码。

这意味着:

  1. 的源代码应该可以(这是情况并非总是如此)

  2. 一旦你有你的系统文件所在,它应该被解析到上找到被包含在你的“标签”文件中。

因此当你执行ctags -R projectPath可以执行ctags -Ra /usr/include追加的/ usr/include目录到您的标记文件中的所有内容。

更一般地,你想要做一些像ctags -Ra librarySourcePath这样的操作来获得程序中使用的所有符号。

编辑: 但要小心:/ usr/include可能包含大量文件,因此您的文件大小可能会大大增加,因此,每次搜索符号时都会跳转到该文件,它可能会慢很多!

+0

'stdarg.h'是STL的一部分? ??!对于该答案,额外+1。请注意,标签生成速度会比较慢,但vim会通过假设标签文件首先排序来尝试查找标签。如果是这种情况,那么达到标签所需的时间取决于日志(标签数量),所以它不应该那么慢。 – Benoit 2012-02-17 12:34:08

+0

@Benoît:我的不好,我会修复:) – 2012-02-17 13:16:04

+0

@XavierT。如果我修改了一些文件,并且formmer索引不正确,因为函数的定义可能不在这个位置,那么-Ra会刷新这样的索引吗? – thinke365 2012-09-09 21:09:15