如何在大型代码库中运行ctags?

时间:2013-05-19 15:14:13

标签: linux vim cygwin vi ctags

假设我有一个代码目录结构如下:

/top  
   /second  
       /core  
           a.pl  
           b.pl  
           c.pl  
       /common  
           d.pl  
           e.pl  
       /util  
           f.pl  
           g.pl  
           h.pl    

我应该在哪里运行ctags,以便通过vi跳转到功能定义?

例如我有:

/dir
   /perl  
      a.pl  

我在dir命令ctags -R perl中运行但在a.pl中我无法跳转到同一文件中存在的函数定义。
如果我在ctags -R . 内部{/ 1}}目录中运行了perl

所以我无法理解这种模式。我应该在ctags中运行core, common,util吗?如果我的代码库很大怎么办?我真的需要在每个目录中运行它吗?

2 个答案:

答案 0 :(得分:6)

您的tags文件应该在您的代码的第一个共同祖先(在您的情况下为second$ ctags -R .生成。

我建议您将此行添加到~/.vimrc,以便让Vim始终找到您的tags文件,无论您在项目中的哪个位置,无论“当前目录”是什么是:

set tags=./tags;/,tags;/

它的效果与@ glts的回答类似,有一个有趣的转折:由于;/部分,Vim向/文件查找tags。假设您正在修改g.pl,Vim会正确使用位于tags的{​​{1}}文件。

second

答案 1 :(得分:5)

通常,您只需使用位于项目根目录中的一个tags文件。

例如,要标记位于~/src/vim-7.3的整个Vim自己的源代码,您可以导航到该目录并在那里生成标记文件。

$ cd ~/src/vim-7.3
$ ctags -R

就是这样。

当然,你可以在Vim内部做同样的事情。启动Vim,然后键入:

:cd ~/src/vim-7.3
:!ctags -R

检查您是否具有正确的'tags'设置。默认值为./tags,tags,这意味着Vim将在当前目录中查找tags文件。

请务必完整阅读:h 'tags'。您可以通过提供包含通配符的模式来指示Vim在目录树深处查找tags个文件。

还有一件事:对于这种工作方式,Vim当前的工作目录必须始终保持在根目录下。如果你有'autochdir'这样的选项设置或不断自己切换目录,那么显然找不到tags