【问题标题】:Why is vim -t ctags not enough? I cannot jump to the function I want为什么 vim -t ctags 不够?我无法跳转到我想要的功能
【发布时间】:2012-02-17 09:15:29
【问题描述】:

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

【问题讨论】:

  • 你不能只使用简单的搜索 va_start() 吗?
  • 是的,我可以在google和其他搜索引擎上搜索,但我想做的是跳转到va_start()的定义并阅读va_start()的代码

标签: linux vim ctags ubuntu-11.10


【解决方案1】:

当您使用“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 可能包含很多文件,因此 tag 文件的大小会大大增加,因此,每次搜索要跳转到它的符号时,它可能会慢得多!

【讨论】:

  • stdarg.h 是 STL 的一部分???!另外+1为那个答案。请注意,标签生成会比较慢,但 vim 会通过假设标签文件首先排序来尝试查找标签。如果是这种情况,那么到达标签所需的时间取决于日志(标签数量),所以它不应该那么慢。
  • @Benoît : 我的错,我会解决的 :)
  • @XavierT。如果我修改了一些文件,并且以前的索引不正确,因为函数定义可能不在那个位置,-Ra会刷新这种索引吗?
  • @thinke365:我不认为-a这意味着append是更新索引的正确方法,因为你最终会得到类似“function foo() line 10 " 和 "function foo() line 15" 在你的标签文件中:第 10 行是你修改前的定义。
猜你喜欢
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 2019-02-17
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多