Pode-se reter menos a saída colorida?

310

Posso obter menos para não monocromear sua saída?

Por exemplo, a saída de git diffé colorida, mas git diff | lessnão é.

ripper234
fonte
possivelmente o mesmo no superusuário: superuser.com/questions/117841/…
Ciro Santilli escreveu
1
Isssue relacionado, mas não idêntico. O link é lessapenas sobre .
Abel Cheung

Respostas:

361

Usar:

git diff --color=always | less -r

--color=alwaysexiste para informar gita saída de códigos de cores, mesmo se a saída for um pipe (não um tty). E -rexiste para dizer lesspara interpretar esses códigos de cores e outras seqüências de escape. Use apenas -Rpara códigos de cores ANSI.

Stéphane Gimenez
fonte
3
@ ripper234. Com gits recentes, git config color.ui truedeve ser suficiente para obter saída colorida e executar automaticamente um pager para saídas longas.
Stéphane Gimenez
4
Paralelamente a este Q / A, watch --color 'git diff --cached --color=always'e seus amigos podem lhe trazer uma grandiosidade adicional.
Alois Mahdal
27
Não está usando less -Rmelhor (ou export LESS=Rdentro /etc/profile)? Por que você permitiria que ele exibisse algo além de seqüências de escape de "cor" ANSI? Além disso, a página do manual dizWarning: 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
E se você esqueceu de especificar a -ropção, basta digitar "-r" no lessprompt. Obviamente, isso funciona com quase todas as opções (ou seja, -iativar a ignorância).
haridsv
3
grep --color=alwaysfunciona da mesma maneira. Isso não faz parte desta pergunta ou resposta, mas cheguei aqui ao pesquisar sobre essa questão, então está aí.
Frank Bryce
57

Outra opção seria ativar cores e usar 'less -r' como seu pager.

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

Isto resulta em

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

no seu ~ / .gitconfig

Para mais informações, consulte o livro Pro Git .

Gerald Senarclens de Grancy
fonte
7
Usando o Git 2.11, descobri que color.ui truenão funcionava com um pager, mas funcionava color.ui always. Isso pode ter sido alterado desde que a resposta foi postada.
precisa saber é o seguinte
1
Esta opção (para ativar cores e usar 'less -r' como seu pager por padrão) color.ui truefunciona com comandos como git -p diffe git -p status(onde -psignifica canalizar toda a saída para $ PAGER, por padrão é less) mesmo para versões bastante antigas do git (por exemplo , Git 1.7.1). Mas você ainda precisa color.ui always(que instrui o git a imprimir códigos de cores "mesmo que a saída seja um pipe (não um tty)") para obter uma saída colorida quando você especificar git status | less -rou git diff | less -r. Ao especificar o redirecionamento de saída explicitamente, você não verá a saída após sair do pager.
Kenichi
29

Use a opção -r( --raw-control-chars) para less ou também -R(apenas sequências de escape ANSI).

Eu tenho um apelido para isso em ~/.bashrc

alias rless='less -r'
enzotib
fonte
7
Na verdade eu acabei de fazer alias less='less -r'. Alguma razão para não?
precisa saber é o seguinte
3
@ ripper234: Lembro-me vagamente de que poderia haver casos em que o uso -rquando não necessário pode levar a problemas de visualização.
enzotib
1
Por exemplo, quando você canta ackcom less -rvocê perde um retorno de carro
New Alexandria
6
Você pode usar \lessse a visualização atrapalhar.
Brian Peterson
4
Uh, você não tem que aliás lessa qualquer coisa, basta definir a $LESSvariável de ambiente para o conjunto de sinalizadores que você sempre quer fornecer para less, por exemploexport LESS='-MRq -z-2 -j2’
wjv
14

Também treetem uma opção para forçar cores em:

tree -C | less -r

E assim por diante ls:

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

Apenas para adicionar outra versão no "use less -r":

use a variável de ambiente LESS com o valor r (ou adicione r ao que já é)

por exemplo, como eu uso no meu .bashrc

  export LESS=-Xr

(O X interrompe a limpeza da tela ao sair menos)

MortenSickel
fonte
1
infelizmente -X também quebra de rolagem do mouse para mim: c
Xerus
3

Sei que isso é antigo e muitos já forneceram a resposta certa, mas gostaria de acrescentar que é sempre melhor usar less -Re não less -rse você precisar apenas de cores ANSI, pois -rpodem ocorrer problemas na exibição dos caracteres.

Do 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
fonte