13

我正在尝试比较两个汇编文件,其中一个全部大写,另一个小写。许多行与大小写和空格相同。

我尝试了以下方法,而两个缓冲区处于差异模式:

:set diffopt+=icase
:set diffopt+=iwhite
:diffupdate

空白的东西似乎运作良好,但忽略案例并没有发挥作用。例如,在以下两行中:

            I0=R0;              // ADDRESS OF INPUT ARRAY

    i0 = r0;            // address of input array

[第一行以 12 个空格开头,第二行以单个制表符开头]

为什么?我能做些什么?

更新:刚刚注意到在这两行中所有差异都被忽略了:

                                // MULTIPLY R1 BY 4 TO FETCH DATA OF WORD LENGTH
                        // multiply r1 by 4 to fetch data of word length
4

2 回答 2

8

您的比较失败是因为空格,而不是因为大小写。发生这种情况是因为当您iwhite在后台使用该选项时,vimdiff 正在执行 a diff -b,它对比较空白的方式比您要查找的内容更具限制性。更具体地说,该选项仅忽略已经存在-b的空白数量的差异whitespace 。在您的示例中,被标记为不同于因为一个字符之间包含空格而另一个不包含空格。i0 = r0;I0=R0;

根据 vimdiff 文档,您可以iwhite通过设置diffexpr为非空值来覆盖选项的默认行为。您感兴趣的 diff 标志是--ignore-all-space,它对空格更灵活。您可以更改diffexprin vimdiff 以使用此选项而不是默认-b选项,如下所示:

set diffexpr=MyDiff()
function MyDiff()
   let opt = ""
   if &diffopt =~ "icase"
     let opt = opt . "-i "
   endif
   if &diffopt =~ "iwhite"
     let opt = opt . "--ignore-all-space "
   endif
   silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
    \  " > " . v:fname_out
endfunction

有关更多详细信息,请参阅文档:

http://vimdoc.sourceforge.net/htmldoc/options.html#%27diffopt%27

于 2011-01-28T17:10:41.097 回答
5

以下对我很有效:

vimdiff +"set diffopt+=icase"  file_1.txt file_2.txt
于 2017-07-14T03:11:30.440 回答