65 votes

La couleur ANSI dans git n'est pas affichée correctement

Récemment, je suis passé à SLES 11. J'ai trouvé un problème pour la commande git. Toutes les couleurs ANSI n'ont pas pu être rendues. Au lieu de cela, il affiche le code ANSI comme ceci :

* ESC [33m *commit 0a02124a0fd85c1f0094bcdf15bac1645e3c8630ESC[m

note : la couleur ansi dans 'ls' fonctionne très bien.

0 votes

Cela pourrait être une copie de stackoverflow.com/questions/6983305/ - en supposant que vous preniez en compte la réponse de Sehe. (Je ne sais vraiment pas pourquoi les gens essaient de fixer LESS afin d'aider Git - il sait ce dont il a besoin).

0 votes

J'avais déjà configuré LESS pour utiliser d'autres paramètres.

74voto

sarnold Points 62720

Essayez de régler votre LESS pour inclure la variable d'environnement -R option :

LESS=-R git grep ...

Si cela fonctionne, ajoutez export LESS=-R à votre ~/.bashrc o ~/.profile ou un fichier de démarrage du shell similaire.

   -R or --RAW-CONTROL-CHARS
          Like -r, but only ANSI "color" escape sequences are
          output in "raw" form.  Unlike -r, the screen
          appearance is maintained correctly in most cases.
          ANSI "color" escape sequences are sequences of the
          form:

               ESC [ ... m

          where the "..." is zero or more color specification
          characters

4 votes

Vous devriez également être en mesure de jouer avec le paramètre de configuration core.pager. Je ne pense pas que juste -R est idéal pour Git - il préfère vraiment FRSX - et en fait, il le définira ainsi si vous n'avez pas déjà défini LESS dans votre environnement.

1 votes

@Jefromi : Je suggère d'ajouter cela comme réponse, cela vaut facilement dix points. :)

31voto

Jefromi Points 127932

Le problème, comme d'autres l'ont noté, est que votre terminal est correct, mais que lorsque Git invoque le pager, il n'interprète pas correctement les codes de couleur ANSI.

Je commencerais par débranchement du site LESS dans votre environnement ; il semble que vous l'ayez précédemment réglé sur quelque chose qui ne correspond pas aux besoins de Git. Si cela résout le problème, vous y êtes. Si vous devez vraiment personnaliser LESS Notez que Git commence avec FRSX par défaut, il faut donc éviter de les modifier si ce n'est pas nécessaire.

Si vous faire pour quelque raison que ce soit, veulent LESS dans votre environnement diffère de ce que vous voulez pour Git, la manière idéale de traiter avec Git et le pager est par le biais de la commande core.pager variable de configuration. Pour citer la page de manuel :

La commande que git utilisera pour paginer la sortie. Elle peut être remplacée par la variable d'environnement GIT_PAGER. Notez que git définit la variable d'environnement LESS à FRSX si elle n'est pas définie lorsqu'il exécute le pager. On peut modifier ces paramètres en définissant la variable LESS à une autre valeur. Il est également possible de remplacer ces paramètres sur un projet ou sur une base globale en définissant l'option core.pager. La définition de l'option core.pager n'a aucun effet sur le comportement de la variable d'environnement LESS ci-dessus, donc si vous souhaitez remplacer les paramètres par défaut de git de cette manière, vous devez être explicite. Par exemple, pour désactiver l'option S de manière rétrocompatible, définissez l'option core.pager sur less -+$LESS -FRX . Ceci sera transmis au shell par git, qui traduira la commande finale en LESS=FRSX less -+FRSX -FRX .

Cela, combiné à une certaine connaissance des options que vous souhaitez, devrait vous mener là où vous voulez être. (La méthode fantaisiste de rétrocompatibilité fonctionne en désactivant toutes les options actuellement présentes dans LESS puis en rajoutant ceux que vous voulez).

19voto

dhavald Points 162

Dans git, vous pouvez modifier votre pager pour qu'il utilise l'option -R option :

git config --global core.pager "less -R"

0 votes

J'ai dû d'abord le désactiver, et ensuite mettre less -R entre guillemets. Mais ça a marché.

6voto

robster_guy Points 41

Pour moi, cela n'a pas fonctionné :

git config --global core.pager less -R

À la place, j'ai ajouté ce qui suit à mon fichier ~/.gitconfig

 [core]
     pager = less -R

Pour le tester, j'ai fait

git log --graph --pretty=format:"%C(yellow)%h%Creset%C(blue)%d%Creset %C(white bold)%s%Creset %C(white dim)(by %an %ar)%Creset" --all

0 votes

Vous pouvez également essayer l'option "--no-pager". Par exemple "git --no-graph diff "

4voto

Rocky Points 1384

OK, je l'ai. Ce problème est lié à la variable LESS.

La ligne suivante résout ce problème :

export LESS="-erX"

2 votes

Vous devriez utiliser "-eRX" au lieu de "-erX" (selon la réponse de Sarnold, ci-dessus). Si vous utilisez "-r", less laissera passer d'autres caractères de contrôle (ce que vous ne voulez probablement pas) et less ne déterminera pas correctement le nombre de lignes de sortie, de sorte que certaines défilent à l'écran (ce que vous ne voulez certainement pas). L'utilisation de "-e" et "-X" n'a rien à voir avec l'interprétation des séquences d'échappement de couleur. "-e" fait en sorte que less se termine automatiquement la deuxième fois que vous atteignez la fin du fichier et "-X" "Désactive l'envoi des chaînes d'initialisation et de désinitialisation de termcap au terminal".

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