vim用绝对路径设置标签

时间:2014-02-04 18:48:17

标签: windows vim ctags

我在多个项目上工作,每个〜3-5百万行代码。我在每个项目的根目录下都有一个标签文件。我还有一个在所有这些工具之间共享的工具目录。

disk1
 |
 +--Proj A
 |
 +--Proj B
 |
 +--Shared

disk2
 |
 +--Proj C
 |
 +--Proj D

使用标签时,我希望Vim首先搜索项目根目录下的标签文件,然后在标签文件中搜索Proj X,然后在Shared <中搜索标签文件/ p>

我无法让Vim在Shared

中找到代码文件

在我的.vimrc文件中我有:

set tags = tags; D:/ Shared set tags=tags;,D:/Shared(感谢romainl删除逗号!)

但是Vim只搜索本地项目标签文件,而不是共享文件。

tags;应该从CWD开始并遍历树,直到找到一个标签文件(在项目级别找到正确的文件)。

D:/Shared是一个显式路径,应该在该目录中找到标签文件但是没有这样做(我已经检查过,它确实存在)。

我正在使用Exuberand Ctags v5.8

1 个答案:

答案 0 :(得分:1)

set tags=tags;D:/Shared

表示“从当前目录中查看向上 tags文件,直至到达D:/Shared”。

如果您在磁盘2上的项目C中工作(让我们称之为磁盘E:),Vim将从不访问D:/Shared,因为有两件事:

  1. 向上搜索不是递归的。

    如果在“当前目录”的根目录下找不到tags文件,Vim会尝试在其父目录的根目录找到一个文件,依此类推,直到它到达最顶层的父目录或您指定的目录后分号。因此,假设您正在编辑E:\ProjectC\path\to\some\file,您不能指望Vim在该路径之外找到tags文件。 Vim将依次搜索以下tags个文件,顺便说一句,从不找到假设的D:\Shared

    E:\ProjectC\path\to\some\tags <-- KO
    E:\ProjectC\path\to\tags      <-- KO
    E:\ProjectC\path\tags         <-- KO
    E:\ProjectC\tags              <-- OK!
    E:\tags                       <-- KO
    

    它找不到上面没有列出的任何tags文件。

  2. 无论如何,Windows都没有相应的UNIX“root”目录。

    如果未指定停止目录,则向上搜索会将文件系统的倒置树从当前目录(或任意启动目录)爬到文件系统的根目录。

    假设您仍在编辑E:\ProjectC\path\to\some\file,向上搜索最终将直接在{/ 1>} {/ 1}}的路径中的每个父目录下查找停止目录D:\Shared显然永远不会找到它。

  3. 如果您希望Vim在任何地方找到E:\,您只需要明确地将其添加到D:\Shared\tags选项中。不是停止目录,而是作为特定位置:

    tags

    现在,它说“向上查看当前目录中的set tags=tags;,D:/Shared/tags 文件使用tags”。


    嗯......这只是为了解释单个D:/Shared/tags的必要性。