Frage Erhalten Sie Farben in weniger oder mehr


Wenn ich eine Datei in Linux mit dem Befehl lese less oder more, wie kann ich den Inhalt in Farben bekommen?


342
2018-03-09 10:44


Ursprung


Dies scheint verwandt zu sein: superuser.com/questions/36022/less-and-grep-color - hilft es? - Jonik


Antworten:


Sie können die Kraft von pymentment mit weniger nutzen - automatisch! (Keine Notwendigkeit, mit der Hand zu pfeifen.)

Installieren pygments mit Ihrem Paketmanager oder pip (möglicherweise genannt python-pygments) oder hol es hier http://pygmente.org/download/.

Schreibe eine Datei ~/.lessfilter

#!/bin/sh
case "$1" in
    *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
    *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
    *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
    *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
        pygmentize -f 256 "$1";;
    .bashrc|.bash_aliases|.bash_environment)
        pygmentize -f 256 -l sh "$1"
        ;;
    *)
        grep "#\!/bin/bash" "$1" > /dev/null
        if [ "$?" -eq "0" ]; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

In deinem .bashrc hinzufügen

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

Auch müssen Sie machen ~/.lessfilter ausführbar durch Ausführen

chmod u+x ~/.lessfilter

Getestet auf Debian.

Die Idee kam von einem alten Blogbeitrag von der Macher von Pygmenten, aber der ursprüngliche Beitrag existiert nicht mehr.


124
2017-09-20 03:29



Wenn Sie die Quellcode-Dateien färben möchten, müssen Sie auch ~ / .lessfilter ausführbar machen, indem Sie ausführen chmod u+x ~/.lessfilter. Sie müssen auch pygmentieren (pygments.org/download) Eingerichtet. - Sergiy Byelozyorov
Kann mir jemand bestätigen, dass dies funktioniert, da es für mich keinen Effekt hat, wenn ich einen Befehl wie z ls -l | less - puk
Irgendeine Idee, wie man das mit Vladimir Linek's weniger opens.sh ?? Es wird mit diesem Formular eingerichtet: LESSOPEN = "lessopen.sh% s" - Gregory
@puk kannst du sowas machen ls --color=always -l | less -R. Offensichtlich viel zu tippen, aber man könnte es zu etwas wie Alias ​​machen ll. Das ist, wenn Sie keine zusätzlichen Bibliotheken verwenden möchten. - PhilT
hinzugefügt @ SergiyByelozyorovs Kommentar in die Antwort. - andrybak


Versuche Folgendes:

less -R

von man less:

-r oder --raw-control-chars

Bewirkt, dass "rohe" Steuerzeichen angezeigt werden. (...)

-R oder --RAW-CONTROL-CHARS

Mögen -r, aber nur ANSI "Farbe" Escape-Sequenzen werden in "roher" Form ausgegeben. (...)


405
2018-03-09 10:48



Dies ist nützlich, wenn die Datei selbst die Escape-Codes enthält, die angezeigt werden müssen. - Nitrodist
Ich wusste über weniger -r, aber die Suche in der Datei mit "/" brachte immer die falschen Zeilen. -R scheint einen besseren Job zu machen. Danke für den Tipp. - Amos Shapira
Es sollte beachtet werden, dass die meisten Programme die isatty(2) syscall, um zu prüfen, ob ihre Standardausgabe ein Terminal ist, und normalerweise die kolorierte Ausgabe deaktiviert, wenn dies nicht der Fall ist. Für jedes Rohr zu weniger, isattywird 0 zurückgeben. Um zu prüfen, ob das funktioniert, versuchen Sie es echo -e '\x1b[32;1mtest\x1b[m' | less -r - mic_e
Diese Antwort zeichnet sich nicht in dem tatsächlich etwas Test aus. - Michael Wolf
Sie können auch eingeben -R wenn du schon geöffnet hast less um das zu erreichen. - Scz


Ich habe die Antwort in einem anderen Post erhalten: Less and Grep: Farbige Ergebnisse bei Verwendung einer Pipe von grep zu weniger

Wenn du einfach rennst grep --color es   impliziert grep --color=auto welche   erkennt, ob der Ausgang a ist   Terminal und wenn ja, ermöglicht Farben.   Wenn es jedoch ein Rohr erkennt   Deaktiviert die Färbung. Folgende   Befehl:

grep --color=always "search string" * | less -R

Wird immer ermöglichen Färbung und   Überschreiben Sie die automatische Erkennung und   Sie werden die Farbhervorhebung erhalten   Weniger.

Warnung: Nicht setzen --color=always als Alias ​​bricht es manchmal. Deshalb gibt es ein --color=auto Möglichkeit.


114
2018-04-27 04:19



Nett, danke. Außer dass ich benutzen muss -R als eine Option zu less, auch. - naught101
Ich glaube grep -R dient zur Angabe der rekursiven Suche. less -R ist notwendig für less um die Farben wieder richtig auszuspucken. grep --color=always [grep cmds] | less -R funktioniert für mich unter OS X 10.7.3! - Steven Lu
@ naught101 @Steven Lu Edited in, obwohl es scheint, dass einige Leute nicht verwenden müssen less -R (jedenfalls nach dem Autor des Originals). - jtpereyda
Gibt es da eh grep zu wissen, nur pipe less -R-Befehl und dann nur färben? Also müssen wir nicht immer --color = immer und weniger -R setzen. - A-letubby
Dies ist bei weitem die einfachste funktionierende Antwort. Vielen Dank! - Danny Staple


Benutzen view Anstatt von less. Es öffnet die Datei mit vim im schreibgeschützten Modus.

Es ist praktisch eine farbige less: ein Pager, mit dem Sie suchen können / (und mehr). Der einzige Nachteil ist, dass Sie nicht mit beenden können q aber du brauchst :q

Außerdem erhalten Sie die gleiche Farbe wie vim (da du tatsächlich benutzt vim).


30
2017-09-24 09:50



Wie steht es mit der Leistung großer Dateien? Es ist bekannt, dass die Vim-Syntax-Hervorhebung bei großen Dateien langsam ist. - pihentagy
Ich weiß nicht, was ist Ihr Wert für "groß", aber das Öffnen einer ~ 10000 Zeilen Datei ist sofort, Suche innerhalb enthalten. - Riccardo Galli
Ich habe gestimmt (ich wusste nichts davon view) aber ein weiterer Nachteil ist, dass j / k / up / down nicht sofort blättern, da es einen Cursor gibt. - Tyler Collier
Beachten Sie, dass Sie möglicherweise hinzufügen müssen view - wenn Rohrleitungen - user45909
vim ist ein Editor, der die komplette Datei in den Speicher lädt, während less ist ein Pager, der die Datei nur teilweise in den Speicher lädt. Sie werden den Unterschied mit riesigen Dateien kennen. - sjas


Verwenden Sie VIM als Syntax-Hervorhebung Pager.


12
2018-03-09 13:25



Nein, ich fragte nach mehr (oder weniger), nicht nach Vim, danke trotzdem - flow
Offensichtlich ist Syntaxhervorhebung nicht mehr oder weniger standardmäßig integriert, daher verwendet die Problemumgehung einen Alias ​​für eines der VIM-Makros. Es verhält sich mehr oder weniger wie mehr oder weniger. :) - churnd
Wenn Sie vim statt vim verwenden wollen, emulieren Sie weniger ... | vim - von stdin lesen, oder ... | vim -R - nur zum Lesen (um "No write as last change" beim Beenden zu vermeiden). Alias ​​es für den schnellen Gebrauch: alias r='vim -R -' dann ... | r - bain


pygmentize unterstützt die -g Option, um den zu verwendenden Lexer automatisch zu erraten, was für Dateien nützlich ist, von denen gelesen wird STDIN ohne einen Erweiterungstyp zu prüfen.

Verwenden Sie dazu nur die folgenden 2 Exporte in Ihrem .bashrc ohne zusätzliche Skripte:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'

11
2018-03-12 07:17



Präzise und effektiv. Ich bevorzuge es, einen Alias ​​zu definieren, denn manchmal ist weniger besser. Also: alias lesc = 'LESS = "- R" LESSOPEN = "| pygmentize -g% s" weniger' - Tiago


Sie haben nicht gesagt, was diese Farbe bedeuten sollte, z. Was sollten die Farben für eine Textdatei sein?

Wenn Sie Syntaxhervorhebung für den Quellcode wünschen, benötigen Sie einen Quelltext-Highlighter. Ich benutze manchmal pygmenisieren so was

pygmentize file.cpp | less

oder

pygmentize file.cpp | more

Es gibt andere Textmarker in der Nähe.

Das ist ziemlich schnell. Wenn es dir nichts ausmacht zu schießen vim Es gibt einen schreibgeschützten Modus, der Ihnen Syntax-Highlighting geben kann, wenn Sie es haben vim.

view file.cpp

oder alternativ siehe Churnds Antwort.


9
2018-03-09 13:30





Um weniger zu sagen, Farben zu zeigen, rufen Sie es mit -R auf:

less -R

Leider erkennen einige Programme, dass ihr stdout kein Terminal ist und deaktivieren Farben - z. B. pacman (Arch Linux Paketmanager).

In diesen Fällen ist es möglich zu verwenden unbuffer:

unbuffer <command> | less -R

Beispiel mit Pacman

unbuffer pacman -Ss firefox | less -R

Das unbuffer Befehl ist normalerweise Teil der expect-dev(Debian / Ubuntu) oder expect (Arch Linux) Paket.

Um die Frage auf Vollständigkeit zu beantworten:

Wie andere schon geantwortet haben, pygmentize eignet sich hervorragend zum Einfärben von Quellcode. Es ist nicht erforderlich unbuffer. Einfachster Anruf:

pygmentize someSource.cpp | less -R

7
2017-10-08 10:37





Benutze die GNU Quell-Highlight; Sie können es mit installieren apt wenn Sie es haben, oder installieren Sie es anderweitig von der Quelle. Dann richten Sie einen "Input Preprocessor" für weniger, mit Hilfe der Source-highligh 'Dokumentationen für Einrichten mit weniger:

Dies wurde von Konstantine Serebriany vorgeschlagen. Das Skript src-hilite-lesspipe.sh wird zusammen mit source-highlight installiert. Sie können die folgenden Umgebungsvariablen verwenden:

 export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

Auf diese Weise wird, wenn Sie eine Datei weniger durchsuchen, wenn es sich um eine Quelldatei handelt, die von Quelle-Hervorhebung behandelt wird, diese automatisch hervorgehoben.

Xavier-Emmanuel Vincent stellte kürzlich eine alternative Version des ANSI-Farbschemas esc256.style zur Verfügung: Einige Terminals können 256 Farben verarbeiten. Xavier stellte auch ein Skript zur Verfügung, das prüft, wie viele Farben Ihr Terminal verarbeiten kann, und falls es die 256-Variante verwendet. Das Skript heißt source-highlight-esc.sh und wird zusammen mit den anderen Binärdateien installiert.


3
2018-05-25 19:52





Um auf eine andere Antwort zu erweitern, können Sie es für die meisten, wenn nicht für alle Ihre Skripte, die keine Erweiterungen haben, durch einfaches Ändern der .lessfilter-Datei ausführen:

#!/bin/sh
    case "$1" in
    *.awk|*.groff|*.java|*.js|*.m4|*.php|*.pl|*.pm|*.pod|*.sh|\
    *.ad[asb]|*.asm|*.inc|*.[ch]|*.[ch]pp|*.[ch]xx|*.cc|*.hh|\
    *.lsp|*.l|*.pas|*.p|*.xml|*.xps|*.xsl|*.axp|*.ppd|*.pov|\
    *.diff|*.patch|*.py|*.rb|*.sql|*.ebuild|*.eclass)
        pygmentize -f 256 "$1";;
    .bashrc|.bash_aliases|.bash_environment)
        pygmentize -f 256 -l sh "$1"
        ;;
    *)
        scriptExec=$(head -1 "$1" |grep "^#\!" |awk -F" " '{print $1}')
        scriptExecStatus=$?
        if [ "$scriptExecStatus" -eq "0" ]; then
            lexer=$(echo $scriptExec |awk -F/ '{print $NF}')
            pygmentize -f 256 -l $lexer "$1"
        else
            exit 1
        fi
esac

exit 0

Sie müssten die beiden Variablen zu .bashrc hinzufügen:

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

Und Sie müssen immer noch machen .lessfilter ausführbar:

$ chmod 700 ~/.lessfilter

Ich wollte auch hinzufügen, dass unter debian das Paket pythons python-pygments heißt. Ich hatte Schwierigkeiten, es zuerst zu finden, weil das offensichtliche Rechtschreibfehler von "Pigmenten" als "pegments" nicht genug von einem Hinweis für mich war, dass es ein Paket war, das vom Paketmanager "python" vorangestellt werden könnte.


3
2018-02-27 22:45



2 Kommentare: 1) Danke für die Verbesserung. 2) Sätze wie "Beste Antwort gewählt" sind nicht großartig; das kann sich ändern (wenn das besser ist als diese Antwort, Dies Post könnte die beste Antwort sein, zu diesem Zeitpunkt wird es nur verwirrend sein. Vielleicht nur sagen "um eine andere Antwort zu erweitern" oder "Captaincomics Antwort"? - cpast