配置使emacs ediff表现得体面

时间:2015-11-27 10:00:07

标签: emacs diff

在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">&times;</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">&times;</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">&times;</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">&times;</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
<

这就是我正在寻找的。

1 个答案:

答案 0 :(得分:1)

diff是一种基于行的算法。它只报告整条线路不同。在第一个示例中,许多行已重新缩进,导致它们不同。 -w标志告诉它忽略仅与空白字符数相对应的行,如您所见,让它突出显示具有更显着差异的行。但是,您可能更喜欢-b,因为-w实际上会忽略在单词中间添加了空格的行。 -i会忽略大小写更改。

-d告诉它花费更多的CPU时间来寻找最小的更改集。这通常不会改变差异所报告的内容,但是现代的cpu速度太快,以至于额外的时间成本通常是不明显的。你也可以一直使用它。

-u特别有用,因为它提供了一个更易于阅读的统一差异。

有一个名为wdiff的程序可以找到不同于行的单词,但如果有任何使用它的emacs模式,我不知道副作用。