12 votes

Git - Colorier les mots en excluant {}

Je suis en train d'utiliser git avec --color-words pour visualiser ma différence. Dans ma différence, il montre que j'ai supprimé

{{ljcount}}   Modifications

Et que j'ai ajouté :

{{skills_limits}}   Modifications

C'est plus grand que ce que je voudrais (je veux que la limite des mots soit à {}). J'ai essayé de jouer avec --word-diff-regex, mais je n'ai pas réussi à trouver une regex qui fonctionne. Comment puis-je obtenir ce résultat ?

12voto

holygeek Points 6580

De git help diff:

   --word-diff-regex=
       Utilise  pour décider de ce qu'est un mot, au lieu de considérer des séries de non-espaces comme un mot. Implique également
       --word-diff sauf s'il était déjà activé.

L'expression suivante fera en sorte qu'un mot soit une chaîne de caractères et de soulignés, ou n'importe quel caractère non vide.

$ git diff --color-words --word-diff-regex='\\w+|[^[:space:]]'

9voto

arekolek Points 1

Étant donné que vous utilisez déjà --color-words, vous n'avez pas besoin de fournir --word-diff-regex séparément, la première option accepte une expression régulière :

--color-words[=]

Équivalent à --word-diff=color plus --word-diff-regex= (si une regex a été spécifiée).

Une regex qui fonctionne particulièrement bien pour moi est :

$ git diff --color-words='\w+|.'

2voto

VonC Points 414372

Si vous utilisez --color-words[=], assurez-vous d'utiliser Git 2.32 (Q2 2021) ou plus récent : le mode word-diff a été amélioré pour fonctionner correctement avec une expression régulière de mot qui peut correspondre à une chaîne vide.

Voir commit 0324e8f (04 mai 2021) par Phillip Wood (phillipwood).
(Fusionné par Junio C Hamano -- gitster -- dans commit 65c1891, 14 mai 2021)

word diff : gérer les correspondances de longueur zéro

Signé par : Phillip Wood

Si find_word_boundaries() rencontre une correspondance de longueur zéro (qui peut être causée par la correspondance d'un saut de ligne ou en utilisant '*' au lieu de '+' dans l'expression régulière) nous arrêtons de diviser l'entrée en mots ce qui génère une différence inexacte.
Pour résoudre cela, incrémentez le point de départ lorsqu'il y a une correspondance de longueur zéro et essayez une nouvelle correspondance.
Ceci est sûr car les expressions régulières posix retournent toujours la correspondance la plus longue disponible, donc une correspondance de longueur zéro signifie qu'il n'y a plus de correspondances disponibles à partir de la position actuelle.

Le commit bf82940 ("color-words : activer REG_NEWLINE pour aider l'utilisateur", 17 janvier 2009, Git v1.6.2-rc0 -- fusion) empêchait les sauts de ligne dans les classes de caractères négatifs mais il est toujours possible pour l'utilisateur d'avoir une correspondance explicite de saut de ligne dans l'expression régulière ce qui pourrait causer une correspondance de longueur zéro.

On pourrait argumenter que avoir des correspondances explicites de sauts de ligne ou utiliser '*' plutôt que '+' sont des erreurs de l'utilisateur mais il semble être préférable de les contourner plutôt que de produire des différences inexactes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X