5

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

/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 . 目录中做了,perl它就起作用了。

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

4

2 回答 2

9

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

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

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

它的工作原理类似于@glts 答案中的一个有趣的转折:由于;/部分原因,Vim 向上查找直到/找到一个tags文件。假设您正在编辑g.pl,Vim 将正确使用tags位于second.

:h tags
:h ctags
于 2013-05-19T15:59:48.170 回答
6

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

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

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

就这样。

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

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

检查您的'tags'设置是否正确。默认为./tags,tags,表示 Vim 将tags在当前目录中查找文件。

确保:h 'tags'完整阅读。tags你可以通过给出包含通配符的模式来指示 Vim 在目录树的深处寻找文件。

还有一件事:要使这种方法起作用,Vim 的当前工作目录必须始终保持在根目录下。如果您有一些选项,例如'autochdir'自己设置或不断切换目录,那么tags显然不会找到。

于 2013-05-19T15:20:34.713 回答