2009-11-17 56 views
8

我希望能够在我的项目的任意子目录中启动vim,并让它搜索tags文件的项目根目录,然后在外部不相关的目录中搜索项目树。设置复杂CTAGS搜索路径的提示

例如,让我们说我有以下几点:

~/projects/foo/bar/baz.c 
~/projects/foo/tags 
~/some/arbitrary/path/tags 

我想从bar子目录中打开baz.c,才能在搜寻时发现foo/tags,然后搜索some/arbitrary/path/tags如果找不到符号在foo/tags

现在我知道我可以这样做:

set tags=./tags,tags; 

完成第一个任务。它显然是分号,它告诉vim搜索根目录。然而无论是以下工作:

set tags=./tags,tags,~/some/arbitrary/path/tags; 
set tags=./tags,tags;~/some/arbitrary/path/tags 

第一个发现从~/some/arbitrary/path/tags只是符号,而第二个只发现在项目的根目录下的标签文件的符号。

任何人都知道如何做到这一点?我在Linux上买东西。

+0

嗯,我不认为该simicolon是正确的。你确定你在当前目录中,你认为你在?尝试:从vim内的密码。多年来,我一直使用多个标记,用逗号分隔,并使用相对路径和绝对路径。 – Benj 2009-11-18 17:26:20

回答

5

我用:

set tags=~/.tags 
set tags+=~/.vim/tags/cpp 
set tags+=~/src/git/gitsrc/tags 
" and so on... 

对于特定项目的根中生成代码:

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 

我从C++ code completion vim tip适应这种设置。

+1

将set命令分成多行解决了我的问题。我最后在''.vimrc''中设置了'set tags = tags;',然后在vim中输入':set tags + =〜/ some/arbitrary/path/tags'。 – 2009-12-07 07:39:15

0

用您的家的路径替换代字号。

+0

对不起,不起作用。我试过'set tags =。/ tags,tags,/ home/myuser/some/arbitrary/path/tags;'和set tags =。/ tags,tags;/home/myuser/some/arbitrary/path /标签' – 2009-11-17 15:01:53

+0

你怎么测试它?究竟发生了什么?我在我的一个编程目录中创建了一个标签文件,编辑我的.vimrc文件以在“set tags”中包含该路径,使用代字号作为起点。然后,我在我的主目录中创建了一个虚拟文件test.c(因此,不在带有标签文件的目录中),编写了将列在标签文件中的函数的名称,并按下“ctrl-” “将光标放在该功能上。在我认为应该达到的地方。 – Derek 2009-11-17 15:06:39

+0

我在vim中手动设置搜索路径。我通过查找两个符号进行测试,其中一个符号来自同一项目中的单独文件,其标记文件是项目根目录中的几个目录,然后从任意路径的外部标记文件中查找符号。根据我使用的路径版本,我会找到一个符号,或者另一个,但从来都不是。 – 2009-11-17 22:01:30

0

您的第一个“设置标签”选项适用于Linux。 (就像之前我做过的那样,我只是重新创建了它。)在标记选项中可以有许多不同的路径,包括绝对路径和相对路径。但是,在第二个中,列表中间有一个分号,这是不正确的。事实上,你不需要任何分号。我也会用绝对路径替换〜以防万一,并将分号全部删除。每条路径之间只有逗号。

哦,要搜索标签文件的目录,您需要“../tags”,而不是“./tags”。一个点表示当前目录,两个点表示目录与你所在的位置相同。

+0

你能发布到底是如何重新创建它,因为我似乎无法让它工作。 – 2009-11-17 15:04:43

+0

您是从项目根目录还是从子目录打开文件?我从项目的子目录中打开文件,而不是项目根目录。 – 2009-11-17 15:06:43

+0

这是我的: 设置标记=。/标记,。/标记,标记,标记,〜/ programming/mandelbrot/main /标记 最后一个目录是绝对路径。正如我上面提到的,它不会搜索任何父目录,因为我没有使用../tags。 – Derek 2009-11-17 15:08:35

0

标签文件是否始终在项目/目录中?如果是这样,您不需要“搜索”来查找标签文件。路径只是硬编码到这样的两个文件:

set tags=/home/you/projects/foo/tags;/home/you/some/arbitrary/path/tags 

如果没有,你可以尝试这样的事:

set tags=/home/you/projects/**;/home/you/projects,/home/you/some/arbitrary/path/tags 

我没有尝试这样做,所以你可能有它的实验。它有一些工作前提。请参阅:帮助文件搜索。

0

的一套标签的单行语法应为:

set tags=./tags,tags;,~/some/arbitrary/path/tags 

逗号是后失踪的“标签”;