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

Cra*_*lus 5 linux vi vim cygwin ctags

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

/top  
   /second  
       /core  
           a.pl  
           b.pl  
           c.pl  
       /common  
           d.pl  
           e.pl  
       /util  
           f.pl  
           g.pl  
           h.pl    
Run Code Online (Sandbox Code Playgroud)

我应该在哪里运行,ctags以便我可以通过跳转到函数定义vi

比如我有:

/dir
   /perl  
      a.pl  
Run Code Online (Sandbox Code Playgroud)

我在dir命令中运行ctags -R perl但是a.pl我无法跳转到同一文件中存在的函数定义.
如果我ctags -R . perl目录里面做了它.

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

rom*_*inl 7

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

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

set tags=./tags;/,tags;/
Run Code Online (Sandbox Code Playgroud)

它的工作原理就像一个在@ GLTS的回答有一个有趣的转折:因的;/一部分,Vim的抬起头,直到/一个tags文件.假设您正在编辑g.pl,Vim将正确使用您的tags文件second.

:h tags
:h ctags
Run Code Online (Sandbox Code Playgroud)


glt*_*lts 5

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

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

$ cd ~/src/vim-7.3
$ ctags -R
Run Code Online (Sandbox Code Playgroud)

就这样.

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

:cd ~/src/vim-7.3
:!ctags -R
Run Code Online (Sandbox Code Playgroud)

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

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

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