我已阅读Vimdiff和Viewing differences with Vimdiff以及使用“vimdiff multiple”,“vimdiff git”,“vimdiff命令”等内容进行各种谷歌搜索等。
当使用do或diffg时,我得到错误“在diff模式下有两个以上的缓冲区,不知道要使用哪个缓冲区”。
当使用diffg v:fname_in时,我得到“v:fname_in没有匹配的缓冲区”。
来自vimdiff文档:
:[range] diffg [et] [bufspec]
修改当前缓冲区以撤消与另一个缓冲区的差异 缓冲。如果给出[bufspec],则使用该缓冲区。如果 [bufspec]指的是当前缓冲区然后没有任何反应。 否则只有在diff中有另一个缓冲区时才有效 模式。
以及更多:
当'diffexpr'不为空时,Vim会计算得到一个diff文件 格式提到。这些变量设置为使用的文件名:
v:fname_in原始文件
v:fname_new同一文件的新版本
v:fname_out生成的差异文件
因此,我需要获取bufspec的名称,但未设置默认变量(fname_in,fname_new和fname_out)。
我通过终端在linux机器上运行命令git mergetool。
[编辑] 部分解决方案孕育了更多问题。我在缓冲区的底部使用了“filename”。它只有一半的答案,因为偶尔我得到一个文件不存在错误。我相信它一直是“不存在”的文件的远程版本。我怀疑这与git和索引有关。
如何通过git-mergetool使用vimdiff时如何获得bufspec值 ?
答案 0 :(得分:10)
上面的[bufspec]
参数可以是缓冲区编号,缓冲区名称的模式或缓冲区名称的一部分。例子:
:diffget
使用处于diff模式的其他缓冲区:diffget 3
使用缓冲区3 :diffget v2
使用与v2
匹配的缓冲区
差异模式(例如,file.c.v2
)我总是使用缓冲区的编号。
答案 1 :(得分:6)
键入“2”,然后按ctrl-g,它会显示缓冲区编号和文件。
答案 2 :(得分:2)
要列出可用的缓冲区编号和名称( bufspec 的有效值),请使用:ls
(从这个问题的标题来看,这就是我的想法,这就是我看到这里的原因。)
:ls
将列出缓冲区编号和名称。当前包含光标的窗口将由%
:
: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
使用diffget
或diffput
时,任何唯一匹配缓冲区名称的子字符串都可以用作 bufspec 参数。例如,假设上述代码段中反映的状态,我们可以使用:
diffget REM
抓取Gemfile.lock.REMOTE.4828.lock
当前光标下的更改版本。