我也使用Vim作为与Git的三向合并,有时需要从本地和远程分支进行更改。 kdiff3可以通过几次按键来完成此操作,在Vim中是否可以做到这一点?

#1 楼

并非完全符合您的要求,但可能会发现它有用:Splice插件:一个Vim插件,用于解决三路合并期间的冲突。
在Vimeo上有一个很好的演示截屏视频。

如果您要坚持使用默认的vimdiff,则可以创建一个函数来检索周围窗口的缓冲区编号并使用它们来调用:diffget两次:

                            *:diffg* *:diffget*
:[range]diffg[et] [bufspec]
        Modify the current buffer to undo difference with another
        buffer.  If [bufspec] is given, that buffer is used.  If
        [bufspec] refers to the current buffer then nothing happens.
        Otherwise this only works if there is one other buffer in diff

(...)

The [bufspec] argument above can be a buffer number, a pattern for a buffer
name or a part of a buffer name.  Examples:

    :diffget        Use the other buffer which is in diff mode
    :diffget 3      Use buffer 3
    :diffget v2     Use the buffer which matches "v2" and is in
                diff mode (e.g., "file.c.v2")


您可以让他们使用映射将对该函数的调用分配给您在kdiff3中使用的键。您可以在此vimcast上找到更多信息。

评论


两次调用:diffget似乎无效。第二个粘贴将覆盖第一个粘贴,而不是附加到第一个粘贴。

–于富兰
20 Jun 30在0:28



#2 楼

yank和put可以在没有任何插件或额外功能的情况下工作,尽管它可能比do或dp方便一些。 。如果您只需要一个差异块的一部分而不是整个东西,这也很有用。

评论


文件似乎暗示代替dg吗?

–于富兰
20年6月30日在20:07

@FranklinYu糟糕,已修复。感谢您的注意。

– 8bittree
20年7月1日在20:32

#3 楼

要在一个命令中合并来自目标分支和合并分支的更改:
您只需删除带有Git冲突标记的行即可。以下两种方法将删除所有以下列开头的行:
<<<<<<<
=======
>>>>>>>


方法1:手动输入和执行命令
:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d


方法2:实施用户定义的命令
qim diffget和diffput将仅选择一个分支或另一个分支。因此,除了上面给出的解决方案之外,唯一真正的解决方案是手动将两个文件中的内容拖入并粘贴到工作副本中。

评论


如果您要拒绝投票,请说明原因。

–user3751385
18年5月15日在23:53

这就是我要做的-删除标记即可。

–亚伦·麦克米林(Aaron McMillin)
18年5月30日在13:56