Как заставить vimdiff gVim игнорировать регистр - PullRequest
10 голосов
/ 28 января 2011

Я пытаюсь сравнить два файла сборки, где один был написан все заглавными буквами, а другой строчными. Многие строки идентичны до регистра и пробела.

Я попробовал следующее, в то время как два буфера в режиме сравнения:

: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 ]

8 голосов
/ 28 января 2011

Ваше сравнение не удается из-за пробелов, а не из-за случая.Это происходит потому, что когда вы используете опцию iwhite, в фоновом режиме vimdiff выполняет diff -b, который более ограничивает сравнение пустых пространств, чем то, что вы ищете.Более конкретно, опция -b игнорирует только различия в количестве пробелов там, где уже есть пробелы .В вашем примере i0 = r0; помечен как отличающийся от I0=R0;, потому что один содержит пробел между символами, а другой нет.

Согласно документации vimdiff, вы можете переопределить поведение по умолчаниюiwhite опция путем установки diffexpr в непустое значение.Интересующий вас флаг diff - --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

3 голосов
/ 14 июля 2017

Мне хорошо подходит следующее:

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