Більш детальне порівняння в межах рядка


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 Змінено текст у зміненому рядку.  Вим
                                знаходить першого персонажа, який відрізняється,
                                і останній персонаж, який відрізняється
                                (пошук з кінця рядка).   The
                                текст між ними виділяється.  Це означає
                                ті частини в середині, які все ще є
                                такі ж виділяються в будь-якому випадку.   Тільки "iwhite" з
                                Тут використовується "дифтопт".

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

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

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

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    заміни <key>відповідним кодом ключа.

  • Ви можете використовувати більше кольорів:

    let g:DiffColors=100
    

+1, але "на крок ближче" мені здається надто консервативним. Diffchar повністю вирішує це питання IMO.
Sparhawk

@Sparhawk добре, він не ігнорує загальні елементи в рядку (ОП хоче лише виділити зміни)
muru

Я не впевнений, що розумію. Чи не ігноруються загальні елементи в цьому прикладі (наприклад, printfта ello)?
Sparhawk

1
@Sparhawk у цьому прикладі, так. Але при більш складних змінах він швидко стає безладним.
муру

Ну гаразд, значить, це трохи баггі тоді ... дякую за інформацію.
Sparhawk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.