ediff──emacs中比较文件异同

Ediff 是 Emacs 提供的一种实时浏览文件间不同(diff)的工具,它可以比较两个或三个文件间的不同,分别表示为 file-A, file-B 或 file-C, 也可以比较两个或三个emacs-buffer间的不同了。 Ediff的另一个强有力特性则是可以把正的比较的文件合并成第三个文件。 另外, Ediff还可以对目录进行操作。

Ediff浏览文件的差异是在Emacs的两个Buffer上进行,分别使用不同的颜色表示所存在的差异,而且Ediff对差异区域的差异进行了“细化”,diff程序只进行到“行”级别比较,而Ediff则是基于diff程序的输出上,对差异区域进行更细致的比较,从而得到区域内“单词”级别上的差异比较。从而使比较文件间的细致不同更加容易。

Ediff的更强功能:Ediff可以“忽略”某些细微的差别,例如有两个程序几乎相同,但是其中都些变量的命名却不一样,如bar变量在另一个程序中却都foo,这对程序而言是“相同”,如果用一般的diff程序来查看该两程序的差别,则这种没有意义的变量名不同将充满了整个差异输出,从而不易找到真正的“程序不同”,而使用Ediff则可以忽略这类不同,很容易就定位我们真正想要的差异。

21以上版本的Emacs已经内置了Ediff程序包,无需另外安装了。 Ediff主要提供了如下这些命令:

比较两文件:M-x ediff-files M-x ediff
比较两个Buffer:M-x ediff-buffers
比较三个文件:M-x ediff-file3 ediff3
比较三个Buffer:M-x ediff-buffer3
交互式使用一个patch:M-x ediff-patch-file epatch

Ediff命令被执行后,进行所谓的‘Ediff Session’它接受一些Ediff命令以决定Ediff的行为。具体的表现是Ediff另外建立一个窗口(称为“Quick Help window”),当聚焦在该窗口输入则被认为是Ediff命令,否则仍是一般的Emacs编辑行为,即还可以实时的编辑你正在比较的文件或Buffer。

在“Quick Help window”上输入“?”使该窗口变大或是缩小,输入q并确认则完成比较退出Ediff Session。

极常用的 Session Command(这些命令快捷键在“Quick Help window”上执行才有效)

v ( V ):把文件-A,文件-B,文件-C(如果有),同步向下(向上)滚动,
< ( > ):把文件-A,文件-B,文件-C(如果有),同步向左(向右)滚动,
j:跳到差异区域,可以先加数值参数,如 ‘3j’则跳到第三个差异区域,‘j’则跳到第一个差异区域, 则‘-2j’跳到倒数第二个差异区域。跳到某区域后,再输入的编辑命令就是针对该区域执行,即有一个“当前区域”的概念,而‘j’命令则就是用于使用绝对参数设置当前活动区域。
n (或 SPC 空格):跳到下一个差异区域,并设其为当前区域,
p (或 DEL):跳到前一个差异区域,并设其为当前区域,
ga ( gb gc ):根据光标在Buffer-A(或Buffer-B, Buffer-C)中的位置,设置一个离它们最近的差异区域为当前活动区域

你可能感兴趣的:(ediff──emacs中比较文件异同)