如何在Ediff中使用两种变体?


17

Ediff界面有+按钮,但是似乎什么也没做(当我按下迷你缓冲区时,迷你缓冲区总是显示为“ nil”),我认为此按钮用于在结果缓冲区中使用这两种变体。

无论如何,最初的问题是:如何使Ediff通过将缓冲区A和B中的内容都放入缓冲区C中来解决合并冲突(我知道我可以编辑C,但是希望可以更轻松地完成)。

假设文件A是这样的:

同一行

不同的线

同一行

而文件B是:

同一行

另一条线

同一行

我想要文件C,将AB合并的结果如下所示:

同一行

不同的线

另一条线

同一行


我不确定我是否完全理解这个问题,但是有关合并的diff3 Ediff手册部分可能会有所帮助
天祥熊

@TianxiangXiong我将添加一个示例说明我的意思。我不认为链接的手册页涵盖了它。
wvxvw 16/12/14

Answers:


7

请参阅此StackOverflow答案

来自@ killdash9

按d将同时将A和B复制到缓冲区C。

(defun ediff-copy-both-to-C ()
  (interactive)
  (ediff-copy-diff ediff-current-difference nil 'C nil
                   (concat
                    (ediff-get-region-contents ediff-current-difference 'A ediff-control-buffer)
                    (ediff-get-region-contents ediff-current-difference 'B ediff-control-buffer))))
(defun add-d-to-ediff-mode-map () (define-key ediff-mode-map "d" 'ediff-copy-both-to-C))
(add-hook 'ediff-keymap-setup-hook 'add-d-to-ediff-mode-map)

由于重复项也位于StackExchange网络上(因此,如果人们可以访问此站点,他们也将可以访问该站点),我赞成复制代码,而纯粹链接到答案(作为处理跨站点重复项的一般方法)。这样,如果原始答案得到改善,那么其他站点上就不会有过时的副本。投票赞成,无论如何。
菲利普斯,2016年

我的印象是,StackExchange网站通常更喜欢在网站本身上提供答案,而不是简单地提供链接。但是,如果链接是另一个StackExchange网站,也许会有所不同吗?/耸肩
天翔雄

我实际上不知道官方政策是什么,但是我当然认为应该将网络内链接与网络外链接区别对待。一般而言,不使用链接意味着即使远程源不可用,答案也可以访问,但是我认为在任何给定时间仅一部分StackExchange网络不可用的可能性很大,因此我认为论点消失了。在这一点上,问题是在两个不同的重复问题之间划分答案是否明智,我认为这几乎没有帮助。IMO,无论如何。
菲利浦斯

3

编辑:重复的Q&A在计算器上有这个问题的答案(如评论由天翔雄指出)。

我在下面的回答毫无用处,因为您显然无法以这种方式获得理想的结果。我之所以不删除它,是因为它确实提供了一些相关的信息,并且可能仍然对某人证明是有趣的信息。


我个人只是直接编辑合并缓冲区,但是如果有标准要求,您可以教Emacs该怎么做。

+电话ediff-combine-diffs

组合缓冲区A和B的第N个diff区域,并将组合放在C中。N是前缀参数。如果为零,则合并当前差异区域。根据变量中的规格进行组合 ediff-combination-pattern

这是:

用于组合缓冲区A和B中的差异区域的模式。该值必须是(STRING1 bufspec1 STRING2 bufspec2 STRING3 bufspec3 STRING4) bufspec是符号A,B或祖先的形式的列表 。例如,如果值为, '(STRING1 A STRING2 Ancestor STRING3 B STRING4)则合并的文本将如下所示:

STRING1
从变体一个diff区域
STRING2
DIFF区域从所述祖先
STRING3
从变式B的diff区域
STRING4

请注意,当您认为它什么都不做时,实际上是在使用正常的冲突标记来组合变体。即,如果您已经选择了A或B,则默认情况下+是恢复原始冲突的一种方法。


我的改动不会ediff-combination-pattern删除默认使用的传统冲突标记吗?我真的想以这种方式保持冲突,直到我使用合并文件中的diff的任意组合解决它为止。
wvxvw 16/12/14

冲突标记起源于Emacs之外,因此我怀疑情况确实如此,但我实际上并不知道。尝试一下?
菲尔斯(Phils)2016年

我会的,但是今天晚些时候。我知道后会更新。
wvxvw 16/12/14

实际上,您是对的-ediff在提供缓冲区之前,会根据该模式处理并转换所有冲突区域。但是,您可以为命令添加一个自定义绑定,该命令可以绑定ediff-combination-pattern到您的自定义模式,然后调用ediff-combine-diffs
菲利普斯,2016年

2
解决方案似乎是您想要的。
天祥熊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.