让gVim的vimdiff忽略大小写

时间:2011-01-28 15:50:43

标签: vim vimdiff ignore-case

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

我尝试了以下内容,而在diff模式下有两个缓冲区:

: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

2 个答案:

答案 0 :(得分:8)

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

根据vimdiff文档,您可以通过将iwhite设置为非空值来覆盖diffexpr选项的默认行为。您感兴趣的diff标志是--ignore-all-space,它对空格更灵活。您可以更改vimdiff中的diffexpr以使用此选项,而不是默认的-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

答案 1 :(得分:3)

以下效果很好:

vimdiff +"set diffopt+=icase"  file_1.txt file_2.txt