【问题标题】:vim set tags with absolute pathvim 用绝对路径设置标签
【发布时间】:2014-02-04 18:48:17
【问题描述】:

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

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

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

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

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

在我的 .vimrc 文件中:

set tags=tags;D:/Shared set tags=tags;,D:/Shared(感谢 romainl 发现了一个缺少的逗号!)

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

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

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

我正在使用 Exuberand Ctags v5.8

【问题讨论】:

  • 所以,我最终在磁盘的最根级别为共享组件创建了一个标签文件。这样tags=tags; 行为就可以找到它,因为它会一直向上遍历直到找到某些东西。但令人遗憾的是,我现在必须拥有共享标签文件的两个冗余副本,每个磁盘一份(磁盘 1 上的 Proj A 和 B,磁盘 2 上的 Proj C 和 D)——共享标签文件几乎是 1GB。我抱怨的不是空间(1GB 是花生),而是冗余......我觉得必须有更好的方法。

标签: windows vim ctags


【解决方案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 的“根”目录。

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

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

如果你想让 Vim 无论你在哪里都能找到D:\Shared\tags,你只需要明确地将它添加到tags 选项中。不是作为停止目录,而是作为特定位置:

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

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


嗯……为了解释需要一个 , 就说了很多话。

【讨论】:

  • 不错的收获!我并不是想将 D:/Shared 设置为我的停止目录,我希望它遍历驱动器的根目录。不幸的是,它仍然不起作用。我收到“未找到标签”。我已验证相关标签确实存在于我的共享标签文件中。
  • 我的意思是set tags=tags;,D:/Shared/tags,对不起。
  • 我觉得这个的语法有点笨拙。我受过训练,将分号视为句号,即命令的结束。因此,停止目录出现在分号之后感觉很尴尬......我更喜欢停止目录出现在逗号或其他东西之后。
猜你喜欢
  • 2013-03-07
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2023-03-03
  • 2011-03-31
  • 2013-04-01
  • 2018-08-22
相关资源
最近更新 更多