Более подробное сравнение в строке

17

Я использую vimdiffдля проверки различий между файлами, и иногда он немного пропускает. например, если у меня есть следующие два файла:

//a.c
printf("Hello\n");

и:

//b.c
int i = printf("hello\n") + 3;

показывая их в т vimdiff:

введите описание изображения здесь

То, что я хочу видеть, - то, что в bc hне является заглавной.

Есть ли способ указать vimdiff сравнить (в этой строке) только его часть (я имею в виду, игнорировать int i =и + 3)?

Эльяшив
источник
4
Возможно, вам нужен плагин diffchar, но у меня с ним нет опыта. Может быть, кто-то с опытом использования может дать хороший, подробный ответ (или, возможно, альтернативу).
токоями

Ответы:

15

Я не думаю, что это может сделать сам Vim. С :h view-diffs(акцент мой):

hl-DiffText DiffText Измененный текст внутри измененной строки.  напор
                                находит первый символ, который отличается
                                и последний символ, который отличается
                                (поиск с конца строки). 
                                текст между выделен.  Это означает
                                что части в середине, которые до сих пор
                                так или иначе выделены.   Только "белый" из
                                Здесь используется diffopt.

Предложение Токоями делает нас на шаг ближе. Установить diffchar( ссылка Github для тех, кто использует плагин автозагрузчик). Начиная с v4.7, с включенным плагином, Vim автоматически показывает более точные различия:

введите описание изображения здесь

  • Вы можете нажать F7(раскладка клавиатуры по умолчанию) для переключения между обычным и плагином. Переназначить с помощью:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    замена <key>на соответствующий код ключа.

  • Вы можете использовать больше цветов:

    let g:DiffColors=100
    
Мур
источник
+1, но «на шаг ближе» кажется мне слишком консервативным. Diffchar полностью решает эту проблему IMO.
Sparhawk
@Sparhawk хорошо, он не игнорирует общие элементы в строке (OP хочет только выделенные изменения)
muru
Я не уверен, что понимаю. Разве общие элементы не игнорируются в этом примере (например, printfи ello)?
Sparhawk
1
@ Sparhawk в этом примере, да. Но с более сложными изменениями это быстро становится грязным.
Муру
А, ладно, значит, он немного глючит ... спасибо за информацию.
Sparhawk