ysa*_*sap 11 vim vimdiff ignore-case
我试图比较两个汇编文件,其中一个是全部大写,另一个是小写.许多行与case和whitespace完全相同.
我尝试了以下,而diff模式下有两个缓冲区:
:set diffopt+=icase
:set diffopt+=iwhite
:diffupdate
Run Code Online (Sandbox Code Playgroud)
空白的东西似乎运作良好,但忽略的情况不起作用.例如,在以下两行中:
I0=R0; // ADDRESS OF INPUT ARRAY
i0 = r0; // address of input array
Run Code Online (Sandbox Code Playgroud)
[第一行以12个空格开头,第二行以单个标签开头]
为什么?我能做什么?
更新:刚刚注意到在这两行中忽略了所有差异OK:
// MULTIPLY R1 BY 4 TO FETCH DATA OF WORD LENGTH
// multiply r1 by 4 to fetch data of word length
Run Code Online (Sandbox Code Playgroud)
你的比较因为空白而失败,而不是因为这种情况.这是发生,因为当你使用的iwhite选项,在后台方面Vimdiff执行diff -b哪个更严格的关于它如何比你在找什么比较空白.更具体地说,该-b选项仅忽略已存在空白的空白量的差异.在您的示例中,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
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅文档:
http://vimdoc.sourceforge.net/htmldoc/options.html#%27diffopt%27
以下对我来说效果很好:
vimdiff +"set diffopt+=icase" file_1.txt file_2.txt
Run Code Online (Sandbox Code Playgroud)