Czy mniej może zachować kolorowe wydruki?


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.


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 .


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'

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

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)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.