Peut-on moins conserver une sortie colorée?

310

Puis-je obtenir moins de ne pas monochrome sa sortie?

Par exemple, le résultat de git diffest coloré, mais git diff | lessne l’est pas.

ripper234
la source
peut - être la même chose sur super - utilisateur: superuser.com/questions/117841/...
Ciro Santilli新疆改造中心法轮功六四事件
1
Relatif mais pas identique isssue. Le lien est à propos lessseulement.
Abel Cheung

Réponses:

361

Utilisation:

git diff --color=always | less -r

--color=alwaysy a-t-il à dire gitpour sortir les codes de couleur même si la sortie est un tuyau (pas un tty). Et -rest-il là pour lessinterpréter ces codes de couleurs et autres séquences d'échappement? Utilisez -Runiquement pour les codes de couleur ANSI.

Stéphane Gimenez
la source
3
@ ripper234. Avec les gits récents, cela git config color.ui truedevrait être suffisant pour obtenir une sortie colorée, et pour lancer automatiquement un pager pour les sorties longues.
Stéphane Gimenez
4
Parallèlement à cette Q / A, watch --color 'git diff --cached --color=always'ses amis peuvent vous apporter un peu plus de génialité.
Alois Mahdal
27
N’utilise-t-il pas less -Rmieux (ou export LESS=Rdans /etc/profile)? Pourquoi lui permettriez-vous d'afficher autre chose que des séquences d'échappement "couleur" ANSI? En outre, la page de manuel indiqueWarning: when the -r option is used, less cannot keep track of the actual appearance of the screen (since this depends on how the screen responds to each type of control character). Thus, various display problems may result, such as long lines being split in the wrong place.
x-yuri
5
Et si vous avez oublié de spécifier une -roption, vous pouvez simplement taper "-r" à l' lessinvite. Cela fonctionne bien sûr avec la plupart ou la totalité des options (c.- -ià- d., Activer ignorecase).
haridsv
3
grep --color=alwaysfonctionne de la même manière. Cela ne fait pas partie de cette question ou de cette réponse, mais je suis arrivé ici en cherchant sur Google pour la trouver.
Frank Bryce
57

Une autre option serait d’activer les couleurs et d’utiliser «less -r» comme téléavertisseur.

git config --global color.ui true
git config --global core.pager 'less -r'

Cela se traduit par

[color]
    ui = true
[core]
    pager = less -r

dans votre ~ / .gitconfig

Pour plus d'informations, voir le livre Pro Git .

Gerald Senarclens de Grancy
la source
7
En utilisant Git 2.11, j'ai constaté que color.ui truecela ne fonctionnait pas avec un pager, mais que ça fonctionnait color.ui always. Cela a peut-être changé depuis la publication de la réponse.
Tom Zych le
1
Cette option (pour activer les couleurs et utiliser "less -r" comme pageur par défaut) fonctionne avec color.ui trueles commandes telles que git -p diffet git -p status(où -psignifie diriger toute la sortie vers $ PAGER, par défaut, elle less), même pour les anciennes versions de git (par exemple , Git 1.7.1). Mais vous avez toujours besoin color.ui always(ce qui indique à git de générer des codes de couleur "même si la sortie est un tube (pas un tty)") pour obtenir une sortie colorée lorsque vous spécifiez directement git status | less -rou git diff | less -r. Lorsque vous spécifiez explicitement la redirection de sortie, vous ne verrez pas la sortie après avoir quitté le pager.
Kenichi
29

Utilisez l' option -r( --raw-control-chars) pour diminuer ou également -R(uniquement les séquences d'échappement ANSI).

J'ai un alias pour cela dans ~/.bashrc

alias rless='less -r'
enzotib
la source
7
En fait je viens de le faire alias less='less -r'. Aucune raison de ne pas?
ripper234
3
@ ripper234: Je me souviens vaguement qu'il pourrait y avoir des cas où l'utilisation -rlorsque non nécessaire peut conduire à un problème de visualisation.
enzotib
1
Par exemple, lorsque vous jouez ackavec less -rvous perdez un retour de voiture
Nouvelle Alexandrie le
6
Vous pouvez simplement utiliser \lesssi la visualisation échoue.
Brian Peterson
4
Euh, vous ne devez alias lessrien, il vous suffit de définir la $LESSvariable d'environnement sur l'ensemble des drapeaux que vous souhaitez toujours fournir less, par exempleexport LESS='-MRq -z-2 -j2’
wjv
14

A également treeune option pour forcer les couleurs sur:

tree -C | less -r

Et ainsi de suite pour ls:

ls -lR --color | less -r
Antonio Bardazzi
la source
10

Juste pour ajouter une autre version sur "use less -r":

utilisez la variable d'environnement LESS avec la valeur r (ou ajoutez r à ce qu'elle est déjà)

par exemple, comme je l'utilise dans mon .bashrc

  export LESS=-Xr

(Le X empêche l’écran de s’effacer lorsqu’on quitte moins)

MortenSickel
la source
1
Malheureusement, -X interrompt également le défilement de la souris: c
Xerus le
3

Je sais que c'est vieux et que beaucoup ont déjà fourni la bonne réponse, mais je voudrais ajouter qu'il est toujours préférable d'utiliser less -Ret non pas less -rsi vous avez uniquement besoin de couleurs ANSI, car cela -rpourrait poser des problèmes d'affichage des caractères.

Du manuel:

   -r or --raw-control-chars
          Causes "raw" control characters to be displayed.   The  default
          is  to display control characters using the caret notation; for
          example, a control-A (octal 001) is displayed as  "^A".   Warn‐
          ing:  when the -r option is used, less cannot keep track of the
          actual appearance of the screen (since this depends on how  the
          screen responds to each type of control character).  Thus, var‐
          ious display problems may result,  such  as  long  lines  being
          split in the wrong place.

   -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
Naheel
la source