C 如何在vim中实现跨目录的符号引用?

C 如何在vim中实现跨目录的符号引用?,c,vim,project,C,Vim,Project,ctags是否也可以标记层次结构中上一个目录中的符号,或者仅限于为当前目录和子目录创建标记 基本上,我正在寻找类似VisualStudio的符号交叉引用,它对理解外来源代码流非常有帮助 如果不是Vim,那么我应该使用哪个其他编辑器 谢谢CTAG只会递归到子目录。但是您所要做的就是在项目主目录中运行ctags-R.,它将为整个项目创建一个标记文件。ctags只会递归到子目录。但是您所要做的就是在项目主目录中运行ctags-R.,它将为整个项目创建一个标记文件。ctags(至少是exctags)可以

ctags是否也可以标记层次结构中上一个目录中的符号,或者仅限于为当前目录和子目录创建标记

基本上,我正在寻找类似VisualStudio的符号交叉引用,它对理解外来源代码流非常有帮助

如果不是Vim,那么我应该使用哪个其他编辑器


谢谢

CTAG只会递归到子目录。但是您所要做的就是在项目主目录中运行
ctags-R.
,它将为整个项目创建一个
标记文件。

ctags只会递归到子目录。但是您所要做的就是在项目主目录中运行
ctags-R.
,它将为整个项目创建一个
标记文件。

ctags(至少是exctags)可以为您想要的任意多个目录树创建标记。简单运行

exctags -R dir1 dir2 ...
然后vim知道你需要的所有符号。例如,除了您自己的源目录之外,其中一个目录可以是
/usr/include

确保从创建
标记的同一目录中运行
vim path/to/file.c

ctags(至少是exctags)可以为任意多个目录树创建标记。简单运行

exctags -R dir1 dir2 ...
然后vim知道你需要的所有符号。例如,除了您自己的源目录之外,其中一个目录可以是
/usr/include


确保从创建
标记的
文件所在的同一目录运行
vim path/to/file.c

虽然它有类似的用户界面要求它做事情,所以您需要实际指定“向下目录”,我发现
cscope
是一个非常好的工具,whcih做了ctags所做的一切,还有更多

虽然它有类似的用户界面要求它做它的事情,所以你需要实际指定“下一步目录”,我发现
cscope
是一个非常好的工具,它做了ctags所做的一切,还有更多

您不限于在Vim中指定一个标记文件。这是其他答案的替代方案;您只需执行以下操作:

set tags=tags,~/wintags,c:/path/to/moretags/etc
因此,当您只想更新本地标记时,不需要花时间重新生成单片标记文件

关于OP在另一个回答中的评论


是的,这是正确的,但当我打开一个文件(比如proj/dir1/def.c)并按ctrl+]键时,如果函数名是在proj/dir2/abc.c中定义的,我会发现标记未找到:(

您还可以在“proj”根目录下为所有项目创建一个标记文件:

set tags=tags;c:/path/to/proj
这将使用第一个名为
tags
的文件,当它从您所在的目录层次结构向上移动时,它会找到该文件


您可以将这两种技术结合起来,创建一个项目本地标记文件,然后创建一个不经常更新的“全局”标记文件。

您不局限于在Vim中指定一个标记文件。这是其他答案的替代方法;您可以执行以下操作:

set tags=tags,~/wintags,c:/path/to/moretags/etc
因此,当您只想更新本地标记时,不需要花时间重新生成单片标记文件

关于OP在另一个回答中的评论


是的,这是正确的,但当我打开一个文件(比如proj/dir1/def.c)并按ctrl+]键时,如果函数名是在proj/dir2/abc.c中定义的,我会发现标记未找到:(

您还可以在“proj”根目录下为所有项目创建一个标记文件:

set tags=tags;c:/path/to/proj
这将使用第一个名为
tags
的文件,当它从您所在的目录层次结构向上移动时,它会找到该文件


您可以将这两种技术结合起来,创建一个项目本地标记文件,然后创建一个不经常更新的“全局”标记文件。

是的,这是正确的,但当我打开一个文件(如proj/dir1/def.c)并在proj/dir2/abc.c中定义的函数名上按ctrl+]时,我发现标记未找到:(ctags生成相对路径名。因此,vim中的当前目录应该是
proj
,以便标记文件指向正确的文件。也许您可以编写一个脚本,将
标记
文件的内容调整为指向绝对路径名,但我还没有尝试过。是的,这是正确的,但打开文件时请说proj/dir1/def.c,然后在proj/dir2/abc.c中定义的函数名上按ctrl+]键,则找不到标记:(ctags生成相对路径名。因此,vim中的当前目录应该是
proj
,以便标记文件指向正确的文件。也许您可以编写一个脚本,将
标记
文件的内容调整为指向绝对路径名,但我没有尝试过。