Kann weniger farbige Ausgabe beibehalten?

310

Kann ich weniger bekommen, um seine Ausgabe nicht zu monochromen?

ZB ist die Ausgabe von git difffarbig, aber git diff | lessnicht.

ripper234
quelle
möglicherweise das gleiche auf superuser: superuser.com/questions/117841/…
Ciro Santilli 新疆 新疆 中心 六四 事件 六四
1
Verwandte, aber nicht identische Ausgabe. Der Link handelt lessnur von.
Abel Cheung

Antworten:

360

Verwenden:

git diff --color=always | less -r

--color=alwaysGibt an, welche gitFarbcodes ausgegeben werden sollen, auch wenn es sich bei der Ausgabe um eine Pipe handelt (nicht um eine Tty). Und -rgibt es zu erzählen less, diese Farbcodes und andere Escape-Sequenzen zu interpretieren. Verwenden Sie -Rfür die ANSI - Farbcodes nur.

Stéphane Gimenez
quelle
3
@ ripper234. Bei neueren Git-Versionen git config color.ui truesollte es ausreichen, eine farbige Ausgabe zu erhalten und bei langen Ausgaben automatisch einen Pager zu starten.
Stéphane Gimenez
4
Parallel zu diesem Q / A watch --color 'git diff --cached --color=always'und seinen Freunden können Sie einige zusätzliche Beeindruckung bringen.
Alois Mahdal
27
Verwenden Sie nicht less -Rbesser (oder export LESS=Rin /etc/profile)? Warum sollten Sie zulassen, dass alles andere als ANSI-Escape-Sequenzen in "Farbe" angezeigt werden? Außerdem steht auf der ManpageWarning: 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 am
5
Und wenn Sie vergessen haben, die -rOption anzugeben , können Sie an der lessEingabeaufforderung einfach "-r" eingeben. Dies funktioniert natürlich mit den meisten oder allen weniger Optionen (z. B. -iIgnorieren von Groß- und Kleinschreibung).
Haridsv
3
grep --color=alwaysfunktioniert genauso. Dies ist nicht Teil dieser Frage oder Antwort, aber ich bin hierher gekommen, weil ich über diese Frage gegoogelt habe.
Frank Bryce
57

Eine andere Möglichkeit wäre, Farben zu aktivieren und 'less -r' als Pager zu verwenden.

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

Das führt zu

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

in deiner ~ / .gitconfig

Weitere Informationen finden Sie im Pro Git-Buch .

Gerald Senarclens de Grancy
quelle
7
Bei Verwendung von Git 2.11 stellte ich fest, dass color.ui truedies bei einem Pager nicht funktioniert hat, color.ui alwaysjedoch. Dies hat sich möglicherweise geändert, seit die Antwort veröffentlicht wurde.
Tom Zych
1
Diese Option (um Farben zu aktivieren und standardmäßig 'less -r' als Pager zu verwenden) color.ui truefunktioniert mit Befehlen wie git -p diffund git -p status(wobei -pbedeutet, dass die gesamte Ausgabe standardmäßig in $ PAGER umgeleitet wird less) auch für ältere Versionen von git (zum Beispiel) Git 1.7.1). Aber Sie müssen immer noch color.ui always(was git anweist, Farbcodes auszugeben "auch wenn die Ausgabe eine Pipe ist (keine tty)"), um eine farbige Ausgabe zu erhalten, wenn Sie direkt git status | less -roder angeben git diff | less -r. Wenn Sie die Ausgabeumleitung explizit angeben, wird die Ausgabe nach dem Beenden des Pagers nicht angezeigt.
Kenichi
29

Verwenden Sie die Option -r( --raw-control-chars) zu weniger oder auch -R(nur ANSI-Escape-Sequenzen).

Ich habe einen Alias ​​dafür in ~/.bashrc

alias rless='less -r'
Enzotib
quelle
7
Eigentlich habe ich gerade getan alias less='less -r'. Irgendein Grund, es nicht zu tun?
Ripper234
3
@ ripper234: Ich erinnere mich vage, dass es Fälle geben kann, in denen die Verwendung, -rwenn sie nicht benötigt wird, zu Visualisierungsproblemen führen kann.
Enzotib
1
Zum Beispiel, wenn Sie ackmit Ihnen Pipe less -rverlieren einen Wagenrücklauf
New Alexandria
6
Sie können nur verwenden, \lesswenn die Visualisierung durcheinander kommt.
Brian Peterson
4
Ähm, Sie müssen nichts als Alias lessangeben, setzen Sie die $LESSUmgebungsvariable einfach auf den Satz von Flags, den Sie immer bereitstellen möchten less, z. B.export LESS='-MRq -z-2 -j2’
wjv
14

Hat treeauch eine Option, um Farben zu erzwingen:

tree -C | less -r

Und so weiter für ls:

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

Nur um eine weitere Version für "use less -r" hinzuzufügen:

benutze die Umgebungsvariable LESS mit dem Wert r (oder füge r zu dem hinzu, was es bereits ist)

zB wie ich es in meiner .bashrc verwende

  export LESS=-Xr

(Das X verhindert, dass der Bildschirm beim Verlassen von weniger gelöscht wird.)

MortenSickel
quelle
1
Leider bricht -X auch das Scrollen mit der Maus für mich ab: c
Xerus
3

Ich weiß, dass dies alt ist und viele bereits die richtige Antwort gegeben haben, aber ich möchte hinzufügen, dass es immer besser ist, ANSI-Farben zu verwenden less -Rund nicht, less -rwenn Sie nur ANSI-Farben benötigen, da -rdies zu Problemen bei der Anzeige der Zeichen führen kann.

Aus dem Handbuch:

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