Lassen Sie vimdiff verschiedene Linien als verschiedene Linien anzeigen (nicht teilweise verschieden)

8

vimdiff hat die ärgerliche Angewohnheit, zwei fast vollständig unterschiedliche Zeilen als dieselbe teilweise unterschiedliche Zeile anzuzeigen, nur weil sie am Anfang oder am Ende ein gemeinsames Zeichen haben.

Zum Beispiel:

foo.txtenthält : The quick brown fox jumps over the lazy dog. bar.txtenthält : This is a completely different line.

vimdiff foo.txt bar.txtZeigt diese beiden Zeilen nebeneinander an, wobei alles außer dem Tham Anfang hervorgehobenen angezeigt wird .

Gibt es eine Möglichkeit, dieses Verhalten zu deaktivieren und nur verschiedene Zeilen als unterschiedliche Zeilen anzuzeigen?

Shum
quelle
In der Tat ärgerlich. Obwohl mir eine Antwort darauf nicht bekannt ist, füge ich als Problemumgehung einige kontrollierte Zeilen an verschiedenen Stellen auf beiden Seiten hinzu :diffupdate, damit vimdiffdie Speicherorte der beiden Dateien mit den hinzugefügten "Anker" -Matches "synchronisiert" werden.
Ysap

Antworten:

1

Ja, es ist möglich. Geben Sie den Befehl ein

:hi! link DiffChange DiffText
user2987828
quelle
1
Sie können auch einfach tun :hi! link DiffChange DiffText. Aber ist diese Lösung nicht nur ein Papier über das Problem?
Ingo Karkat
@Ingo Karkat: Schön, dass ich nur :hi linkdiese Drucke ausprobiert habe E414, nicht :hi! link. Hier geht es darum, Änderungen zwischen zwei Dateien hervorzuheben. Die Tatsache, dass für vim der Abschnitt, der mit der gewünschten Farbe hervorgehoben werden soll, eine Linie und nicht der Teil einer Linie ist, ist für den Benutzer nicht relevant.
user2987828
Ich habe das Problem so interpretiert, dass es einen Schwellenwert für "Ähnlichkeit" geben sollte, so dass 99% -differenzierende Linien nicht als geändert markiert werden sollten, aber 10% -differenzierende Linien immer noch. Dies ist, was Ihre vorgeschlagene Lösung nicht erreicht (und was tatsächlich Änderungen des Quellcodes erfordern würde).
Ingo Karkat
@Ingo Karkat: Die aktuelle Frage lautet just display different lines as being different lines?. Ich habe die von Ihnen beantwortete Fragenversion jedoch nicht überprüft. Ich würde persönlich das Gegenteil mögen, mit etwas wie diffc: highligh fügte unterdrückte Zeichen hinzu . Und dafür muss ich auch vim patchen.
user2987828
0

Nein, dies ist Teil des internen Algorithmus von Vim, um die vom externen Diff-Tool gemeldeten Linienänderungen weiter zu unterteilen.

Es wäre schön, wenn dies durch eine Option beeinflusst werden könnte, aber es gibt keine aktuelle. Sie müssten den Quellcode von Vim ändern und Ihre eigene spezielle Version kompilieren. Wie wäre es, einen Patch zu schreiben und ihn an die Mailingliste vim_dev zu senden ?!

Ingo Karkat
quelle
1
"Nein" und "Vims Quellcode müssen geändert werden" sind falsch. Siehe meine Antwort.
user2987828
0

Ich denke, es hängt von der Ausgabe des Befehls "diff" ab.

Wenn Sie ": help diff-options" ausführen, sehen Sie ein Beispiel für das Diff-Format, das Vim erwartet:

    1a2
    > bbb
    4d4
    < 111
    7c7
    < GGG
    ---
    > ggg

The "1a2" item appends the line "bbb".
The "4d4" item deletes the line "111".
The '7c7" item replaces the line "GGG" with "ggg".

Ich denke, vimdiff wird die Ersetzungen (z. B. 7c7) nebeneinander platzieren und sie hl-DiffChange färben (z. B. lila in meiner Standardeinstellung) und dann den anderen Text in der Zeile mit hl-DiffText hervorheben (z rot in meiner Standardeinstellung).

Zum Beispiel, wenn ich diese beiden Dateien vimdiff:

Datei 1:

This is common1
This is common2
11111111111111122222222222222222222222222222222222222
This is common4
This is common5

Datei 2:

This is common1
This is common2
This is a completely different line
This is common4
This is common5

Obwohl die dritte Zeile von zwei Dateien völlig unterschiedlich ist, stellt vimdiff sie immer noch nebeneinander.

Eine hackige Lösung verwendet möglicherweise ein externes Diff-Programm zum Ändern, das das gewünschte Format erzeugt.

Johnlcf
quelle