Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么vim-t ctags不够?我不能跳转到我想要的函数_Linux_Vim_Ctags_Ubuntu 11.10 - Fatal编程技术网

Linux 为什么vim-t ctags不够?我不能跳转到我想要的函数

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

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

当您使用“ctags-R目录名”时,您仅为目录目录目录名的内容编制符号索引

这里发生的事情是,“va_args”是在stdarg.h中定义的,它是C标准库的头

每次使用外部库中的符号时,都会遇到相同的问题

因此,如果希望所有符号都可用,除了程序之外,还需要为外部库的代码编制索引

这意味着:

  • 源代码应该是可用的(并非总是如此)

  • 在系统上找到文件所在的位置后,应将其解析为包含在“标记”文件中

  • 因此,一旦执行了
    ctags-rprojectpath
    ,就可以执行
    ctags-Ra/usr/include
    将/usr/include的所有内容附加到标记文件中

    更一般地说,您希望执行类似于
    ctags-Ra librarySourcePath的操作,以使程序中使用的所有符号都可用

    编辑:
    但是要小心:/usr/include可能包含大量的文件,因此
    标记的大小可能会大大增加,因此,每次搜索要跳转到的符号时,速度可能会慢得多

    你就不能用简单的搜索va_start()吗?是的,我可以在谷歌和其他搜索引擎上搜索,但我想做的是跳转到va_start()的定义,并阅读va_start()的代码。
    stdarg.h
    是STL的一部分吗???!另外,该答案为+1。请注意,标记生成速度会较慢,但vim会通过假定标记文件先排序来尝试查找标记。如果是这样的话,那么到达一个标记所需的时间取决于日志(标记的数量),所以它不应该那么慢。@Benoît:我的错,我会解决:)@XavierT。如果我修改了一些文件,而Former索引不正确,因为函数定义可能不在该位置,-Ra会刷新此类索引吗?@thinke365:我不认为
    -a
    是更新索引的正确方法,这意味着
    append
    ,因为最终会出现类似“function foo()line 10”和标记文件中的“function foo()第15行”:第10行是修改前的定义。