Detaillierterer Vergleich innerhalb einer Zeile

17

Ich vimdiffüberprüfe die Unterschiede zwischen den Dateien und manchmal wird etwas übersehen. Zum Beispiel, wenn ich die folgenden zwei Dateien habe:

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

und:

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

zeigt sie in vimdiffgibt:

Bildbeschreibung hier eingeben

Was ich sehen möchte, ist, dass in bc das hnicht groß geschrieben wird.

Gibt es eine Möglichkeit, vimdiff anzuweisen, (in dieser Zeile) nur einen Teil davon zu vergleichen (ich meine, das int i =und das zu ignorieren + 3)?

elyashiv
quelle
4
Das Diffchar- Plugin ist wahrscheinlich das, was Sie brauchen, aber ich habe keine Erfahrung damit. Vielleicht kann jemand mit Erfahrung darin eine gute, detaillierte Antwort geben (oder vielleicht eine Alternative).
Tokoyami

Antworten:

15

Ich glaube nicht, dass dies von Vim selbst gemacht werden kann. Von :h view-diffs(Hervorhebung von mir):

hl-DiffText DiffText Geänderter Text in einer geänderten Zeile.  Vim
                                findet das erste Zeichen, das anders ist,
                                und das letzte Zeichen, das anders ist
                                (Suche am Ende der Zeile).   Das
                                Text dazwischen wird hervorgehoben.  Das heisst
                                die Teile in der Mitte, die noch die sind
                                die gleichen sind trotzdem hervorgehoben.   Nur "iwhite" von
                                Hier wird 'diffopt' verwendet.

Tokoyamis Vorschlag bringt uns einen Schritt näher. Installieren diffchar( Github-Link für diejenigen, die einen Plugin-Autoloader verwenden). Seit v4.7 zeigt Vim mit aktiviertem Plugin automatisch genauere Unterschiede an:

Bildbeschreibung hier eingeben

  • Sie können F7(die Standard-Tastaturbelegung) drücken, um zwischen dem üblichen und dem Plugin zu wechseln. Neu zuweisen mit:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    durch <key>einen geeigneten Schlüsselcode ersetzen .

  • Sie können mehr Farben verwenden:

    let g:DiffColors=100
    
muru
quelle
+1, aber "einen Schritt näher" scheint mir zu konservativ. Diffchar löst dieses Problem IMO vollständig .
Sparhawk
@ Sparhawk gut, es ignoriert nicht die gemeinsamen Elemente in einer Zeile (OP will nur die hervorgehobenen Änderungen)
muru
Ich bin mir nicht sicher, ob ich das verstehe. Werden die gemeinsamen Elemente in diesem Beispiel nicht ignoriert (z. B. printfund ello)?
Sparhawk
1
@Sparhawk in diesem Beispiel ja. Bei komplexeren Änderungen wird es jedoch schnell unübersichtlich.
Muru
Ah okay, dann ist es ein bisschen fehlerhaft ... danke für die Information.
Sparhawk