设置复杂CTAGS搜索路径的提示

时间:2009-11-17 14:32:12

标签: linux vim ctags

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

例如,假设我有以下内容:

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

我想在baz.c子目录中打开bar,让它向上搜索以找到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上买路。

5 个答案:

答案 0 :(得分: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 :(得分:0)

将波浪号替换为您家的路径。

答案 2 :(得分:0)

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

哦,要在目录中搜索标签文件,你需要“../tags”,而不是“./tags”。单个点表示当前目录,两个点表示从您所在位置开始的目录。

答案 3 :(得分: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

我没试过这个,所以你可能要试试它。它有一些前提条件可供使用。请参阅:帮助文件搜索。

答案 4 :(得分:0)

set标签的单行语法应为:

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

“tags;”

后,逗号丢失了