Wie kann ich eine Diff. so einfärben, dass sie gut aussieht?
Ich möchte es für die Kommandozeile, also bitte keine GUI-Lösungen.
Wie kann ich eine Diff. so einfärben, dass sie gut aussieht?
Ich möchte es für die Kommandozeile, also bitte keine GUI-Lösungen.
Farbig, Wortebene diff
Ausgabe
Das können Sie mit dem folgenden Skript und diff-highlight :
#!/bin/sh -eu
# Use diff-highlight to show word-level differences
diff -U3 --minimal "$@" |
sed 's/^-/\x1b[1;31m-/;s/^+/\x1b[1;32m+/;s/^@/\x1b[1;34m@/;s/$/\x1b[0m/' |
diff-highlight
(Kredit an <a href="https://stackoverflow.com/a/16865578/5353461">@retracile's Antwort </a>für die <code>sed</code> Hervorhebung)
Diese Antwort verdient mehr Anerkennung! Sie verwendet eine Toolchain, die Sie wahrscheinlich schon haben, und funktioniert großartig (und gilt für git log, git show und git diff!
Sie können die Subversion Konfiguration zur Verwendung von colordiff:
~/.subversion/config.diff
### Set diff-cmd to the absolute path of your 'diff' program.
### This will override the compile-time default, which is to use
### Subversion's internal diff implementation.
-# diff-cmd = diff_program (diff, gdiff, etc.)
+diff-cmd = colordiff
Svn: Der Prozess 'colordiff' kann nicht gestartet werden: Ressource vorübergehend nicht verfügbar
Ich benutze grc
(Generic Colouriser), mit dem Sie die Ausgabe einer Reihe von Befehlen einfärben können, darunter diff
.
Es handelt sich um ein Python-Skript, das um einen beliebigen Befehl gewickelt werden kann. Anstatt also den Befehl diff file1 file2
aufzurufen, würden Sie grc diff file1 file2
um eine kolorierte Ausgabe zu sehen. Ich habe aliased diff
à grc diff
um es einfacher zu machen.
Desde wdiff
Argumente akzeptiert, die die Zeichenkette am Anfang und am Ende der Einfügungen und Löschungen angeben, können Sie ANSI-Farbsequenzen als diese Zeichenketten:
wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2
Dies ist zum Beispiel die Ausgabe des Vergleichs zweier CSV-Dateien:
Beispiel aus _2.2 Konkrete Beispiele für die Verwendung von wdiff_ .
Hier ist eine weitere Lösung, die auf sed
um die entsprechenden ANSI-Escape-Sequenzen für Farben einzufügen, um die +
, -
y @
Linien in Rot, Grün bzw. Cyan.
diff -u old new | sed "s/^-/$(tput setaf 1)&/; s/^+/$(tput setaf 2)&/; s/^@/$(tput setaf 6)&/; s/$/$(tput sgr0)/"
Im Gegensatz zu den anderen Lösungen zu dieser Frage werden bei dieser Lösung die ANSI-Escape-Sequenzen nicht explizit angegeben. Stattdessen ruft sie die tput setaf
y tput sgr0
Befehle, um die ANSI-Escape-Sequenzen zum Setzen einer geeigneten Farbe bzw. zum Zurücksetzen von Terminalattributen zu erzeugen.
Um die verfügbaren Farben für jedes Argument zu sehen tput setaf
verwenden Sie diesen Befehl:
for i in {0..255}; do tput setaf $i; printf %4d $i; done; tput sgr0; echo
So sieht die Ausgabe aus:
Hier ist der Beweis, dass die tput setaf
y tput sgr0
Befehle erzeugen die entsprechenden ANSI-Escape-Sequenzen:
$ tput setaf 1 | xxd -g1
00000000: 1b 5b 33 31 6d .[31m
$ tput setaf 2 | xxd -g1
00000000: 1b 5b 33 32 6d .[32m
$ tput setaf 6 | xxd -g1
00000000: 1b 5b 33 36 6d .[36m
$ tput sgr0 | xxd -g1
00000000: 1b 28 42 1b 5b 6d .(B.[m
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
7 Stimmen
Ein bestimmtes Betriebssystem/Shell?
4 Stimmen
Versuchen Sie github.com/walles/riff . Als zusätzlicher Bonus wird hervorgehoben, welche Teile der Linien sich geändert haben.
0 Stimmen
Emacs macht großartige Farbunterschiede in einem Terminal; ist es das, was Sie mit nicht-GUI meinen? Siehe unix.stackexchange.com/a/613399/80268 .