9

我已经阅读了 VimdiffViewing Differences with Vimdiff以及使用“vimdiff multiple”、“vimdiff git”、“vimdiff commands”等内容进行各种谷歌搜索。

使用 do 或 diffg 时,我收到错误“在 diff 模式下有两个以上的缓冲区,不知道要使用哪一个”。

使用 diffg v:fname_in 时,我得到“v:fname_in 没有匹配的缓冲区”。

从 vimdiff 文档:

:[range]diffg[et] [bufspec]
修改当前缓冲区以撤销与另一个缓冲区的差异。如果给出 [bufspec],则使用该缓冲区。如果 [bufspec] 指的是当前缓冲区,那么什么也不会发生。否则,这只适用于在差异模式下存在另一个缓冲区的情况。

和更多:

当 'diffexpr' 不为空时,Vim 求值以获得上述格式的 diff 文件。这些变量设置为使用的文件名:

v:fname_in 原始文件
v:fname_new 相同文件的新版本
v:fname_out 产生的差异文件

因此,我需要获取 bufspec 的名称,但未设置默认变量(fname_in、fname_new 和 fname_out)。

我通过终端在 linux 机器上运行了命令 git mergetool 。

[编辑] 产生更多问题的部分解决方案。我在缓冲区底部使用了“文件名”。这只是一半的答案,因为偶尔我会收到文件不存在错误。我相信它始终是“不存在”的文件的远程版本。我怀疑这与 git 和索引有关。

在通过 git-mergetool 使用 vimdiff 时,如何始终如一地获得 bufspec 值?

4

3 回答 3

10

上面的[bufspec]参数可以是缓冲区编号、缓冲区名称的模式或缓冲区名称的一部分。例子:

  • :diffget 使用处于差异模式的另一个缓冲区
  • :diffget 3 使用缓冲区 3
  • :diffget v2 使用匹配v2且处于差异模式的缓冲区(例如,file.c.v2

我总是使用缓冲区的数量。

于 2010-04-27T10:01:44.323 回答
6

输入 "2" ,然后 ctrl-g ,它会显示缓冲区号和文件。

于 2012-05-25T00:20:06.007 回答
3

要列出可用的缓冲区编号和名称( bufspec的有效值),请使用:ls

(从这个问题的标题来看,这就是我认为被问到的问题,也是我看这里的原因。)

:ls将列出缓冲区编号和名称。当前包含光标的窗口将由 a 表示%

:ls
  1 #a   "Gemfile.lock"                 line 1
  2 %a   "Gemfile.lock.LOCAL.4828.lock" line 1
  3  a   "Gemfile.lock.BASE.4828.lock"  line 0
  4  a   "Gemfile.lock.REMOTE.4828.lock" line 0

使用diffgetor时diffput,任何唯一匹配缓冲区名称的子字符串都可以用作bufspec参数。例如,假设上面代码片段中反映的状态,我们可以使用:

diffget REM

抓取Gemfile.lock.REMOTE.4828.lock当前光标下更改的版本。

于 2016-04-01T16:06:55.123 回答