VIM中用于多个项目的标记路径

时间:2010-10-06 08:02:55

标签: ctags vim exuberant-ctags

我最近开始在我的项目中使用ctags。我目前有以下设置:

root/tags [contains all non-static tags]
root/foo/tags [contains static tags for the foo directory]
root/bar/tags [static]
root/something/else/tags [etc.]
...

我可以set tags=./tags,tags,/path/to/root/tags,一切都很完美。

但是,我的问题是我一次处理多个项目,所以我一次就有/path/to/root1/path/to/root2/path/to/root3。每次打开文件时我都不想手动设置标签;有什么方法可以根据我正在编辑的文件为/path/to/rootX添加标签吗? (即,如果我正在修改/path/to/root3/foo/x.c,请使用root3/tags中的标记?

就我而言,我的所有项目共享一个共同的父目录;我真正想要的是:

set tags=./tags,tags,substitute("%:p:h", "\(^\/path\/to\/.*/\).*$", "\1", "")

但我似乎无法找到合适的vimfu来使其发挥作用。

编辑:我刚才意识到这不起作用;我实际上无法写信给root*。相反,我想将我的主要ctags文件存储在~/ctags/root*/tags中,~/ctags//path/to/的子目录之间存在1:1的映射[对于那些可能想知道的人,这些是ClearCase UCM的动态视图; “/view/XXX//view/XXX/vobs/都不可写”

1 个答案:

答案 0 :(得分:2)

如果你想要的是:

set tags=./tags,tags,substitute("%:p:h", "\(^\/path\/to\/.*/\).*$", "\1", "")

尝试:

let &tags = './tags,tags,' . substitute(expand("%:p:h"), "\(^\/path\/to\/.*/\).*$", "\1", "")

:set命令没有扩展。此外,“%:p:h”不会自动展开,因此请使用expand()。参见:

:help :let-option
:help expand()