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

时间:2012-12-29 21:56:18

标签: c vim project

ctags 可以从层次结构中的目录中标记符号,还是仅限于为当前目录和子目录创建标记?

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

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

感谢

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您不仅限于在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的文件,当它从您所在的目录层次结构向上移动时。

您可以将这两种技术结合起来,以获得项目本地标签文件,然后将“全局”标签文件组合起来,而不是经常更新。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

ctags(好吧,至少exctags)可以为你想要的目录树创建标签。只需运行

exctags -R dir1 dir2 ...

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

确保从您在vim path/to/file.c文件中创建的同一目录中运行tags