4

我最近开始在我的项目中使用 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/[对于那些可能想知道的人,这些是 ClearCase UCM 动态视图;既不/view/XXX/也不可/view/XXX/vobs/写]

4

1 回答 1

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()
于 2010-10-06T09:07:19.067 回答