Wenn ich eine Datei mit &007 oder &007 lese, wie kann ich den Inhalt in Farben erhalten?
Wenn ich eine Datei unter Linux mit dem Befehl less
oder more
lese, wie kann ich den Inhalt in Farben erhalten?
Wenn ich eine Datei unter Linux mit dem Befehl less
oder more
lese, wie kann ich den Inhalt in Farben erhalten?
Versuchen Sie Folgendes:
less -R
von man less
:
-r
oder--raw-control-chars
bewirkt, dass “rohe” Steuerzeichen angezeigt werden. (…)
-R
oder--RAW-CONTROL-CHARS
Wie
-r
, jedoch werden nur ANSI-“Farb”-Escape-Sequenzen in “roher” Form ausgegeben. (…)
(Aktualisierung 2020)
Der schnellere Weg wäre die Verwendung von less -R
ref. https://superuser.com/a/117842/34893
Sie können die Kraft der Pygmentierung mit weniger nutzen - automatisch! (Sie brauchen nicht von Hand zu pipen.)
Installieren Sie pygments
mit Ihrem Paketmanager oder pip (möglicherweise python-pygments
genannt) oder holen Sie es hier 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 Ihre .bashrc
fügen Sie
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
ein. Außerdem müssen Sie ~/.lessfilter
ausführbar machen, indem Sie
chmod u+x ~/.lessfilter
Auf Debian getestet ausführen.
Sie bekommen die Idee. Dies kann natÃ?rlich noch weiter verbessert werden, indem man mehr Erweiterungen akzeptiert oder den Sammelsurium fÃ?r andere Interpreter als bash parst. Siehe einige der anderen Antworten dazu.
Die Idee stammt aus einem alten Blog-Post der Hersteller von Pygments , aber der ursprüngliche Post existiert nicht mehr.
Ich habe die Antwort in einem anderen Beitrag erhalten: Less und Grep: Farbige Ergebnisse erhalten, wenn Sie eine Pipe von grep nach less verwenden
Wenn Sie einfach
grep --color
ausführen, impliziert diesgrep --color=auto
, das erkennt, ob die Ausgabe ein Terminal ist, und wenn ja, Farben aktiviert. Wenn es jedoch eine Pipe erkennt, deaktiviert es die Farbgebung. Der folgende Befehl:grep --color=always "search string" * | less -R
wird die Einfärbung immer aktivieren und die automatische Erkennung außer Kraft setzen, und Sie erhalten die farbliche Hervorhebung in weniger.
Warnung: Setzen Sie --color=always
nicht als Alias ein, es macht manchmal Dinge kaputt. Aus diesem Grund gibt es die Option --color=auto
.
Verwenden Sie view
anstelle von less
. Es öffnet die Datei mit vim
im schreibgeschützten Modus.
Es ist praktisch ein farbiger less
: ein Pager, in dem Sie mit / (und mehr) suchen können. Der einzige Nachteil ist, dass Sie mit q nicht aussteigen können, aber Sie brauchen :q
Außerdem erhalten Sie die gleiche Farbgebung wie vim
(da Sie tatsächlich vim
benutzen).
Um weniger zu sagen, Farben zu zeigen, nennen Sie es mit -R:
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, unbuffer
zu verwenden:
unbuffer <command> | less -R
Beispiel mit pacman
unbuffer pacman -Ss firefox | less -R
Der Befehl unbuffer
ist normalerweise Teil des Pakets expect
(Arch Linux, Debian/Ubuntu) oder expect-dev
(Legacy-Versionen von Debian/Ubuntu).
Um die Frage der Vollständigkeit halber zu beantworten:
Wie andere bereits beantwortet haben, eignet sich pygmentize
hervorragend zum Einfärben von Quellcode. Es erfordert nicht unbuffer
. Einfachster Aufruf:
pygmentize someSource.cpp | less -R
pygmentize
unterstützt die Option -g
, um automatisch den zu verwendenden Lexer zu erraten, was für Dateien nützlich ist, die aus STDIN
gelesen werden, ohne einen Erweiterungstyp zu prüfen.
Damit brauchen Sie nur die folgenden 2 Exporte in Ihrer .bashrc
ohne zusätzliche Skripte einzustellen:
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Sie haben nicht gesagt, was diese Farbe bedeuten soll, z.B. was sollen die Farben für eine Textdatei sein?
Wenn Sie Syntax-Highlighting für Quellcode wünschen, benötigen Sie einen Quellcode-Highlighter. Ich benutze manchmal pygmentize wie diesen
pygmentize file.cpp | less
oder
pygmentize file.cpp | more
Es gibt noch andere Textmarker.
Das ist ziemlich schnell. Wenn es Ihnen nichts ausmacht, vim
zu starten, gibt es einen schreibgeschützten Modus, der Ihnen Syntax-Highlighting bietet, wenn Sie es in vim
haben.
view file.cpp
oder alternativ sehen Sie die Antwort von churnd.
Dies ist eine weitere pygments -basierte Antwort mit mehreren wichtigen Verbesserungen:
lesspipe
oder lessfile
filtert less
sudo apt-get install python-pygments python3-pygments gawk
Prüfen Sie, ob lesspipe
oder lessfile
bereits aktiviert ist:
echo $LESSOPEN
Wenn Sie keines der beiden Programme sehen, auf die dort verwiesen wird, stellen Sie sicher, dass lesspipe
installiert ist (die meisten Distributionen sind im Lieferumfang enthalten).
Fügen Sie Folgendes zu ~/.bashrc
hinzu:
# 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 lesspipe
nicht wünschen, ersetzen Sie die Anweisung eval
durch:
export LESSOPEN='|~/.lessfilter %s'
~/.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
Verwenden Sie das GNU Source-highlight ; Sie können es mit apt
installieren, wenn Sie es haben, oder anderweitig aus dem Quellcode installieren. Richten Sie dann einen “Eingabe-Präprozessor” für weniger ein, 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-highligh installiert. Sie können die folgenden Umgebungsvariablen verwenden:
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=' -R '
Wenn Sie zum 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 für den Fall, dass dies der Fall ist, die Variante mit 256 Farben verwendet. Das Skript heißt source-highlight-esc.sh und wird zusammen mit den anderen Binärdateien installiert.
Kurzfassung meines vollständigen Blog-Eintrags über die Verbesserung von weniger Erfahrung: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/ _
Für farbenfrohe Manpages fügen Sie Folgendes zu Ihrer .bashrc
oder .zshrc
hinzu:
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
Für die Syntaxhervorhebung verwenden Sie eine vorhandene leistungsstarke lesspipe.sh
, um sie zu handhaben, anstatt Ihre eigene zu schreiben: https://github.com/wofr06/lesspipe
Um eine weitere Antwort zu erweitern, können Sie es für die meisten, wenn nicht sogar alle Ihre Skripte, die keine Erweiterungen haben, funktionieren lassen, indem Sie die .lessfilter-Datei ein wenig verä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:
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
Und Sie müssen immer noch .lessfilter ausführbar machen:
$ chmod 700 ~/.lessfilter
Außerdem wollte ich hinzufügen, dass unter Debian das Pygments-Paket Python-pygments heißt. Ich hatte anfangs Schwierigkeiten, es zu finden, weil die offensichtliche Fehlschreibweise von “pigments” als “pygments” mir nicht genug Anhaltspunkte dafür lieferte, dass es sich um ein Paket handelt, dem vom Paketmanager “python-” vorangestellt werden könnte.
Ich fand diese einfache elegante Lösung. Sie brauchen nichts extra zu installieren, da es auf den meisten Rechnern bereits standardmäßig vorhanden ist. Da vim
auf den meisten Rechnern standardmäßig installiert ist, enthält es ein Makro zum Ausführen von vim
wie less
Einige der Optionen, um es zu benutzen, sind die Erstellung eines Alias:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'
oder die Erstellung eines symbolischen Links:ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless
Dann führen Sie einfach vless myfile.py
aus Ich habe die meisten Informationen hier
Die intuitivste und einfachste Lösung für mich war die Verwendung von pygmentize
durch Hinzufügen der Zeilen unten zu .bashrc
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Falls Sie pygmentize
nicht aufrufen konnten, installieren Sie einfach wie
ps. Die ausführbare Binärdatei pygmentize
würde in /usr/local/bin/
oder in Ihrer /home/username/.virtualenv/venvname/bin/
oder irgendwo sitzen.
Eine Alternative zu weniger/mehr, die mit Farben aus der Schachtel funktioniert, ist Fledermaus. Sie können ihn mit den meisten Paketmanagern installieren und ihn sowohl als Pager als auch als Katzenersatz verwenden. https://github.com/sharkdp/bat
Solange der Ausgabetext farbige Steuerzeichen enthält, genügt less -R
.
Keines dieser Programme funktionierte für mich direkt nach dem Auspacken, und ich habe mir einen einfachen Weg ausgedacht, um diese Arbeit zu erledigen, also dachte ich, dass ich sie mit anderen teilen würde.
Verwenden Sie einfach tmux, das Ihnen den Zugriff auf und das Blättern durch eine größere Historie ermöglicht und die Farben perfekt bewahrt.