我正在尝试比较两个汇编文件,其中一个是全部大写,另一个是小写。许多行与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
答案 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