Quand j'ai un diff, comment puis-je le coloriser pour qu'il soit beau? Je le veux pour la ligne de commande, donc s'il vous plaît pas de solutions GUI.
unix
command-line
colors
diff
daniel kullmann
la source
la source
Réponses:
Les pages de
diff
manuel ne proposent aucune solution pour la colorisation de l'intérieur. Veuillez envisager d'utilisercolordiff
. C'est un wrapperdiff
qui produit la même sortie que diff, sauf qu'il augmente la sortie en utilisant la coloration syntaxique pour augmenter la lisibilité:ou juste:
Installation:
sudo apt-get install colordiff
brew install colordiff
ouport install colordiff
la source
less -R
, qui affiche correctement les séquences d'échappement des couleurs.-y
option à activer) ☹ Lavimdiff
suggestion ci-dessous est probablement une meilleure façoncolordiff
fonctionne bien poursvn diff | colordiff
(c'est-à-dire dans les situations où vous n'avez que le diff, pas les deux fichiers étant diffed).-y
support côte à côte ( ).Utilisez Vim :
Ou mieux encore, VimDiff (ou
vim -d
, qui est plus court à taper) affichera les différences entre deux, trois ou quatre fichiers côte à côte.Exemples:
la source
ctrl-c
etctrl-x
avoir d'autres utilisations dans Vim.ctrl-q
est capturé par de nombreux terminaux. Voir Écrire et quitter pour trouver la manière qui convient le mieux à vos besoins.zsh
? Je ne reconnais pas la=(...)
construction. Deuxièmement, j'avaisdiff -ur a b
à l'esprit.=(...)
est remplacée par le nom d'un fichier contenant sa sortie.En fait, il semble y avoir encore une autre option (que je n'ai remarquée que récemment, lors de l'exécution du problème décrit ci-dessus):
Si vous disposez de Git (que vous utilisez peut-être déjà de toute façon), vous pourrez l'utiliser à des fins de comparaison, même si les fichiers eux-mêmes ne sont pas sous contrôle de version. S'il n'est pas activé pour vous par défaut, l'activation de la prise en charge des couleurs ici semble être beaucoup plus facile que certaines des solutions de contournement mentionnées précédemment.
la source
git diff <(xxd file1) <(xxd filed)
ne fonctionne pas.git help diff
. Donc, si votre diff git est vide, essayez decd
sortir d'où vous êtes.git config color.diff auto
git diff --no-index
pour comparer deux fichiers.diff --color
option a été ajoutée à GNU diffutils 3.4 (2016-08-08)Il s'agit de l'
diff
implémentation par défaut de la plupart des distributions, qui sera bientôt disponible.Ubuntu 18.04 a
diffutils
3.6 et l'a donc.Sur 3.5, cela ressemble à ceci:
Testé:
Apparemment ajouté dans la validation c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (mars 2015).
Différence au niveau du mot
Comme
diff-highlight
. Pas possible, semble-t-il, demande de fonctionnalité: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.htmlSujets associés:
ydiff
le fait cependant, voir ci-dessous.ydiff
différence de niveau de mot côte à côtehttps://github.com/ymattw/ydiff
Est-ce le Nirvana?
Résultat:
Si les lignes sont trop étroites (80 colonnes par défaut), ajustez à l'écran avec:
Contenu des fichiers de test:
une
b
ydiff
Intégration Gitydiff
s'intègre à Git sans aucune configuration requise.De l'intérieur d'un référentiel git, au lieu de
git diff
, vous pouvez faire simplement:et au lieu de
git log
:Voir aussi: Comment puis-je obtenir un diff côte à côte lorsque je fais "git diff"?
Testé sur Ubuntu 16.04, git 2.18.0, ydiff 1.1.
la source
There is no word-highlighting, yet
- des mises à jour? C'est pour cela que je suis venu à cette question (je veux unegrep --color
sortie de type diff).git diff --color
fonctionne aussi. Utile lorsque vous travaillez sur ssh.diff --color=always | less -R
Et pour les occasions où un
yum install colordiff
ou unapt-get install colordiff
n'est pas une option en raison d'une contrainte insensée hors de votre contrôle immédiat, ou si vous vous sentez juste fou , vous pouvez réinventer la roue avec une ligne de sed:Jetez cela dans un script shell et canalisez une sortie diff unifiée à travers lui.
Il rend les marqueurs de morceau bleus et met en évidence les nouveaux / anciens noms de fichiers et les lignes ajoutées / supprimées en arrière-plan vert et rouge, respectivement. 1 Et cela rendra les changements d' espace de fuite 2 plus visibles que ne peut le faire Colordiff.
1 Soit dit en passant, la raison pour laquelle les noms de fichiers sont mis en évidence de la même manière que les lignes modifiées est que pour différencier correctement les noms de fichiers et les lignes modifiées, il faut analyser correctement le format diff, ce qui n'est pas quelque chose à résoudre avec une expression régulière. Les mettre en évidence les mêmes fonctionne "assez bien" visuellement et rend le problème trivial. Cela dit, il y a quelques subtilités intéressantes .
2 Mais pas les onglets de fin. Apparemment, les onglets ne reçoivent pas leur arrière-plan, du moins dans mon xterm. Cela fait ressortir un peu les changements de tabulation vs d'espace.
la source
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(même si je m'attends à ce qu'il y ait une meilleure façon).Vous pouvez changer la configuration de subversion pour utiliser colordiff
~ / .subversion / config.diff
via: https://gist.github.com/westonruter/846524
la source
Couleur, mot-niveau
diff
ouputVoici ce que vous pouvez faire avec le script ci-dessous et diff-highlight :
(Crédit à la réponse de @ retracile pour la
sed
mise en évidence)la source
vim
, utilisez un plugin, par exemple diffchar .J'utilise
grc
(Generic Colouriser), qui vous permet de colorer la sortie d'un certain nombre de commandes dontdiff
.Il s'agit d'un script python qui peut être enroulé autour de n'importe quelle commande. Ainsi, au lieu d'invoquer
diff file1 file2
, vous invoqueriezgrc diff file1 file2
pour voir la sortie colorisée. J'ai aliasédiff
pourgrc diff
le rendre plus facile.la source
fork()
appels, bien que susceptible de fonctionner avec WSL.Voici une autre solution qui appelle
sed
pour insérer les séquences d'échappement ANSI appropriées pour les couleurs pour montrer les+
,-
et les@
lignes en rouge, vert et cyan, respectivement.Contrairement aux autres solutions à cette question, cette solution ne précise pas explicitement les séquences d'échappement ANSI. Au lieu de cela, il appelle les commandes
tput setaf
ettput sgr0
pour générer les séquences d'échappement ANSI pour définir une couleur appropriée et réinitialiser les attributs de terminal, respectivement.Pour voir les couleurs disponibles pour chaque argument
tput setaf
, utilisez cette commande:Voici à quoi ressemble la sortie:
Voici la preuve que les commandes
tput setaf
ettput sgr0
génèrent les séquences d'échappement ANSI appropriées:la source
Comme
wdiff
accepte les arguments spécifiant la chaîne au début et à la fin des insertions et des suppressions, vous pouvez utiliser des séquences de couleurs ANSI comme chaînes:Par exemple, il s'agit de la sortie de la comparaison de deux fichiers CSV:
Exemple de https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html
la source
colordiff
maintenant (1.0.16) comprendwdiff
, vous pouvez donc aussi tout tuyau:wdiff -n f1 f2 | colordiff
.wdiff
devrait être fusionné en diffutils ...Je vous suggère d' essayer diff-so-fancy . Je l'utilise lors de mon travail et ça me semble très bien dès maintenant. Il est livré avec de nombreuses options et il est vraiment facile de configurer vos diffs comme vous le souhaitez.
Vous pouvez l'installer en:
ou sur Mac:
Ensuite, vous pouvez mettre en évidence vos différences comme ceci:
la source
Avec la commande bat :
la source
Sur les versions récentes de git sur Ubuntu, vous pouvez activer la mise en évidence des différences avec:
Et puis en ajoutant ceci à votre
.gitconfig
:Il est possible que le script se trouve ailleurs dans d'autres distributions, vous pouvez utiliser
locate diff-highlight
pour savoir où.la source
Différence de couleur au niveau des caractères: installez ccdiff
la source