如何通过Git使用Vimdiff获取bufspec

时间:2010-03-24 18:51:21

标签: git vim git-merge vimdiff

我已阅读VimdiffViewing 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值

3 个答案:

答案 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

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

diffget REM

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