linux - 为什么 vim -t ctags 不够?我无法跳转到我想要的功能

标签 linux vim ctags ubuntu-11.10

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

最佳答案

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

关于linux - 为什么 vim -t ctags 不够?我无法跳转到我想要的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9325583/

相关文章:

regex - Vim 提取/复制文件中的所有多行模式

Vim:在替换之前交互式检查发生了什么?

vim - vim中如何反复搜索&替换一长串文本?

android - adb shell getevent 中 cdfinger_input 代表什么类型的事件

PHP5.3(作为Apache模块)无法写入/var/www/<project-name>/<document-root>/cache

c - 具有 posix 线程的数组的内积空间

linux - PhpStorm - 标记多行

vim - 通用 ctags 与 vim for c++

php - VIM:在命令行中显示 PHP 函数/类?