Ediff界面有+按钮,但是似乎什么也没做(当我按下迷你缓冲区时,迷你缓冲区总是显示为“ nil”),我认为此按钮用于在结果缓冲区中使用这两种变体。
无论如何,最初的问题是:如何使Ediff通过将缓冲区A和B中的内容都放入缓冲区C中来解决合并冲突(我知道我可以编辑C,但是希望可以更轻松地完成)。
假设文件A是这样的:
同一行
不同的线
同一行
而文件B是:
同一行
另一条线
同一行
我想要文件C,将A与B合并的结果如下所示:
同一行
不同的线
另一条线
同一行
Ediff界面有+按钮,但是似乎什么也没做(当我按下迷你缓冲区时,迷你缓冲区总是显示为“ nil”),我认为此按钮用于在结果缓冲区中使用这两种变体。
无论如何,最初的问题是:如何使Ediff通过将缓冲区A和B中的内容都放入缓冲区C中来解决合并冲突(我知道我可以编辑C,但是希望可以更轻松地完成)。
假设文件A是这样的:
同一行
不同的线
同一行
而文件B是:
同一行
另一条线
同一行
我想要文件C,将A与B合并的结果如下所示:
同一行
不同的线
另一条线
同一行
Answers:
请参阅此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)
编辑:该重复的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的任意组合解决它为止。
ediff-combination-pattern
到您的自定义模式,然后调用ediff-combine-diffs
。
diff3
Ediff手册部分可能会有所帮助。