¿Puede retener menos salida de color?

310

¿Puedo obtener menos para no monocromo su salida?

Por ejemplo, la salida de git diffes de color, pero git diff | lessno lo es.

ripper234
fuente
posiblemente lo mismo en superusuario: superusuario.com/questions/117841/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
Emisión relacionada pero no idéntica. El enlace es lesssolo sobre .
Abel Cheung el

Respuestas:

361

Utilizar:

git diff --color=always | less -r

--color=alwaysestá ahí para decirle gita los códigos de color de salida, incluso si la salida es una tubería (no un tty). Y -restá ahí para decir lessque interprete esos códigos de color y otras secuencias de escape. Úselo solo -Rpara códigos de color ANSI.

Stéphane Gimenez
fuente
3
@ ripper234. Con gits recientes, git config color.ui truedebería ser suficiente para obtener una salida en color y ejecutar automáticamente un buscapersonas para salidas largas.
Stéphane Gimenez
44
Paralelamente a este Q / A, watch --color 'git diff --cached --color=always'y sus amigos pueden brindarte algo de genialidad adicional.
Alois Mahdal
27
¿No está usando less -Rmejor (o export LESS=Ren /etc/profile)? ¿Por qué permitiría que mostrara algo más que secuencias de escape de "color" ANSI? Además, la página del manual diceWarning: 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
55
Y si olvidó especificar la -ropción, puede escribir "-r" en el lessindicador. Por supuesto, esto funciona con la mayoría o todas las opciones menos (es decir, -iactivar ignorecase).
haridsv
3
grep --color=alwaysFunciona de la misma manera. Esto no es parte de esta pregunta o respuesta, pero llegué aquí buscando en Google esa pregunta, así que ahí está.
Frank Bryce
57

Otra opción sería habilitar colores y usar 'less -r' como buscapersonas.

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

Esto resulta en

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

en su ~ / .gitconfig

Para obtener más información, consulte el libro Pro Git .

Gerald Senarclens de Grancy
fuente
77
Usando Git 2.11, descubrí que color.ui trueno funcionaba con un buscapersonas, pero color.ui alwayssí. Esto puede haber cambiado desde que se publicó la respuesta.
Tom Zych
1
Esta opción (para habilitar colores y usar 'less -r' como buscapersonas de forma predeterminada) color.ui truefunciona para comandos como git -p diffy git -p status(donde -psignifica canalizar toda la salida a $ PAGER, por defecto es less) incluso para versiones bastante antiguas de git (por ejemplo , Git 1.7.1). Pero aún necesita color.ui always(lo que le dice a git que envíe códigos de color "incluso si la salida es una tubería (no un tty)") para obtener una salida de color cuando especifica directamente git status | less -ro git diff | less -r. Cuando especifica la redirección de salida explícitamente, no verá la salida después de salir del buscapersonas.
kenichi
29

Use la opción -r( --raw-control-chars) para menos, o también -R(solo secuencias de escape ANSI).

Tengo un alias para esto en ~/.bashrc

alias rless='less -r'
enzotib
fuente
77
En realidad lo acabo de hacer alias less='less -r'. ¿Alguna razón para no hacerlo?
ripper234
3
@ ripper234: Recuerdo vagamente que podría haber casos en los que usarlos -rcuando no sean necesarios puede ocasionar problemas de visualización.
enzotib
1
Por ejemplo, cuando conectas ackcon una tubería less -rpierdes un retorno de carro
Nueva Alejandría
66
Solo puede usar \lesssi la visualización se complica.
Brian Peterson
44
Uh, no tienes que usar alias lesspara nada, solo configura la $LESSvariable de entorno al conjunto de indicadores que siempre deseas proporcionar less, por ejemploexport LESS='-MRq -z-2 -j2’
wjv
14

También treetiene una opción para forzar colores en:

tree -C | less -r

Y así sucesivamente para ls:

ls -lR --color | less -r
Antonio Bardazzi
fuente
10

Solo para agregar otra versión en "use less -r":

use la variable de entorno MENOS con el valor r (o agregue r a lo que ya es)

por ejemplo, como lo uso en mi .bashrc

  export LESS=-Xr

(La X detiene el borrado de la pantalla al salir menos)

MortenSickel
fuente
1
desafortunadamente -X también rompe el desplazamiento del mouse para mí: c
Xerus
3

Sé que esto es antiguo y muchos ya han proporcionado la respuesta correcta, pero me gustaría agregar que siempre es mejor usarlo less -Ry no less -rsi solo necesita colores ANSI, ya que -rpueden presentarse problemas al mostrar los caracteres.

Del manual:

   -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
fuente