在Windows上的emacs中,当使用两个HTML文件执行ediff文件或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 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>
它已经无法识别结构相似性。
也许,某些需要应用的开关需要应用?
例如,使用开关&#34; -w&#34; (忽略所有空间)
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
<
这就是我正在寻找的。
答案 0 :(得分:1)
diff
是一种基于行的算法。它只报告整条线路不同。在第一个示例中,许多行已重新缩进,导致它们不同。 -w
标志告诉它忽略仅与空白字符数相对应的行,如您所见,让它突出显示具有更显着差异的行。但是,您可能更喜欢-b
,因为-w
实际上会忽略在单词中间添加了空格的行。 -i
会忽略大小写更改。
-d
告诉它花费更多的CPU时间来寻找最小的更改集。这通常不会改变差异所报告的内容,但是现代的cpu速度太快,以至于额外的时间成本通常是不明显的。你也可以一直使用它。
-u
特别有用,因为它提供了一个更易于阅读的统一差异。
有一个名为wdiff
的程序可以找到不同于行的单词,但如果有任何使用它的emacs模式,我不知道副作用。