【问题标题】:How Do You Get the bufspec While Using Vimdiff Through Git通过 Git 使用 Vimdiff 时如何获取 bufspec
【发布时间】:2010-03-24 18:51:20
【问题描述】:

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

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

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

来自 vimdiff 文档:

:[范围]diffg[et] [bufspec]
修改当前缓冲区以撤消与另一个缓冲区的差异 缓冲。如果给出 [bufspec],则使用该缓冲区。如果 [bufspec] 指的是当前缓冲区,然后什么也没有发生。 否则,这仅在 diff 中有另一个缓冲区时才有效 模式。

还有更多:

当 'diffexpr' 不为空时,Vim 求值以在 提到的格式。这些变量设置为使用的文件名:

v:fname_in 原始文件
v:fname_new 同一文件的新版本
v:fname_out 结果差异文件

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

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

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

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

【问题讨论】:

    标签: git vim git-merge vimdiff


    【解决方案1】:

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

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

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

    【讨论】:

    • 所以使用 :diffget 以及第二个点之后的字符组合是什么?
    • 太棒了。你会认为这很容易猜到。我猜我太生气了,看不到这么简单的事情。 sigh 谢谢谢谢!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      要列出可用的缓冲区编号和名称(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 参数。例如,假设上面sn-p反映的状态,我们可以使用:

      diffget REM

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-12
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 2015-12-09
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多