vim - 让 gVim 的 vimdiff 忽略大小写

标签 vim vimdiff ignore-case

我试图比较两个汇编文件,其中一个全部大写,另一个小写。许多行在大小写和空格之前都是相同的。

我尝试了以下操作,而两个缓冲区处于 diff 模式:

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

空白的东西似乎工作得很好,但忽略大小写不起作用。例如,在以下两行中:
            I0=R0;              // ADDRESS OF INPUT ARRAY

    i0 = r0;            // address of input array

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

为什么?我能做什么?

更新:刚刚注意到在这两行中,所有差异都被忽略了 OK:
                                // MULTIPLY R1 BY 4 TO FETCH DATA OF WORD LENGTH
                        // multiply r1 by 4 to fetch data of word length

最佳答案

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

根据 vimdiff 文档,您可以覆盖 iwhite 的默认行为。通过设置选项diffexpr为非空值。您感兴趣的差异标志是 --ignore-all-space ,这对空白更灵活。您可以更改 diffexpr在 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

关于vim - 让 gVim 的 vimdiff 忽略大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4830171/

相关文章:

git - 将 git config core.ignorecase 设置为 false 是个好主意吗?

c# - 如何在 C# 中对字符串使用 StringComparison?

vim - 在vim中的多个文件中查找并替换特定字符串的所有实例

vim - 比较 Vim 中的两个选项卡

git - 将 vimdiff 用作 git difftool 时列出文件对

vim - 有没有办法配置 vimdiff 以忽略所有空格?

python - 不区分大小写的 argparse 选择不会丢失选择列表中的大小写信息

python - 如何创建映射以从 Vim 执行 python 代码?

c++ - 如何为 C 和 C++ 文件中的右大括号配置 Vim 的缩进?

vim-snipmate 不扩展非源代码文件