代码之家  ›  专栏  ›  技术社区  ›  Mikeage

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

  •  4
  • Mikeage  · 技术社区  · 14 年前

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

    但我似乎找不到合适的维姆让它工作。

    编辑:我刚意识到这行不通,我不能写信给 root* . 相反,我想把我的主要CTAG文件存储在 ~/ctags/root*/tags ,其中的子目录之间有1:1的映射 ~/ctags/ /path/to/ [对于那些可能想知道的人,这些都是ClearCaseUCM动态视图;两者都不是 /view/XXX/ 也不 /view/XXX/vobs/ 可写的

    1 回复  |  直到 14 年前
        1
  •  2
  •   DrAl    14 年前

    如果你想要的是:

    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()