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