Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当通过Git使用Vimdiff时,如何获得bufspec_Git_Vim_Git Merge_Vimdiff - Fatal编程技术网

当通过Git使用Vimdiff时,如何获得bufspec

当通过Git使用Vimdiff时,如何获得bufspec,git,vim,git-merge,vimdiff,Git,Vim,Git Merge,Vimdiff,我已经阅读并使用“vimdiff multiple”、“vimdiff git”、“vimdiff commands”等工具进行了各种google搜索 当使用do或diffg时,我得到错误“在diff模式下有两个以上的缓冲区,不知道使用哪一个” 在中使用diffg v:fname_时,我得到“中的v:fname_没有匹配的缓冲区” 从vimdiff文档中: :[range]diff[et][bufspec] 修改当前缓冲区以撤消与其他缓冲区的差异 缓冲器如果给出[bufspec],则使用该缓冲区

我已经阅读并使用“vimdiff multiple”、“vimdiff git”、“vimdiff commands”等工具进行了各种google搜索

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

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

从vimdiff文档中:

:[range]diff[et][bufspec]
修改当前缓冲区以撤消与其他缓冲区的差异 缓冲器如果给出[bufspec],则使用该缓冲区。如果 [bufspec]引用当前缓冲区,则不会发生任何事情。 否则,这仅在diff中有另一个缓冲区时有效 模式

还有更多:

当“diffexpr”不为空时,Vim计算以在 提及的格式。这些变量设置为使用的文件名:

v:fname_在原始文件中
v:fname\u同一文件的新版本
v:fname\u输出结果差异文件

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

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

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


如何在通过git mergetool使用vimdiff时一致地获得bufspec值?

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

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

我总是使用缓冲区的编号。

键入“2”,然后按ctrl-g,它会显示缓冲区编号和文件。

要列出可用的缓冲区编号和名称(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
版本,请使用:diffget和第二个点后的字符组合?太棒了。你会认为这很容易猜到。我想我看到这么简单的事情太恼火了。感叹谢谢谢谢!