Bardziej szczegółowe porównanie w linii

17

Używam vimdiffdo sprawdzania różnic między plikami, a czasami trochę mi brakuje. na przykład, jeśli mam następujące dwa pliki:

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

i:

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

ich pokazanie vimdiffdaje:

wprowadź opis zdjęcia tutaj

Chcę zobaczyć, że w bc hnie ma wielkich liter.

Czy istnieje sposób, aby powiedzieć vimdiffowi, aby porównał (w tym wierszu) tylko jego część (mam na myśli, zignoruj int i =i + 3)?

elyashiv
źródło
4
Diffchar Wtyczka jest prawdopodobnie to, czego potrzebujesz, ale mam zerowe doświadczenie z nim. Może ktoś z doświadczeniem w korzystaniu z niego może udzielić dobrej, szczegółowej odpowiedzi (lub może alternatywy).
tokoyami,

Odpowiedzi:

15

Nie sądzę, że może to zrobić sam Vim. Od :h view-diffs(moje podkreślenie):

hl-DiffText DiffText Zmieniono tekst w zmienionej linii.  Wigor
                                znajduje pierwszy znak, który jest inny,
                                i ostatnia postać, która jest inna
                                (wyszukiwanie od końca linii).   The
                                tekst pomiędzy jest podświetlony.  To znaczy
                                te części w środku, które wciąż są
                                tak samo są podświetlone.   Tylko „iwhite” z
                                Używa się tutaj „diffopt”.

Sugestia Tokoyamiego przybliża nas o krok. Zainstaluj diffchar( łącze Github dla osób korzystających z autoloadera wtyczek). Od wersji 4.7, z włączoną wtyczką, Vim automatycznie pokazuje dokładniejsze różnice:

wprowadź opis zdjęcia tutaj

  • Możesz nacisnąć F7(domyślna mapa klawiszy), aby przełączyć między zwykłą a wtyczką. Przypisz ponownie za pomocą:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    zastąpienie <key>odpowiednim kodem klucza.

  • Możesz użyć więcej kolorów:

    let g:DiffColors=100
    
muru
źródło
+1, ale „krok bliżej” wydaje mi się zbyt konserwatywny. Diffchar całkowicie rozwiązuje ten problem IMO.
Sparhawk
@Sparhawk dobrze, nie ignoruje wspólnych elementów w linii (OP chce tylko wyróżnione zmiany)
muru
Nie jestem pewien, czy rozumiem. Czy wspólne elementy nie są ignorowane w tym przykładzie (np. printfI ello)?
Sparhawk
1
@Sparhawk w tym przykładzie tak. Ale przy bardziej złożonych zmianach szybko robi się bałagan.
muru
Ach, okej, więc to trochę niedokładne… dzięki za informację.
Sparhawk