windows - vim 设置标签为绝对路径

标签 windows vim ctags

我从事多个项目,每个项目约有 3-500 万行代码。我在每个项目的根目录下都有一个标签文件。我还有一个在他们之间共享的工具目录。

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

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

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

我无法让 Vim 在 Shared 中找到标签文件

在我的 .vimrc 文件中,我有:

设置标签=tags;D:/共享 set tags=tags;,D:/Shared (感谢 romainl 发现了丢失的逗号!)

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

tags;应从 CWD 开始,向上遍历树,直到找到标记文件(在项目级别找到正确的标记文件)。

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

我正在使用 Exuberand Ctags v5.8

最佳答案

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 的“根”目录。

    当您不指定停止目录时,向上搜索将从当前目录(或任意起始目录)爬升文件系统的倒置树到文件系统的根目录。

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

如果你想让 Vim 找到 D:\Shared\tags无论您身在何处,只需将其显式添加到 tags选项。不是作为停止目录,而是作为特定位置:

set tags=tags;,D:/Shared/tags

现在,它说“从当前目录向上查找tags文件使用D:/Shared/tags”。


嗯……说了很多话只是为了解释对单个 , 的需求。 .

关于windows - vim 设置标签为绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560860/

相关文章:

c - 使用 golang 的 Windows Hook

c++ - Windows 8 拼写检查提供程序

git - vim打开多个文件

python - 有什么不能出现在括号内的吗?

vim - 可以让 ctags 遵循 #include 指令吗?

c++ - kdevelop 使用 ctags

c++ - 如何在c中进行基于事件的串口读取?

c++ - SetupDiEnumDeviceInterfaces 失败问题

vim : bounce to the nearest enclosing paren

ctags - 更新大型项目中刚刚修改的文件的 cscope db 和 ctags