我最近开始在我的项目中使用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/
都不可写”
答案 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()