我最近开始在我的项目中使用 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/
的子目录之间存在 1:1 映射和 /path/to/
[对于那些可能想知道的人,这些是 ClearCase UCM 动态 View ;都不是 /view/XXX/
也不是 /view/XXX/vobs/
可写]
最佳答案
如果你想要的是:
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()
关于ctags - VIM 中多个项目的标签路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870489/