Wanneer ik een bestand met &007 of &007 lees, hoe kan ik dan de inhoud in kleuren krijgen?
Wanneer ik een bestand in Linux lees met het commando less
of more
, hoe kan ik dan de inhoud in kleuren krijgen?
Wanneer ik een bestand in Linux lees met het commando less
of more
, hoe kan ik dan de inhoud in kleuren krijgen?
Probeer het volgende:
less -R
van man less
:
-r
of--raw-control-chars
Causes “raw” control characters worden weergegeven. (…)
-R
of--RAW-CONTROL-CHARS
Zoals
-r
, maar alleen ANSI “kleur” escape-sequenties worden in “ruwe” vorm weergegeven. (…)
(update over 2020)
De snellere manier zou het gebruik van less -R
ref. https://superuser.com/a/117842/34893 ](https://superuser.com/a/117842/34893)
U kunt de kracht van pygmentize met minder - automatisch - gebruiken! (U hoeft niet met de hand te pijpen)
Installeer pygments
met uw pakketbeheerder of pip (eventueel met de naam python-pygments
) of haal het hier op http://pygments.org/download/ .
Schrijf een bestand ~/.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 uw .bashrc
voegt u
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
toe. Ook moet u ~/.lessfilter
uitvoerbaar maken door
chmod u+x ~/.lessfilter
te testen op Debian.
U krijgt het idee. Dit kan natuurlijk verder worden verbeterd, door meer uitbreidingen te accepteren of de shebang te parseren voor andere tolken dan bash. Zie daarvoor enkele andere antwoorden.
Het idee kwam uit een oud blogbericht van de makers van Pygments , maar het oorspronkelijke bericht bestaat niet meer.
Ik heb het antwoord in een andere post gekregen: Minder en Grep: Het krijgen van gekleurde resultaten bij het gebruik van een pijp van grep naar minder ](https://superuser.com/questions/36022/less-and-grep-color)
Wanneer u gewoon
grep --color
uitvoert, impliceert ditgrep --color=auto
die detecteert of de uitvoer een terminal is en zo ja, kleuren inschakelt. Wanneer het echter een pijp detecteert, schakelt het de kleuring uit. De volgende opdracht:grep --color=always "search string" * | less -R
zal altijd de automatische detectie van kleuren inschakelen en opheffen, en u krijgt de kleurmarkering in minder.
Waarschuwing: Zet --color=always
niet als een alias, het breekt soms dingen. Daarom is er een --color=auto
optie.
Gebruik view
in plaats van less
. Het opent het bestand met vim
in readonly modus.
Het is praktisch een gekleurde less
: een pager waar je kunt zoeken met / (en meer). Het enige nadeel is dat je niet kunt afsluiten met q maar je hebt :q
nodig. Ook krijg je dezelfde kleurstelling als vim
(omdat je in feite vim
gebruikt).
Om minder te vertellen om kleuren te tonen noem je het met -R:
less -R
. Helaas detecteren sommige programma’s dat hun stdout geen terminal is en schakelen ze de kleuren uit - bijvoorbeeld pacman (Arch Linux package manager).
In die gevallen is het mogelijk om unbuffer
te gebruiken:
unbuffer <command> | less -R
Voorbeeld met behulp van pacman
unbuffer pacman -Ss firefox | less -R
Het unbuffer
commando is meestal onderdeel van het pakket expect
(Arch Linux, Debian/Ubuntu) of expect-dev
(legacy versies van Debian/Ubuntu).
Om de vraag naar volledigheid te beantwoorden:
Zoals anderen al hebben geantwoord, is pygmentize
geweldig voor het inkleuren van broncode. Het vereist geen unbuffer
. Gemakkelijkste oproep:
pygmentize someSource.cpp | less -R
pygmentize
ondersteunt de -g
optie om automatisch de te gebruiken lexer te raden, wat handig is voor bestanden die van STDIN
worden gelezen zonder dat er een extensietype wordt gecontroleerd.
Met behulp daarvan hoeft u alleen de volgende 2 exports in uw .bashrc
in te stellen zonder dat er extra scripts nodig zijn:
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Je hebt niet gezegd wat deze kleur moet betekenen, bijvoorbeeld wat de kleuren moeten zijn voor een tekstbestand?
Als wat je wilt syntax highlighting voor de broncode is, heb je een broncode highlighter nodig. Ik gebruik soms pygmentize zoals deze
pygmentize file.cpp | less
of
pygmentize file.cpp | more
Er zijn andere markeerstiften in de buurt.
Dit is vrij snel. Als je het niet erg vindt om vim
op te starten is er een alleen-lezen modus die je syntaxis markeringen kan geven als je het in vim
hebt.
view file.cpp
of als alternatief zie je het antwoord van churnd.
Dit is weer een antwoord op basis van pyfragmenten , met een aantal belangrijke verbeteringen:
lesspipe
of lessfile
filters
niet - werkt met meerdere ingangen naar less
sudo apt-get install python-pygments python3-pygments gawk
Controleer of lesspipe
of lessfile
al is ingeschakeld:
echo $LESSOPEN
Als u daar geen van beide programma’s ziet, controleer dan of lesspipe
is geïnstalleerd (de meeste distro’s worden meegeleverd).
Voeg het volgende toe aan ~/.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'
Als u lesspipe
niet wilt, vervang dan de verklaring van eval
door:
export LESSOPEN='|~/.lessfilter %s'
~/.lessfilter
Voeg de volgende code toe en maak het bestand uitvoerbaar: 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
Gebruik de GNU Source-highlight ; u kunt het installeren met apt
als u het hebt, of op een andere manier installeren vanaf de bron. Stel vervolgens een “input preprocessor” in voor minder, met behulp van de Source-highligh’ documentatie voor het opzetten met minder :
Dit werd gesuggereerd door Konstantine Serebriany. Het script src-hilite-lesspipe.sh wordt samen met Source-highlight geïnstalleerd. U kunt de volgende omgevingsvariabelen gebruiken:
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=' -R '
Op deze manier, wanneer u minder gebruikt om een bestand te doorbladeren, wordt het automatisch gemarkeerd als het een bronbestand is dat wordt behandeld door bron-highlight.
Xavier-Emmanuel Vincent heeft onlangs een alternatieve versie van ANSI-kleurenschema, esc256.style, geleverd: sommige terminals kunnen 256 kleuren aan. Xavier heeft ook een script geleverd dat controleert hoeveel kleuren uw terminal aankan, en in het geval dat de 256 variant wordt gebruikt. Het script heet source-highlight-esc.sh en wordt samen met de andere binaries geïnstalleerd.
Gecondoleerd uit mijn volledige blogpost over het verbeteren van minder ervaring: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/ ](https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/)_
Voor kleurrijke manpages, voeg het volgende toe aan uw .bashrc
of .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
Voor syntax highlighting, met behulp van een bestaande krachtige lesspipe.sh
om het te behandelen in plaats van het schrijven van uw eigen: https://github.com/wofr06/lesspipe
Om uit te breiden naar een ander antwoord, kunt u het voor de meeste, zo niet al uw scripts die geen extensies hebben, laten werken door het .lessfilter-bestand een beetje aan te passen:
#!/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
U zou nog steeds de twee variabelen moeten toevoegen aan . bashrc:
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
en je moet nog steeds .lessfilter uitvoerbaar maken:
$ chmod 700 ~/.lessfilter
Ook wilde ik toevoegen dat onder debian het python-pygmenten pakket python-pygmenten heet. Ik had in het begin moeite om het te lokaliseren omdat de duidelijke foutieve spelling van “pigmenten” als “pygments” voor mij niet genoeg hint was dat het een pakket was dat door de pakketbeheerder met “python-” zou kunnen worden voorafgegaan.
Ik heb deze eenvoudige elegante oplossing gevonden. Je hoeft niets extra’s te installeren, want het staat standaard al op de meeste machines. Aangezien vim
standaard op de meeste machines is geïnstalleerd, bevat het een macro om vim
uit te voeren zoals less
. Enkele van de opties om het te gebruiken zijn om een alias:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'
te maken of een symbolische link te maken:ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless
. Dan hoeft u alleen maar vless myfile.py
te draaien.
De meest intuïtieve en eenvoudige oplossing voor mij was het gebruik van pygmentize
door onderstaande regels toe te voegen aan .bashrc
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
In het geval je pygmentize
niet kon bellen, installeer dan gewoon zoals
pip install pygments
ps. De pygmentize
executable binary zou in /usr/local/bin/
zitten of in uw /home/username/.virtualenv/venvname/bin/
of ergens.
Een alternatief voor minder/meer dat werkt met kleuren uit de doos is vleermuis. U kunt het installeren met de meeste pakketbeheerders die het gebruiken als een pager en als een kattenvervanger. https://github.com/sharkdp/bat
Zolang de uitvoertekst kleurcontrolekarakters heeft, is less -R
voldoende.