假设我有一个代码目录结构如下:
/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
吗?如果我的代码库很大怎么办?我真的需要在每个目录中运行它吗?
答案 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
。