Czy mniej może zachować kolorowe wydruki?

310

Czy mogę uzyskać mniej, aby nie monochromatycznie generować?

Np. Wyjście z git diffjest kolorowe, ale git diff | lessnie jest.

ripper234
źródło
prawdopodobnie to samo na superuser: superuser.com/questions/117841/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
Powiązany, ale nie identyczny problem. Link dotyczy lesstylko.
Abel Cheung

Odpowiedzi:

359

Posługiwać się:

git diff --color=always | less -r

--color=alwaysjest po to, aby powiedzieć, gitaby wyświetlać kody kolorów, nawet jeśli wyjście jest potokiem (a nie tty). I -rjest po to, lessaby zinterpretować te kody kolorów i inne sekwencje specjalne. Używaj tylko -Rdla kodów kolorów ANSI.

Stéphane Gimenez
źródło
3
@ ripper234. W przypadku ostatnich gitów git config color.ui truepowinno wystarczyć, aby uzyskać kolorowe wydruki i automatycznie uruchomić pager dla długich wydruków .
Stéphane Gimenez
4
Równolegle do tego pytania / odpowiedzi, watch --color 'git diff --cached --color=always'a jego przyjaciele mogą przynieść ci dodatkową niesamowitość.
Alois Mahdal
27
Czy nie używasz less -Rlepszego (lub export LESS=Rw /etc/profile)? Dlaczego miałbyś pozwolić, aby wyświetlał cokolwiek innego niż sekwencje specjalne ANSI „kolorowe”? Ponadto strona podręcznika mówiWarning: 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
A jeśli zapomniałeś podać -ropcję, możesz po prostu wpisać „-r” w lesswierszu polecenia. To oczywiście działa z większością lub wszystkimi mniejszymi opcjami (tj., -iAby włączyć ignorowanie).
haridsv
3
grep --color=alwaysdziała w ten sam sposób. To nie jest część tego pytania ani odpowiedzi, ale dotarłem tutaj z Google'a na temat tego pytania, więc jest.
Frank Bryce,
57

Inną opcją byłoby włączenie kolorów i użycie „mniej -r” jako pager.

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

To skutkuje

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

w twoim ~ / .gitconfig

Aby uzyskać więcej informacji, zobacz książkę Pro Git .

Gerald Senarclens de Grancy
źródło
7
Korzystając z Git 2.11, okazało się, że color.ui truenie działało to z pageriem, ale działało color.ui always. To mogło się zmienić od czasu opublikowania odpowiedzi.
Tom Zych
1
Ta opcja (aby włączyć kolory i domyślnie używać „mniej -r” jako pager) color.ui truedziała z komendami takimi jak git -p diffi git -p status(gdzie -poznacza, że ​​wszystkie dane wyjściowe są przesyłane do $ PAGER, domyślnie to jest less) nawet dla dość starych wersji git (na przykład , Git 1.7.1). Ale nadal potrzebujesz color.ui always(co mówi gitowi, aby wypisał kody kolorów „nawet jeśli wyjście jest potokiem (nie tty)”), aby uzyskać kolorowe wydruki, gdy bezpośrednio określisz git status | less -rlub git diff | less -r. Gdy jawnie określisz przekierowanie wyjścia, nie zobaczysz wyniku po wyjściu z pagera.
kenichi
29

Użyj opcji -r( --raw-control-chars), aby zmniejszyć, lub też -R(tylko sekwencje specjalne ANSI).

Mam na to alias ~/.bashrc

alias rless='less -r'
enzotib
źródło
7
Właściwie właśnie to zrobiłem alias less='less -r'. Jest jakiś powód, aby tego nie robić?
ripper234
3
@ ripper234: Niejasno pamiętam, że mogą wystąpić przypadki, w których użycie, -rgdy nie jest potrzebne, może prowadzić do problemu z wizualizacją.
enzotib
1
Na przykład, gdy rurujesz ackze less -rsobą, tracisz zwrot karetki
Nowa Aleksandria
6
Możesz użyć, \lessjeśli wizualizacja się nie powiedzie.
Brian Peterson
4
Uh, nie musisz do lessniczego $LESSlessexport LESS='-MRq -z-2 -j2’
używać
14

Również treema możliwość wymuszenia na kolory:

tree -C | less -r

I tak dalej dla ls:

ls -lR --color | less -r
Antonio Bardazzi
źródło
10

Aby dodać kolejną wersję na „use less -r”:

użyj zmiennej środowiskowej LESS z wartością r (lub dodaj r do tego, co już jest)

np. kiedy używam go w moim .bashrc

  export LESS=-Xr

(X zatrzymuje czyszczenie ekranu przy wychodzeniu mniej)

MortenSickel
źródło
1
niestety -X przerywa mi także przewijanie myszy: c
Xerus
3

Wiem, że to stare i wielu już udzieliło właściwej odpowiedzi, ale chciałbym dodać, że zawsze lepiej jest używać, less -Ra nie, less -rjeśli potrzebujesz tylko kolorów ANSI, ponieważ -rmogą to powodować problemy z wyświetlaniem znaków.

Z instrukcji:

   -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
źródło