使 emacs ediff 正常运行的配置
Configuration to make emacs ediff perform decently
在我的 Windows 上的 emacs 中,当用两个 HTML 文件做 ediff-files 或 ediff-buffers 时具有很强的结构相似性,但 ediff 未能找到这种结构相似性。但对于相同的两个文件,DiffNow.com 可以找到结构相似性,并突出显示细微差别。
我怀疑是我ediff配置不当导致的。
你能给我一些关于如何配置 ediff 以找到更多结构相似性的指示吗?
非常感谢!
示例如下:
file_1.html:
<template name="image_add_form">
<div class="modal fade" id="image_add_form">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="modal-title">
</div>
</div>
<div class="modal-body">
<form class="js-add-image">
<input type="text" name="img_src"/>
<br/>
<input type="text" name="img_alt"/>
<button class="btn btn-success">save</button>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-warning" data-dismiss="modal">
cancel
</button>
</div>
</div>
</div>
</div>
</template>
file_2.html:
<template name="image_add_form">
<div class="modal fade" id="image_add_form">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="modal-title">
</div>
</div>
<div class="modal-body">
<form class="js-add-image">
<input type="text" name="img_src"/>
<br/>
<input type="text" name="img_alt"/>
<button class="btn btn-success">save</button>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-warning" data-dismiss="modal">
cancel
</button>
</div>
</div>
</div>
</div>
</template>
人眼看,和DiffNow.com一样,结构相似性非常明显。
经进一步调查,似乎来自 cygwin 的 diff.exe 可能是问题的原因:
这是 diff 结果的输出
diff file_1.html file_2.html
2,7c2,24
<
< <div class="modal fade" id="image_add_form">
< <div class="modal-dialog">
< <div class="modal-content">
< <div class="modal-header">
< <div class="modal-title">
---
>
> <div class="modal fade" id="image_add_form">
> <div class="modal-dialog">
> <div class="modal-content">
> <div class="modal-header">
> <button type="button" class="close" data-dismiss="modal">×</button>
> <div class="modal-title">
> </div>
> </div>
> <div class="modal-body">
> <form class="js-add-image">
> <input type="text" name="img_src"/>
> <br/>
> <input type="text" name="img_alt"/>
> <button class="btn btn-success">save</button>
> </form>
> </div>
> <div class="modal-footer">
> <button class="btn btn-warning" data-dismiss="modal">
> cancel
> </button>
> </div>
> </div>
9,20d25
< </div>
< <div class="modal-body">
< <form class="js-add-image">
< <input type="text" name="img_src"/>
< <br/><input type="text" name="img_alt"/>
< <button class="btn btn-success">save</button>
< </form>
< </div>
< <div class="modal-footer">
< <button class="btn btn-warning" data-dismiss="modal">cancel</button>
< </div>
< </div>
22,26c27
<
< </div>
<
< </template>
<
---
> </template>
已经无法识别结构相似性。
也许,需要应用一些 diff 开关?
例如,使用开关“-w”(忽略所有space)
diff -w file_1.html file_2.html
6a7
> <button type="button" class="close" data-dismiss="modal">×</button>
13c14,15
< <br/><input type="text" name="img_alt"/>
---
> <br/>
> <input type="text" name="img_alt"/>
18c20,22
< <button class="btn btn-warning" data-dismiss="modal">cancel</button>
---
> <button class="btn btn-warning" data-dismiss="modal">
> cancel
> </button>
22d25
<
24d26
<
26d27
<
这就是我要找的。
diff
是一种基于行的算法。它只报告整行不同。在您的第一个示例中,许多行已重新缩进,导致它们不同。 -w
标志告诉它忽略唯一区别在于空白字符数量的行,如您所见,它可以突出显示具有更显着差异的行。但是,您可能更喜欢 -b
,因为 -w
实际上会忽略在单词中间添加空格的行。 -i
将忽略大小写更改。
-d
告诉它花更多 cpu 时间寻找最小的变化集。这通常不会改变 diff 报告的内容,但是现代 cpus 是如此之快以至于额外的时间成本通常是不明显的。你还不如一直用呢
-u
特别有用,因为它提供了一个更易于阅读的统一差异。
有一个名为 wdiff
的程序可以查找不同的单词而不是行,但我不知道是否有任何 emacs 模式使用它。
在我的 Windows 上的 emacs 中,当用两个 HTML 文件做 ediff-files 或 ediff-buffers 时具有很强的结构相似性,但 ediff 未能找到这种结构相似性。但对于相同的两个文件,DiffNow.com 可以找到结构相似性,并突出显示细微差别。
我怀疑是我ediff配置不当导致的。
你能给我一些关于如何配置 ediff 以找到更多结构相似性的指示吗?
非常感谢!
示例如下:
file_1.html:
<template name="image_add_form">
<div class="modal fade" id="image_add_form">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="modal-title">
</div>
</div>
<div class="modal-body">
<form class="js-add-image">
<input type="text" name="img_src"/>
<br/>
<input type="text" name="img_alt"/>
<button class="btn btn-success">save</button>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-warning" data-dismiss="modal">
cancel
</button>
</div>
</div>
</div>
</div>
</template>
file_2.html:
<template name="image_add_form">
<div class="modal fade" id="image_add_form">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<div class="modal-title">
</div>
</div>
<div class="modal-body">
<form class="js-add-image">
<input type="text" name="img_src"/>
<br/>
<input type="text" name="img_alt"/>
<button class="btn btn-success">save</button>
</form>
</div>
<div class="modal-footer">
<button class="btn btn-warning" data-dismiss="modal">
cancel
</button>
</div>
</div>
</div>
</div>
</template>
人眼看,和DiffNow.com一样,结构相似性非常明显。
经进一步调查,似乎来自 cygwin 的 diff.exe 可能是问题的原因:
这是 diff 结果的输出
diff file_1.html file_2.html
2,7c2,24
<
< <div class="modal fade" id="image_add_form">
< <div class="modal-dialog">
< <div class="modal-content">
< <div class="modal-header">
< <div class="modal-title">
---
>
> <div class="modal fade" id="image_add_form">
> <div class="modal-dialog">
> <div class="modal-content">
> <div class="modal-header">
> <button type="button" class="close" data-dismiss="modal">×</button>
> <div class="modal-title">
> </div>
> </div>
> <div class="modal-body">
> <form class="js-add-image">
> <input type="text" name="img_src"/>
> <br/>
> <input type="text" name="img_alt"/>
> <button class="btn btn-success">save</button>
> </form>
> </div>
> <div class="modal-footer">
> <button class="btn btn-warning" data-dismiss="modal">
> cancel
> </button>
> </div>
> </div>
9,20d25
< </div>
< <div class="modal-body">
< <form class="js-add-image">
< <input type="text" name="img_src"/>
< <br/><input type="text" name="img_alt"/>
< <button class="btn btn-success">save</button>
< </form>
< </div>
< <div class="modal-footer">
< <button class="btn btn-warning" data-dismiss="modal">cancel</button>
< </div>
< </div>
22,26c27
<
< </div>
<
< </template>
<
---
> </template>
已经无法识别结构相似性。
也许,需要应用一些 diff 开关?
例如,使用开关“-w”(忽略所有space)
diff -w file_1.html file_2.html
6a7
> <button type="button" class="close" data-dismiss="modal">×</button>
13c14,15
< <br/><input type="text" name="img_alt"/>
---
> <br/>
> <input type="text" name="img_alt"/>
18c20,22
< <button class="btn btn-warning" data-dismiss="modal">cancel</button>
---
> <button class="btn btn-warning" data-dismiss="modal">
> cancel
> </button>
22d25
<
24d26
<
26d27
<
这就是我要找的。
diff
是一种基于行的算法。它只报告整行不同。在您的第一个示例中,许多行已重新缩进,导致它们不同。 -w
标志告诉它忽略唯一区别在于空白字符数量的行,如您所见,它可以突出显示具有更显着差异的行。但是,您可能更喜欢 -b
,因为 -w
实际上会忽略在单词中间添加空格的行。 -i
将忽略大小写更改。
-d
告诉它花更多 cpu 时间寻找最小的变化集。这通常不会改变 diff 报告的内容,但是现代 cpus 是如此之快以至于额外的时间成本通常是不明显的。你还不如一直用呢
-u
特别有用,因为它提供了一个更易于阅读的统一差异。
有一个名为 wdiff
的程序可以查找不同的单词而不是行,但我不知道是否有任何 emacs 模式使用它。