615 Stimmen

Einfärben von diff auf der Kommandozeile

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.

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 .

18voto

Tom Hale Punkte 32065

Farbig, Wortebene diff Ausgabe

Das können Sie mit dem folgenden Skript und diff-highlight :

Coloured diff screenshot

#!/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)

0 Stimmen

Wie kann ich diese Ausgabe in GVim verwenden?

0 Stimmen

Für vim verwenden Sie ein Plugin, z. B. diffchar .

0 Stimmen

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!

16voto

Azd325 Punkte 4924

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

über: https://gist.github.com/westonruter/846524

0 Stimmen

Svn: Der Prozess 'colordiff' kann nicht gestartet werden: Ressource vorübergehend nicht verfügbar

0 Stimmen

Haben Sie colordiff installiert?

0 Stimmen

Ja, ich habe auch versucht, den Pfad hart zu kodieren (unter Cygwin)

11voto

dogbane Punkte 253146

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.

0 Stimmen

Funktioniert nicht unter Windows mit mingw/cygwin aufgrund von fork() Anrufe, obwohl sie wahrscheinlich mit WSL funktionieren.

10voto

jcomeau_ictx Punkte 36287

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:

diff output of CSV files

Beispiel aus _2.2 Konkrete Beispiele für die Verwendung von wdiff_ .

1 Stimmen

colordiff jetzt (1.0.16) versteht wdiff Sie können also auch einfach pfeifen: wdiff -n f1 f2 | colordiff . wdiff sollte in diffutils zusammengeführt werden...

10voto

Susam Pal Punkte 29750

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:

enter image description here

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

0 Stimmen

Wenn Sie tput: unkown terminfo capability in 'srg0' bedeutet, dass Ihr Betriebssystem alt ist und tput srg0 nicht erkennt, ich konnte es benutzen tput setaf 7 im letzten sed-Befehl, um die Farbe wieder weiß zu machen

CodeJaeger.com

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.

Powered by:

X