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

我最近开始在我的项目中使用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.]
...

我可以设置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 / nor / view / XXX / vobs /是否可写]

最佳答案 如果你想要的是:

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

尝试:

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

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

:help :let-option
:help expand()
点赞