标签: emacs-ediff

使用Emacs Ediff解决冲突:如何更改两个版本

(问题改编自如何将emacs中的两种冲突变体组合起来?)

我有一个合并冲突标记的文件.它看起来类似于:

<<<<<<< HEAD
            522ADC9C14B2FD9D00F56BAD /* close_test_button.png in Resources */,
            522ADC9D14B2FD9D00F56BAD /* close_test_button@2x.png in Resources */,
            522ADCA014B2FDB100F56BAD /* test_failed.png in Resources */,
            522ADCA114B2FDB100F56BAD /* test_failed@2x.png in Resources */,
=======
            EC1633C014B2F3E3004B52E7 /* arrow.png in Resources */,
            EC1633C114B2F3E3004B52E7 /* arrow@2x.png in Resources */,
            EC1633C214B2F3E3004B52E7 /* groups.png in Resources */,
            EC1633C314B2F3E3004B52E7 /* groups@2x.png in Resources */,
>>>>>>> beta_2.8
Run Code Online (Sandbox Code Playgroud)

我使用Mx vc-resolve-conflicts启动Ediff.我可以通过敲击键盘上的ab选择变体AB,但如何将两种变体一个接一个地组合在一起?

emacs emacs-ediff

33
推荐指数
3
解决办法
8230
查看次数

针对Hg的emacs ediff-revision抱怨错误的参数数量

试图在OS X Lion上使用Emacs v23.2(9.0)对hg(mercurial-1.8.4)repo进行ediff-revision工作.我在问题的第一部分找到了这个答案,但现在我从Emacs ediff-revision获得了这个答案:

Mx ediff-revision比较文件的修订版(默认.hgtags):〜/ myrepo.hg/.hgtags修订版1进行比较(默认.hgtags的最新版本):修订版2进行比较(默认.hgtags的当前状态):

我收到以下回复:

Checking out /Users/username/repo.hg/.hgtags.~tip~...
apply: Wrong number of arguments: (lambda (file &optional editable rev) "Retrieve a revision of FILE.
EDITABLE is ignored.
Run Code Online (Sandbox Code Playgroud)

emacs mercurial emacs-ediff

32
推荐指数
1
解决办法
522
查看次数

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

我是一个顽固的emacs用户,但到目前为止一直用于kdiff3与祖先的三向合并,例如在表演时git mergerebase.我真的很喜欢kdiff3不仅可以同时显示正在合并的文本的所有四个版本的方式:

  • 共同的祖先(缓冲区A in kdiff3)
  • "我们的"又名"本地"(缓冲区B in kdiff3)
  • "他们的"又名"远程"(缓冲区C in kdiff3)
  • 合并结果或目标

但也可以通过颜色突出显示A,BC之间的差异.然而,与合并缓冲区的文本编辑kdiff3相比,毫不奇怪emacs,因为kdiff3它不是一个完整的文本编辑器.它也没有开箱即用的优秀magit包装.所以我想切换到使用ediff解决这一冲突时,特别是方案(我已经成功地使用ediff其他使用案例多年).

但是,尽管阅读了ediff手册EmacsWiki页面,并询问#emacsIRC,我找不到同时显示所有4个缓冲区的方法.默认情况下显示:

  • "我们的"又称"本地"(标记为缓冲区A)
  • "他们的"又名"远程"(标记为缓冲区B)
  • 合并结果或目标(标记为缓冲区C)

按下/切换显示合并结果缓冲区(C)的窗口,以便显示祖先缓冲区,但您无法同时看到祖先和合并结果.(此外,祖先缓冲区中的差异以单一颜色突出显示,但没有清楚地显示哪些位与其他两个可见缓冲区(AB)不同,尽管根据此线程,似乎不幸的是祖先差异细化还没有还没有实现.)

是否有一种简单的方法来配置 …

emacs diff merge kdiff3 emacs-ediff

19
推荐指数
1
解决办法
1570
查看次数

如何在Windows + NTEmacs下使用ediff?

我在Windows上有Emacs版本23,似乎ediff缺少可执行文件?

我可以在哪里下载ediffWindows上的Emacs?

windows emacs emacs-ediff

13
推荐指数
2
解决办法
9035
查看次数

ediff-split-window-function horizo​​ntal == vertical?

Emacs 23.1.1在CentOs 6上的Ediff 2.81.2

在进行任何自定义之前,Ediff默认会将窗口水平分割(一个在另一个上面).

我希望它们并排,所以我尝试将以下行添加到我的.emacs中

(setq ediff-split-window-function 'split-window-vertically)
(setq ediff-merge-split-window-function 'split-window-vertically)
Run Code Online (Sandbox Code Playgroud)

这没有任何效果 - 窗户仍然水平分开.我还尝试使用Ediff的Emacs Customization界面默认进行垂直拆分 - 同样的故事.

请注意,我在与两个垂直分割的缓冲区进行比较时尝试了这一点.我也尝试过没有在缓冲区中打开的文件,并要求Ediff比较两个文件 - 相同的结果.

然后我尝试将split-window-horizo​​ntal指定为ediff-split和ediff-merge的分割窗口函数.

(setq ediff-split-window-function 'split-window-horizontally)
(setq ediff-merge-split-window-function 'split-window-horizontally)
Run Code Online (Sandbox Code Playgroud)

这导致窗口垂直分割(彼此相邻).当我注释掉这些行并使用Emacs Customization界面设置这些选项时也是如此.

是的,我已经看到了这个问题,但我不想在全球范围内消除水平分裂 - 我只是希望Ediff默认情况下这样做.

我是否会失去理智,或者有人改变了"横向"和"垂直"的含义(顺便说一下,我正在从我的O'Reilly书的副本中采用"垂直"和"横向"分裂的定义"学习Gnu Emacs")?

split window emacs-ediff

11
推荐指数
2
解决办法
3743
查看次数

如何让ediff模式停止突出显示仅由空格区分的行?

我在C++中有两个类似的功能,我想仔细比较.我正在使用emacs功能ediff-regions-linewise逐行比较它们.许多行的空白区别很小,例如:

//Line from first function
somefunc(i,j);
//Line from second function
somefunc(i, j);
Run Code Online (Sandbox Code Playgroud)

Ediff模式足够聪明,可以知道哪些部分只有空格不同:命令##名义上意味着"忽略空格".它只会导致光标跳过不同的部分,但仍然突出显示仅由空格不同的行,就像它突出显示以某种重要方式不同的行的方式相同.

有没有办法让ediff模式停止突出显示由于空格而不同的行?

emacs whitespace emacs-ediff

5
推荐指数
1
解决办法
2732
查看次数

Emacs ediff 标记了不同目录缓冲区中的文件

我有以下函数,它对我在 dired 缓冲区中标记的文件运行 ediff:

(defun mkm/ediff-marked-pair ()
  "Run ediff-files on a pair of files marked in dired buffer"
  (interactive)
  (let ((marked-files (dired-get-marked-files nil)))
    (if (not (= (length marked-files) 2))
    (message "mark exactly 2 files")
      (ediff-files (nth 0 marked-files)
           (nth 1 marked-files)))))
Run Code Online (Sandbox Code Playgroud)

它仅适用于同一目录中的文件,如何使其适用于我在不同目录中标记的文件?

emacs dired emacs-ediff

5
推荐指数
1
解决办法
792
查看次数

Ediff作为git difftool

我正在尝试使用emacs ediff作为git difftool.

我已经遵循了这里提出的一些配置: 使用ediff作为git mergetool

当谈到某个文件的不同git版本之间的比较时,我完全没有问题:ediff运行良好,两个版本之间的差异被正确描述.

但是,当我尝试运行git difftool来比较文件的当前目录版本与某个git版本时,我遇到了问题.对于某些文件,我收到以下错误:

apply: Wrong type argument: arrayp, nil

这很奇怪,因为这个错误仅适用于某些文件,而不是所有文件.

我已经尝试了几个文件,我认为经验法则如下: - 如果要比较的文件没有放在git根目录中,那么它就失败了. - 否则,ediff会显示当前版本的文件与指定的修订版本之间的差异,没有任何问题.

我尝试过上面提到的链接中解释的一些配置.所有这些都给了我相同的结果:git difftool在将非root git文件的当前目录版本与某个git版本进行比较时失败.

知道如何解决这个问题吗?

非常感谢.-Bob

git emacs emacs-ediff

5
推荐指数
1
解决办法
2055
查看次数

emacs ediff刷新缓冲区

我正在使用emacs ediff来比较我经常更新的两个文件.如何在不杀死和重新加载ediff的情况下刷新或更新缓冲区以反映新文件?当我尝试使用Cx Cv更新每个文件时,Ediff控制面板说"你已经杀死了一个重要的Ediff缓冲区 - 你现在必须离开Ediff!"

emacs emacs-ediff

4
推荐指数
1
解决办法
1130
查看次数

标签 统计

emacs-ediff ×9

emacs ×8

diff ×1

dired ×1

git ×1

kdiff3 ×1

mercurial ×1

merge ×1

split ×1

whitespace ×1

window ×1

windows ×1