ediff合并可以同时显示祖先,A,B和合并缓冲区吗?

时间:2013-03-23 13:57:10

标签: emacs merge diff kdiff3 emacs-ediff

我是一个顽固的emacs用户,但到目前为止,始终使用kdiff3与祖先进行3向合并,例如执行git mergerebase时。我非常喜欢kdiff3不仅可以同时显示所合并文本的所有四个版本的方式:

  • 共同祖先(kdiff3中的缓冲 A
  • "我们" a.k.a。" local" (kdiff3中的缓冲区 B
  • "他们" a.k.a." remote" (kdiff3
  • 中的缓冲区 C
  • 合并结果或目标

但也可以通过颜色突出显示清除 A B C 之间的差异。但是,kdiff3在合并缓冲区的文本编辑方面与emacs相比毫不奇怪,因为kdiff3不是一个完整的文本编辑器。它也没有开箱即用的优秀magit包。因此,在解决此特定方案中的冲突时,我尝试切换到使用ediff(我已成功使用ediff 其他用例多年。)

然而,尽管阅读了ediff manualEmacsWiki page,并询问#emacs IRC,我仍无法找到同时显示所有4个缓冲区的方法。默认情况下显示:

  • "我们" a.k.a。" local" (标记缓冲区 A
  • "他们" a.k.a." remote" (标记缓冲区 B
  • 合并结果或目标(标记缓冲区 C

/切换显示合并结果缓冲区( C )的窗口,使其显示祖先缓冲区,但无法同时查看祖先和合并结果。 (此外,祖先缓冲区中的差异以单一颜色突出显示,并未清楚地显示哪些位与其他两个可见缓冲区不同( A B ),虽然根据this thread,似乎不幸的是祖先差异优化还没有实现。)

是否有一种简单的方法可以配置ediff同时显示所有4个缓冲区?

2 个答案:

答案 0 :(得分:5)

这已添加到主干版本中。现在默认情况下,3向合并显示 四个缓冲区,即“本地”(缓冲区A),“远程”(缓冲区B), 合并结果(缓冲区C)和祖先。您可以更改此默认值 自定义新选项'ediff-show-ancestor'。

键'/'现在绑定到一个新命令'ediff-toggle-show-ancestor':它 切换是否显示3(本地,远程和结果) 或4(本地,远程,结果,祖先)缓冲区。

这些更改将在Emacs 26.1发行版中显示。

答案 1 :(得分:1)

不,没有简单的方法来配置它来做到这一点。有一个选项ediff-window-setup-function,您可以自定义它作为您想要的任何功能。您可以查看默认设置ediff-setup-windows-plainediff-setup-windows-multi,以了解您需要执行的操作。事实上,最简单的方法是将其中一个复制到emacs配置中并进行修改(当然更改名称);他们并非无足轻重。