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吗?如果我的代码库很大怎么办?我真的需要在每个目录中运行它吗?
您的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)
通常,您只使用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显然不会找到.