Wie kann ich ein Diff einfärben, damit es gut aussieht? Ich möchte es für die Kommandozeile, also bitte keine GUI-Lösungen.
unix
command-line
colors
diff
Daniel Kullmann
quelle
quelle
Antworten:
Manpages für
diff
schlagen keine Lösung für die Kolorierung aus sich heraus vor. Bitte erwägen Sie die Verwendungcolordiff
. Es handelt sich um einen Wrapperdiff
, der dieselbe Ausgabe wie diff erzeugt, außer dass die Ausgabe mithilfe farbiger Syntaxhervorhebungen erweitert wird, um die Lesbarkeit zu verbessern:oder nur:
Installation:
sudo apt-get install colordiff
brew install colordiff
oderport install colordiff
quelle
less -R
, wodurch die Escape-Sequenzen für Farben korrekt angezeigt werden.-y
Option zum Aktivieren) ☹ Dervimdiff
Vorschlag unten wahrscheinlich ein besserer Wegcolordiff
funktioniert gut fürsvn diff | colordiff
(dh in Situationen, in denen Sie nur den Unterschied haben, nicht die beiden Dateien, die unterschieden werden).-y
) -Unterstützung.Verwenden Sie Vim :
Oder noch besser, VimDiff (oder
vim -d
, dessen Eingabe kürzer ist) zeigt Unterschiede zwischen zwei, drei oder vier Dateien nebeneinander an.Beispiele:
quelle
ctrl-c
undctrl-x
haben andere Verwendungszwecke in Vim.ctrl-q
wird von vielen Terminals erfasst. Unter Schreiben und Beenden finden Sie den Weg, der Ihren Anforderungen am besten entspricht.zsh
? Ich erkenne kein=(...)
Konstrukt. Zweitens hatte ichdiff -ur a b
im Sinn.=(...)
durch den Namen einer Datei ersetzt, die seine Ausgabe enthält.Eigentlich scheint es noch eine andere Option zu geben (die ich erst kürzlich bemerkt habe, als ich auf das oben beschriebene Problem gestoßen bin):
Wenn Sie Git in der Nähe haben (das Sie möglicherweise bereits verwenden), können Sie es zum Vergleich verwenden, auch wenn die Dateien selbst nicht der Versionskontrolle unterliegen. Wenn dies nicht standardmäßig für Sie aktiviert ist, scheint die Aktivierung der Farbunterstützung hier erheblich einfacher zu sein als bei einigen der zuvor genannten Problemumgehungen.
quelle
git diff <(xxd file1) <(xxd filed)
funktioniert das Vergleichen von Binärdateien über nicht.git help diff
. Wenn Ihr Git-Diff leer ist, probieren Siecd
aus, wo Sie sind.git config color.diff auto
git diff --no-index
vergleichen Sie zwei Dateien.diff --color
Option wurde zu GNU diffutils 3.4 (08.08.2016) hinzugefügtDies ist die Standardimplementierung
diff
für die meisten Distributionen, die bald verfügbar sein wird.Ubuntu 18.04 hat
diffutils
3.6 und hat es daher.Auf 3.5 sieht es so aus:
Geprüft:
Anscheinend hinzugefügt in Commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (März 2015).
Diff auf Wortebene
Wie
diff-highlight
. Möglicherweise nicht möglich, Funktionsanforderung: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.htmlVerwandte Themen:
ydiff
tut es aber, siehe unten.ydiff
Side-by-Side-Wortebene diffhttps://github.com/ymattw/ydiff
Ist das Nirvana?
Ergebnis:
Wenn die Linien zu schmal sind (Standard 80 Spalten), passen Sie sie an:
Inhalt der Testdateien:
ein
b
ydiff
Git-Integrationydiff
lässt sich ohne Konfiguration in Git integrieren.Stattdessen
git diff
können Sie in einem Git-Repository Folgendes tun:und statt
git log
:Siehe auch: Wie kann ich ein Side-by-Side-Diff erhalten, wenn ich "Git Diff" mache?
Getestet unter Ubuntu 16.04, Git 2.18.0, Ydiff 1.1.
quelle
There is no word-highlighting, yet
- Irgendwelche Updates? Dafür bin ich auf diese Frage gekommen (ich möchte einegrep --color
ähnliche Diff-Ausgabe).git diff --color
auch. Nützlich bei der Arbeit über ssh.diff --color=always | less -R
Und für die Fälle, in denen ein
yum install colordiff
oder einapt-get install colordiff
aufgrund einer wahnsinnigen Einschränkung, die außerhalb Ihrer unmittelbaren Kontrolle liegt, keine Option ist oder Sie sich nur verrückt fühlen , können Sie das Rad mit einer Reihe von Sed neu erfinden:Werfen Sie das in ein Shell-Skript und leiten Sie eine einheitliche Diff- Ausgabe durch.
Es macht Hunk-Marker blau und hebt neue / alte Dateinamen und hinzugefügte / entfernte Linien in grünem bzw. rotem Hintergrund hervor. 1 Und es macht Änderungen des nachgestellten Raums 2 leichter sichtbar als Colordiff.
1 Der Grund für das Hervorheben der Dateinamen, die mit den geänderten Zeilen identisch sind, besteht im Übrigen darin, dass zur korrekten Unterscheidung zwischen den Dateinamen und den geänderten Zeilen das Diff-Format ordnungsgemäß analysiert werden muss, was mit einem regulären Ausdruck nicht zu bewältigen ist. Das Hervorheben derselben funktioniert visuell "gut genug" und macht das Problem trivial. Trotzdem gibt es einige interessante Feinheiten .
2 Aber keine nachgestellten Tabulatoren. Anscheinend bekommen Tabs ihren Hintergrund nicht eingestellt, zumindest in meinem xterm. Dadurch werden Änderungen an Tabulatoren und Leerzeichen jedoch etwas hervorgehoben.
quelle
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(obwohl ich davon ausgehe, dass es einen besseren Weg gibt).Sie können die Subversion-Konfiguration ändern, um colordiff zu verwenden
~ / .subversion / config.diff
via: https://gist.github.com/westonruter/846524
quelle
Farbige Ausgabe auf
diff
WortebeneFolgendes können Sie mit dem folgenden Skript und dem Diff-Highlight tun :
( Dank an die Antwort von @ retracile für die
sed
Hervorhebung)quelle
vim
ein Plugin verwenden, zB diffchar .Ich verwende
grc
(Generic Colouriser), mit dem Sie die Ausgabe einer Reihe von Befehlen einfärben können, einschließlichdiff
.Es ist ein Python-Skript, das um jeden Befehl gewickelt werden kann. Anstatt also aufzurufen
diff file1 file2
, würden Sie aufrufengrc diff file1 file2
, um die farbige Ausgabe anzuzeigen. Ich habe aliaseddiff
zugrc diff
es einfacher zu machen.quelle
fork()
Aufrufen nicht, obwohl es wahrscheinlich mit WSL funktioniert.Hier ist eine andere Lösung vor, dass Invokes
sed
die entsprechenden ANSI - Escape - Sequenzen zum Einsatz für die Farben zu zeigen+
,-
und@
Linien in Rot, Grün und Cyan sind.Im Gegensatz zu den anderen Lösungen für diese Frage werden in dieser Lösung die ANSI-Escape-Sequenzen nicht explizit angegeben. Stattdessen werden die Befehle
tput setaf
undtput sgr0
aufgerufen, um die ANSI-Escape-Sequenzen zu generieren, um eine geeignete Farbe festzulegen und die Terminalattribute zurückzusetzen.tput setaf
Verwenden Sie diesen Befehl, um die verfügbaren Farben für jedes Argument anzuzeigen:So sieht die Ausgabe aus:
Hier ist der Beweis, dass die Befehle
tput setaf
undtput sgr0
die entsprechenden ANSI-Escape-Sequenzen generieren:quelle
Da
wdiff
Argumente akzeptiert werden, die die Zeichenfolge am Anfang und Ende von Einfügungen und Löschungen angeben, können Sie ANSI-Farbsequenzen als folgende Zeichenfolgen verwenden:Dies ist beispielsweise die Ausgabe des Vergleichs zweier CSV-Dateien:
Beispiel von https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html
quelle
colordiff
jetzt (1.0.16) verstehtwdiff
, so kann man auch einfach pfeifen :wdiff -n f1 f2 | colordiff
.wdiff
sollte in diffutils zusammengeführt werden ...Ich würde Ihnen empfehlen, es mit Diff-So-Fancy zu versuchen. Ich benutze es während meiner Arbeit und es scheint ab sofort sicher großartig zu sein. Es ist mit vielen Optionen ausgestattet und es ist wirklich einfach, Ihre Unterschiede so zu konfigurieren, wie Sie es möchten.
Sie können es installieren durch:
oder auf dem Mac:
Anschließend können Sie Ihre Unterschiede wie folgt hervorheben:
quelle
Mit Fledermausbefehl :
quelle
In neueren Versionen von git unter Ubuntu können Sie die Diff-Hervorhebung aktivieren mit:
Und dann füge dies zu deinem hinzu
.gitconfig
:Möglicherweise befindet sich das Skript an einer anderen Stelle in anderen Distributionen, mit denen Sie
locate diff-highlight
herausfinden können, wo.quelle
Farbdifferenz auf Zeichenebene : Installieren Sie ccdiff
quelle