Wie kann ich beim Lesen einer Datei mit "weniger" oder "mehr" den Inhalt in Farben erhalten?

415

Wenn ich eine Datei in Linux mit dem Befehl lessoder lese more, wie kann ich den Inhalt in Farben erhalten?

Öffne den Weg
quelle
5
Dies scheint im Zusammenhang zu stehen: superuser.com/questions/36022/less-and-grep-color - hilft das?
Jonik
7
Der Titel dieser Frage ist sehr irreführend. Viele Menschen auf dieser Seite erwarten Sie eine Lösung für das Problem Färbung der Landung erhalten, wenn Rohrleitungen einen Befehl mit farbiger Ausgabe less: Farben verloren. (Die Antworten auf diese „Rohrleitungen Problem“ beinhalten less -R, unbufferetc.) Aber die eigentliche Frage bezieht sich auf das Öffnen einer Datei ! - Die Mehrdeutigkeit liegt hauptsächlich im Titel der Frage, aber auch sonst ist die Frage meiner Meinung nach immer noch zu weit gefasst: "Eine Datei lesen" kann sich auf eine beliebige Datei beziehen (wahrscheinlich einfacher Text). (
Nun
Ich muss mich korrigieren, nur bei 3 (oder 4) von 14 Antworten fehlt die eigentliche Frage des OP: die Antworten von ChristopheD , Puneet und Onlyjob ; und vielleicht jbbr . Dennoch gehören zwei dieser Antworten zu den drei Antworten mit den höchsten Stimmen.
3.
@myrdd "Syntax-Hervorhebung" ist der relevante Begriff, dann ... (fragt es nach dem Anzeigen von Farben, nicht nach dem Hinzufügen von Farben?) less -Rwerden auch Dateien bearbeitet, z. B.ls --color=always > /tmp/file && less -R /tmp/file
Gert van den Berg
1
@myrdd Es könnte am sinnvollsten sein, die Frage als "unklar, was gefragt wird" zu schließen, da Fragen, die eine der beiden Fragen stellen, wahrscheinlich als Duplikate dieser Frage markiert werden ... (Und Antworten für eine der beiden Fragen können herabgestuft werden basierend darauf, wie der Wähler es interpretiert ...) (Mein Anwendungsfall war eine Protokolldatei, die (ärgerlicherweise) farbige Escape-Codes enthält)
Gert van den Berg

Antworten:

149

Sie können die Kraft der Pygementisierung mit weniger nutzen - automatisch! (Kein Rohr von Hand erforderlich.)

Installieren Sie es pygmentsmit Ihrem Paketmanager oder pip (möglicherweise aufgerufen python-pygments) oder laden Sie es hier herunter http://pygments.org/download/ .

Schreiben Sie 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";;

    *)
        if grep -q "#\!/bin/bash" "$1" 2> /dev/null; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

In Ihrem .bashrchinzufügen

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

Außerdem müssen Sie ~/.lessfilterausführbar machen, indem Sie ausführen

chmod u+x ~/.lessfilter

Getestet unter Debian.

Du hast die Idee. Dies kann natürlich weiter verbessert werden, indem mehr Erweiterungen akzeptiert werden oder der shebang für andere Interpreten als bash analysiert wird. Sehen Sie sich einige der anderen Antworten dazu an.

Die Idee kam von einem alten Blog-Post der Macher von Pygments , aber der ursprüngliche Post existiert nicht mehr.

Dario Seidl
quelle
6
Wenn Sie die Quellcodedateien einfärben möchten, müssen Sie auch ~ / .lessfilter ausführbar machen, indem Sie ausführen chmod u+x ~/.lessfilter. Sie müssen auch pygementize ( pygments.org/download ) installiert haben.
Sergiy Belozorov
Kann jemand bestätigen, dass dies funktioniert, da es für mich keine Auswirkung hat, wenn ich einen Befehl wiels -l | less
puk
7
@puk du kannst sowas machen ls --color=always -l | less -R. Natürlich gibt es viel zu tippen, aber man könnte es auch mit so etwas aliasen ll. Das ist, wenn Sie keine zusätzlichen Bibliotheken verwenden möchten.
PhilT
2
hat @ SergiyByelozyorovs Kommentar zur Antwort hinzugefügt.
Andrybak
2
Meine Bearbeitung wurde abgelehnt, daher werde ich sie vermutlich stattdessen als Kommentar veröffentlichen: Testen Sie die Exit-Codes von Befehlen nicht indirekt. Sie können verwenden if grep -q "#\!/bin/bash" "$1"(das -qunterdrückt die Standardausgabe). Möglicherweise möchten Sie den Standardfehler mit umleiten 2>/dev/null.
Tom Fenech
503

Versuche Folgendes:

less -R

von man less:

-r oder --raw-control-chars

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

-R oder --RAW-CONTROL-CHARS

Wie -r, aber nur ANSI "color" Escape-Sequenzen werden in "raw" -Form ausgegeben. (...)

ChristopheD
quelle
17
Dies ist nützlich, wenn die Datei selbst die Escape-Codes enthält, die angezeigt werden müssen.
Nitrodist
1
Früher kannte ich mich mit less -r aus, aber die Suche in der Datei mit "/" brachte immer wieder die falschen Zeilen zum Vorschein. -R scheint einen besseren Job zu machen. Danke für den Tipp.
Amos Shapira
54
Es ist zu beachten, dass die meisten Programme den isatty(2)syscall verwenden, um zu prüfen, ob es sich bei ihrer Standardausgabe um ein Terminal handelt, und in der Regel die farbige Ausgabe deaktivieren, wenn dies nicht der Fall ist. Für jede Pipe zu weniger isattywird 0 zurückgegeben. Um zu überprüfen, ob dies funktioniert, versuchen Sieecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e
11
Diese Antwort zeichnet sich nicht dadurch aus, dass tatsächlich etwas getestet wird.
Michael Wolf
18
Sie können auch eingeben, -Rwenn Sie bereits geöffnet haben less, um dies zu erreichen.
Scz
138

Ich habe die Antwort in einem anderen Beitrag erhalten: Less and Grep: Farbige Ergebnisse, wenn eine Pipe von grep zu less verwendet wird

Wenn Sie es einfach ausführen grep --color, wird grep --color=autoerkannt, ob es sich bei der Ausgabe um ein Terminal handelt, und wenn ja, werden Farben aktiviert. Wenn jedoch eine Pfeife erkannt wird, wird die Färbung deaktiviert. Der folgende Befehl:

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

Aktiviert immer die Färbung und überschreibt die automatische Erkennung, und Sie erhalten die Farbhervorhebung in weniger.

Warnung: Nicht --color=alwaysals Alias ​​verwenden, da dies manchmal zu Problemen führt. Deshalb gibt es eine --color=autoOption.

Puneet
quelle
6
Nett, danke. Außer, dass ich -Rals Option dazu lessauch verwenden muss.
naught101
10
Ich glaube, grep -Rist für die Angabe der rekursiven Suche. less -Rist notwendig, um lessdie Farben wieder richtig auszuspucken. grep --color=always [grep cmds] | less -Rfunktioniert bei mir unter OS X 10.7.3!
Steven Lu
@ naught101 @Steven Lu Bearbeitet in, obwohl es den Anschein hat, als müssten manche Leute das nicht benutzen less -R(laut dem Autor des ursprünglichen Beitrags sowieso).
Jtpereyda
2
Gibt es sowieso, um grep nur den Befehl pipe less -R mitzuteilen und dann einfach das Ausmalen zu machen? Wir müssen also nicht immer --color = always und less -R angeben.
A-letubby
1
Dies ist bei weitem die einfachste funktionierende Antwort. Vielen Dank!
Danny Staple
37

Verwenden Sie viewanstelle von less. Es öffnet die Datei mit vimim schreibgeschützten Modus.

Es ist praktisch ein farbiger less: ein Pager, mit dem Sie suchen können /(und mehr). Der einzige Nachteil ist, dass Sie nicht mit beenden können, qaber Sie brauchen:q

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

Riccardo Galli
quelle
Wie wäre es mit der Leistung von großen Dateien? Die Hervorhebung der Vim-Syntax ist bei großen Dateien bekanntermaßen langsam.
Mittwoch,
Ich weiß nicht, was Ihr Wert für "groß" ist, aber das Öffnen einer Datei mit ~ 10000 Zeilen erfolgt augenblicklich, einschließlich der Suche im Inneren.
Riccardo Galli
1
Ich habe hochgestuft (ich wusste nichts darüber view), aber ein weiterer Nachteil ist, dass j / k / hoch / runter nicht sofort scrollen, da es einen Cursor gibt.
Tyler Collier
7
Beachten Sie, dass Sie view -bei der Verrohrung möglicherweise hinzufügen müssen
user45909
6
vimist ein Editor, der die gesamte Datei in den Speicher lädt, während lessein Pager die Datei nur teilweise in den Speicher lädt. Sie werden den Unterschied bei großen Dateien erkennen.
Sjas
16

Um weniger zu sagen, dass Farben angezeigt werden sollen, rufen Sie es mit -R auf:

less -R

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

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

unbuffer <command> | less -R

Beispiel mit Pacman

unbuffer pacman -Ss firefox | less -R

Der unbufferBefehl ist normalerweise Teil des Pakets expect(Arch Linux, Debian / Ubuntu) oder expect-dev(ältere Versionen von Debian / Ubuntu).

Um die Frage der Vollständigkeit zu beantworten:

Wie andere bereits geantwortet haben, pygmentizeeignet sich hervorragend zum Einfärben von Quellcode. Es erfordert nicht unbuffer. Einfachster Anruf:

pygmentize someSource.cpp | less -R
jbbr
quelle
2
Zur Verwendung unbufferauf Ubuntusudo apt install expect
wisbucky
Diese Antwort braucht mehr Gegenstimmen.
Thomas Dignan
Ich habe versucht, die dmesg-Ausgabe zu leiten, um Startfehler zu überprüfen, aber die Farben funktionierten nur, wenn ich den Unbuffer verwendete, was mich total verwirrte: Funktioniert unbuffer dmesg | less -Rwie erwartet.
12.
15

pygmentizeunterstützt die -gOption, den zu verwendenden Lexer automatisch zu erraten. Dies ist nützlich, wenn Dateien STDINohne Überprüfung eines Erweiterungstyps gelesen werden.

Damit müssen Sie nur die folgenden 2 Exporte in Ihrem .bashrcohne zusätzliche Skripte einstellen :

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Tuxdude
quelle
4
Prägnant und effektiv. Ich definiere lieber einen Alias, weil manchmal weniger besser ist. Also: alias lesc = 'LESS = "- R" LESSOPEN = "| pygementize -g% s" less'
Tiago
9

Sie haben nicht gesagt, was diese Farbe bedeuten soll, z. B. wie sollen die Farben für eine Textdatei sein?

Wenn Sie eine Syntaxhervorhebung für den Quellcode wünschen, benötigen Sie einen Quellcode-Textmarker. Ich benutze manchmal Pygementize wie dieses

pygmentize file.cpp | less

oder

pygmentize file.cpp | more

Es gibt noch andere Textmarker.

Das geht ziemlich schnell. Wenn es Ihnen nichts ausmacht, zu starten, vimgibt es einen schreibgeschützten Modus, in dem Sie die Syntax hervorheben können, wenn Sie sie aktiviert haben vim.

view file.cpp

oder alternativ siehe churnds antwort.

Benjamin Bannier
quelle
5

Dies ist eine weitere pygments- basierte Antwort mit mehreren wesentlichen Verbesserungen:

  • bricht nicht lesspipeoder lessfilefiltert
  • arbeitet mit mehreren Eingängen zu less
  • Analysiert den Skripttyp korrekt aus dem Shebang-Header
  • funktioniert für alle 434 von Pygments lexierbaren Dateitypen
  • Farbschema wird als Umgebungsvariable parametriert

Installiere Pygments und Gawk

sudo apt-get install python-pygments python3-pygments gawk

Umgebungsvariablen festlegen

Überprüfen Sie, ob lesspipeoder lessfilebereits aktiviert ist:

echo $LESSOPEN

Wenn Sie dort kein Programm finden, auf das verwiesen wird, stellen Sie sicher, dass lesspipees installiert ist (die meisten Distributionen werden mitgeliefert).

Fügen Sie Folgendes hinzu zu ~/.bashrc:

# sets LESSOPEN and LESSCLOSE variables
eval "$(SHELL=/bin/sh lesspipe)"

# interpret color characters
export LESS='-R'

# to list available styles: `pygmentize -L styles`
export PYGMENTIZE_STYLE='paraiso-dark'

# optional
alias ls='ls --color=always'
alias grep='grep --color=always'

Wenn Sie nicht möchten lesspipe, ersetzen Sie die evalAnweisung durch:

export LESSOPEN='|~/.lessfilter %s'

Erstellen ~/.lessfilter

Fügen Sie den folgenden Code hinzu und machen Sie die Datei ausführbar: chmod u+x ~/.lessfilter

#!/bin/bash
for path in "$@"; do
    # match by known filenames
    filename=$(basename "$path")
    case "$filename" in
        .bashrc|bash.bashrc|.bash_aliases|.bash_environment|.bash_profile|\
        .bash_login|.bash_logout|.profile|.zshrc|.zprofile|.zshrc|.zlogin|\
        .zlogout|zshrc|zprofile|zshrc|zlogin|zlogout|.cshrc|.cshdirs|\
        csh.cshrc|csh.login|csh.logout|.tcshrc|.kshrc|ksh.kshrc)
            # shell lexer
            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE -l sh "$path"
            ;;
        .htaccess|apache.conf|apache2.conf|Dockerfile|Kconfig|external.in*|\
        standard-modules.in|nginx.conf|pacman.conf|squid.conf|termcap|\
        termcap.src|terminfo|terminfo.src|control|sources.list|CMakeLists.txt|\
        Makefile|makefile|Makefile.*|GNUmakefile|SConstruct|SConscript|\
        .Rhistory|.Rprofile|.Renviron|Rakefile|Gemfile|PKGBUILD|autohandler|\
        dhandler|autodelegate|.vimrc|.exrc|.gvimrc|vimrc|exrc|gvimrc|todo.txt)
            # filename recognized
            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE "$path"
            ;;
        *)
            ext=$([[ "$filename" = *.* ]] && echo ".${filename##*.}" || echo '')
            case "$ext" in
                .as|.mxml|.bc|.g|.gd|.gi|.gap|.nb|.cdf|.nbp|.ma|.mu|.at|.run|\
                .apl|.adl|.adls|.adlf|.adlx|.cadl|.odin|.c-objdump|.s|\
                .cpp-objdump|.c++-objdump|.cxx-objdump|.d-objdump|.S|.hsail|\
                .ll|.asm|.ASM|.objdump-intel|.objdump|.tasm|.au3|.ahk|.ahkl|\
                .bb|.decls|.bmx|.bas|.monkey|.BAS|.bst|.bib|.abap|.ABAP|.cbl|\
                .CBL|.cob|.COB|.cpy|.CPY|.gdc|.maql|.p|.cls|.c|.h|.idc|.cpp|\
                .hpp|.c++|.h++|.cc|.hh|.cxx|.hxx|.C|.H|.cp|.CPP|.ino|.clay|\
                .cu|.cuh|.ec|.eh|.mq4|.mq5|.mqh|.nc|.pike|.pmod|.swg|.i|.vala|\
                .vapi|.capnp|.chpl|.icl|.dcl|.cf|.docker|.ini|.cfg|.inf|\
                .pc|.properties|.reg|.tf|.pypylog|.cr|.csd|.orc|.sco|.css|\
                .less|.sass|.scss|.croc|.d|.di|.smali|.jsonld|.json|.yaml|\
                .yml|.dpatch|.darcspatch|.diff|.patch|.wdiff|.boo|.aspx|.asax|\
                .ascx|.ashx|.asmx|.axd|.cs|.fs|.fsi|.n|.vb|.als|.bro|.crmsh|\
                .pcmk|.msc|.pan|.proto|.pp|.rsl|.sbl|.thrift|.rpf|\
                .dylan-console|.dylan|.dyl|.intr|.lid|.hdp|.ecl|.e|.elm|.ex|\
                .exs|.erl|.hrl|.es|.escript|.erl-sh|.aheui|.befunge|.bf|.b|\
                .camkes|.idl4|.cdl|.cw|.factor|.fan|.flx|.flxh|.frt|.f|.F|\
                .f03|.f90|.F03|.F90|.PRG|.prg|.go|.abnf|.bnf|.jsgf|.cyp|\
                .cypher|.asy|.vert|.frag|.geo|.plot|.plt|.ps|.eps|.pov|.inc|\
                .agda|.cry|.hs|.idr|.kk|.kki|.lagda|.lcry|.lhs|.lidr|.hx|\
                .hxsl|.hxml|.sv|.svh|.v|.vhdl|.vhd|.dtd|.haml|.html|.htm|\
                .xhtml|.xslt|.pug|.jade|.scaml|.xml|.xsl|.rss|.xsd|.wsdl|\
                .wsf|.xpl|.pro|.ipf|.nsi|.nsh|.spec|.i6t|.ni|.i7x|.t|.io|\
                .ijs|.coffee|.dart|.eg|.js|.jsm|.juttle|.kal|.lasso|\
                .lasso[89]|.ls|.mask|.j|.ts|.tsx|.jl|.aj|.ceylon|.clj|\
                .cljs|.golo|.gs|.gsx|.gsp|.vark|.gst|.groovy|.gradle|.ik|\
                .java|.kt|.pig|.scala|.xtend|.cpsa|.cl|.lisp|.el|.hy|.lsp|.nl|\
                .kif|.rkt|.rktd|.rktl|.scm|.ss|.shen|.xtm|.cmake|.mak|.mk|\
                .[1234567]|.man|.md|.css.in|.js.in|.xul.in|.rst|.rest|.tex|\
                .aux|.toc|.m|.sci|.sce|.tst|.ml|.mli|.mll|.mly|.opa|.sml|.sig|\
                .fun|.bug|.jag|.mo|.stan|.def|.mod|.mt|.ncl|.nim|.nimrod|.nit|\
                .nix|.cps|.x|.xi|.xm|.xmi|.mm|.swift|.ooc|.psi|.psl|.G|.ebnf|\
                .rl|.treetop|.tt|.adb|.ads|.ada|.pas|.dpr|.pwn|.sp|.pl|.pm|\
                .nqp|.p6|.6pl|.p6l|.pl6|.6pm|.p6m|.pm6|.php|.php[345]|.zep|\
                .praat|.proc|.psc|.lgt|.logtalk|.prolog|.pyx|.pxd|.pxi|.dg|\
                .py3tb|.py|.pyw|.sc|.tac|.sage|.pytb|.qvto|.Rout|.Rd|.R|.rq|\
                .sparql|.ttl|.r|.r3|.reb|.red|.reds|.txt|.rnc|.graph|\
                .instances|.robot|.fy|.fancypack|.rb|.rbw|.rake|.gemspec|\
                .rbx|.duby|.rs|.rs.in|.SAS|.sas|.applescript|.chai|.ezt|\
                .mac|.hyb|.jcl|.lsl|.lua|.wlua|.moo|.moon|.rexx|.rex|.rx|\
                .arexx|.sh|.ksh|.bash|.ebuild|.eclass|.exheres-0|.exlib|.zsh|\
                .sh-session|.shell-session|.bat|.cmd|.fish|.load|.ps1|.psm1|\
                .tcsh|.csh|.ns2|.st|.smv|.snobol|.rql|.sql|.sqlite3-console|\
                .do|.ado|.scd|.tcl|.rvt|.ng2|.tmpl|.spt|.cfc|.cfm|.cfml|\
                .evoque|.kid|.handlebars|.hbs|.phtml|.jsp|.liquid|.mao|.mhtml|\
                .mc|.mi|.myt|.rhtml|.tpl|.ssp|.tea|.twig|.vm|.fhtml|.sls|\
                .feature|.tap|.awk|.vim|.pot|.po|.weechatlog|.todotxt|.thy|\
                .lean|.rts|.u|.vcl|.bpl|.sil|.vpr|.cirru|.duel|.jbst|.qml|\
                .qbs|.slim|.xqy|.xquery|.xq|.xql|.xqm|.whiley|.x10)
                    # extension recognized
                    pygmentize -f 256 -O style=$PYGMENTIZE_STYLE "$path"
                    ;;
                *)
                    # parse the shebang script header if it exists
                    lexer=$(head -n 1 "$path" |grep "^#\!" |awk -F" " \
'match($1, /\/(\w*)$/, a) {if (a[1]!="env") {print a[1]} else {print $2}}')
                    case "$lexer" in
                        node|nodejs)
                            # workaround for lack of Node.js lexer alias
                            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE \
                                -l js "$path"
                            ;;
                        "")
                            exit 1
                            ;;
                        *)
                            pygmentize -f 256 -O style=$PYGMENTIZE_STYLE \
                                -l $lexer "$path"
                            ;;
                    esac
                    ;;
            esac
            ;;
    esac
done
exit 0
Joe Coder
quelle
Der einzige Nachteil bei diesem Ansatz ist, dass Pygments ein Python-Programm ist. Bei der erstmaligen Verwendung während einer Shell-Sitzung tritt eine Kaltstartverzögerung auf. Nachfolgende Aufrufe sind viel schneller.
Joe Coder
Nett! Wirklich umfassend.
Dario Seidl
4

Verwenden Sie das GNU Source-Highlight . Sie können es mit installieren, aptwenn Sie es haben, oder auf andere Weise von der Quelle installieren. Richten Sie dann mit Hilfe der Dokumentation zu Source-highligh einen "Eingabe-Präprozessor" für weniger ein, um mit weniger einzurichten :

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 '

Wenn Sie beim Durchsuchen einer Datei weniger verwenden, wird diese automatisch hervorgehoben, wenn es sich um eine Quelldatei handelt, die von source-highlight behandelt wird.

Xavier-Emmanuel Vincent hat kürzlich eine alternative Version des ANSI-Farbschemas "esc256.style" bereitgestellt: 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 Variante 256 verwendet. Das Skript heißt source-highlight-esc.sh und wird zusammen mit den anderen Binärdateien installiert.

arsaKasra
quelle
3

Wenn Sie eine andere Antwort erweitern möchten, können Sie sie für die meisten, wenn nicht für alle Skripte ohne Erweiterungen verwenden, indem Sie die .lessfilter-Datei ein wenig ändern:

#!/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 noch zu .bashrc hinzufügen:

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

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

$ chmod 700 ~/.lessfilter

Außerdem wollte ich hinzufügen, dass das Paket pygments unter debian python-pygments heißt. Anfangs hatte ich Probleme, es zu finden, weil die offensichtliche Rechtschreibfehler von "Pigmenten" als "Pygmenten" mir nicht genug als Hinweis dienten, dass es sich um ein Paket handelte, dem vom Paketmanager möglicherweise das Präfix "python-" vorangestellt wurde.

Speeddymon
quelle
2
2 Kommentare: 1) Danke für die Verbesserung. 2) Sätze wie "Beste Antwort gewählt" sind nicht besonders gut. das kann sich ändern (in der Tat, wenn dies besser ist als diese Antwort, könnte dieser Beitrag die Top-Antwort werden, an welchem ​​Punkt wird es nur verwirrend sein. Vielleicht sagen Sie einfach "um auf eine andere Antwort zu erweitern" oder "Captaincomics Antwort"?
cpast
2

Sie können die Verwendung eines mostDienstprogramms in Betracht ziehen, das eine farbfreundliche Alternative für lessund darstellt more.

Nurjob
quelle
Können Sie uns ein Beispiel zeigen? Ich habe es hier versucht, und die Ausgabe war schwarz und weiß.
Danilo
Ihre Eingabe sollte Farben enthalten. Zuerst erzeugt eine colorised Probe (zB ccze -A </var/log/dpkg.log, ls -1 --color /var/log) dann Pipe an most: ls -1 --color /var/log | most.
Onlyjob
ja, habe ich: git status | less --color,git status | most --color
danilo
Ich habe die meisten, mehr, weniger verwendet und alle Werkzeuge zeigen Schwarzweiß
danilo
Vergewissern Sie sich, dass Ihr Befehl Farben erzeugt, bevor Sie an lessandere weiterleiten . Stellen Sie sicher, dass Ihr Terminal-Emulator Farben ausgeben kann. Überprüfen Sie die TERMUmgebungsvariable. Lesen Sie mehr in unix.stackexchange.com/questions/148/…. Verwenden Sie nach Möglichkeit eine moderne GNU + Linux-Distribution wie Debian . Verwenden Sie eine Suchmaschine (z. B. duckduckgo.com startpage.com ), um Antworten zu finden. Denken Sie daran, dass Kommentare nicht zur Diskussion stehen.
Nur
2

Aus meinem vollständigen Blog-Beitrag über die Verbesserung weniger Erfahrung: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

Fügen Sie für farbenfrohe Hilfeseiten Folgendes zu Ihrem .bashrcoder hinzu .zshrc:

export LESS_TERMCAP_mb=$'\E[1;31m'     # begin bold
export LESS_TERMCAP_md=$'\E[1;36m'     # begin blink
export LESS_TERMCAP_me=$'\E[0m'        # reset bold/blink
export LESS_TERMCAP_so=$'\E[01;44;33m' # begin reverse video
export LESS_TERMCAP_se=$'\E[0m'        # reset reverse video
export LESS_TERMCAP_us=$'\E[1;32m'     # begin underline
export LESS_TERMCAP_ue=$'\E[0m'        # reset underline

Verwenden Sie zum Hervorheben der Syntax eine vorhandene leistungsstarke Funktion lesspipe.sh, anstatt Ihre eigene zu schreiben: https://github.com/wofr06/lesspipe

xuhdev
quelle
1

Ich habe diese einfache, elegante Lösung gefunden. Sie müssen keine zusätzlichen Komponenten installieren, da diese auf den meisten Computern standardmäßig bereits vorhanden sind. Wie vimauf den meisten Computern standardmäßig installiert, enthält es ein Makro, vimwie es ausgeführt werden sollless

Einige der Optionen, die verwendet werden können, sind das Erstellen eines Alias: alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

oder erstellen Sie einen symbolischen Link: ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Dann rennst du einfach vless myfile.py

Die meisten Informationen habe ich hier

Wellensegler
quelle
1
Ich habe alias lesser='/usr/share/vim/vim80/macros/less.sh'in ~/bash_aliases(in Ubuntu 18.04). Kann Tastenkürzel wie f vorwärts, b rückwärts, d halb runter, u halb rauf, q beenden, etc ... verwenden
Daniel
0

Die für mich intuitivste und einfachste Lösung war das pygmentize
Hinzufügen der folgenden Zeilen zu .bashrc

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

Falls Sie nicht anrufen konnten pygmentize, installieren Sie einfach wie

pip install pygments

ps. Die pygmentizeausführbare Binärdatei würde in /usr/local/bin/oder in Ihrem /home/username/.virtualenv/venvname/bin/oder irgendwo sitzen .

David Jung
quelle
-2

Keines von diesen funktionierte sofort für mich und ich fand einen einfachen Weg, diese Arbeit zu machen, so dass ich dachte, ich würde teilen.

Verwenden Sie einfach tmux, mit dem Sie auf einen größeren Verlauf zugreifen und darin blättern können und die Farben perfekt erhalten bleiben.

math0ne
quelle
1
Erlaubt tmux nicht mehrere Terminals auf einem Bildschirm? Wie ändert sich die Farbdarstellung von less?
Xen2050
@ Xen2050 Ich denke, es ist eine ordentliche Problemumgehung, obwohl diese Antwort nicht erklärt, wie der
Bildlaufmodus aufgerufen wird
-2

Solange der ausgegebene Text Farbkontrollzeichen enthält, reicht less -Rdies aus.

Leonardo Raele
quelle
Dies ist, was eine andere Antwort (von vor 9 Jahren) sagt. Antworten, die andere Antworten duplizieren, sind nicht nützlich.
Kamil Maciorowski
Gut, aber diese Antwort bedeutet nicht, dass sie nur für Dateien gilt, die mit Farbsteuerzeichen erstellt wurden.
Leonardo Raele