Lorsque je lis un fichier avec la commande &007 ou &007, comment puis-je obtenir le contenu en couleurs ?
Lorsque je lis un fichier sous Linux avec la commande less
ou more
, comment puis-je obtenir le contenu en couleurs ?
Lorsque je lis un fichier sous Linux avec la commande less
ou more
, comment puis-je obtenir le contenu en couleurs ?
Essayez ce qui suit :
less -R
de man less
:
-r
ou--raw-control-chars
provoque l'affichage de caractères de contrôle “bruts”. (…)
-R
ou--RAW-CONTROL-CHARS
Comme
-r
, mais seules les séquences d'échappement “couleur” ANSI sont affichées sous forme “brute”. (…)
(mise à jour sur 2020)
Le moyen le plus rapide serait d'utiliser less -R
réf. https://superuser.com/a/117842/34893
Vous pouvez utiliser la puissance de la pygmée avec moins - automatiquement ! (Pas besoin de pipe à la main.)
Installez pygments
avec votre gestionnaire de paquets ou pip (éventuellement appelé python-pygments
) ou obtenez-le ici http://pygments.org/download/ . Vous devez également rendre ~/.lessfilter
exécutable en exécutant
#!/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
Testé sur Debian.
Vous avez compris. Cela peut bien sûr être amélioré, en acceptant plus d'extensions ou en analysant le shebang pour d'autres interprètes que bash. Voir d'autres réponses à ce sujet.
L'idée vient d'un ancien billet de blog des fabricants de Pygments , mais le billet original n'existe plus.
J'ai eu la réponse dans un autre courrier : Less and Grep : Obtenir des résultats colorés en utilisant un tube de grep à less
Lorsque vous exécutez simplement
grep --color
, cela impliquegrep --color=auto
qui détecte si la sortie est un terminal et si oui, active les couleurs. Cependant, lorsqu'il détecte un tuyau, il désactive la coloration. La commande suivante :grep --color=always "search string" * | less -R
activera toujours la coloration et annulera la détection automatique, et vous obtiendrez la coloration en moins de temps. Avertissement
: Ne mettez pas --color=always
comme alias, cela casse parfois des choses. C'est pourquoi il existe une option --color=auto
.
Utilisez view
au lieu de less
. Il ouvre le fichier avec vim
en mode lecture seule.
C'est pratiquement un less
coloré : un pager où vous pouvez chercher avec / (et plus). Le seul inconvénient est que vous ne pouvez pas sortir avec q mais vous avez besoin de :q
De plus, vous obtenez la même coloration que vim
(puisque vous utilisez en fait vim
).
Malheureusement, certains programmes détectent que leur stdout n'est pas un terminal et désactivent les couleurs - par exemple pacman (gestionnaire de paquets d'Arch Linux). Dans ces cas, il est possible d'utiliser unbuffer
:
less -R
Exemple d'utilisation de pacman
unbuffer <command> | less -R
La commande unbuffer
fait généralement partie du paquet expect
(Arch Linux, Debian/Ubuntu) ou expect-dev
(versions anciennes de Debian/Ubuntu). Pour répondre à la question de complétude :
Comme d'autres l'ont déjà fait, pygmentize
est parfait pour colorier le code source. Il ne nécessite pas de unbuffer
. Appel le plus facile :
unbuffer pacman -Ss firefox | less -R
pygmentize
supporte l'option -g
pour deviner automatiquement le lexique à utiliser, ce qui est utile pour les fichiers lus depuis STDIN
sans vérifier aucun type d'extension.
En utilisant cela, vous devez seulement définir les 2 exportations suivantes dans votre .bashrc
sans aucun script supplémentaire :
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Vous n'avez pas dit ce que cette couleur devait signifier, par exemple quelles devaient être les couleurs d'un fichier texte ?
Si ce que vous voulez, c'est une coloration syntaxique pour le code source, vous avez besoin d'un surligneur de code source. J'utilise parfois pygmentize comme ceci
pygmentize file.cpp | less
ou
pygmentize file.cpp | more
Il existe d'autres surligneurs.
C'est assez rapide. Si vous voulez bien allumer vim
, il y a un mode lecture seule qui peut vous donner une coloration syntaxique si vous l'avez dans vim
.
view file.cpp
ou alors voir la réponse de churnd.
Il s'agit là d'une autre réponse basée sur pygments , avec plusieurs améliorations majeures :
- ne casse pas lesspipe
ou lessfile
filtre
- fonctionne avec plusieurs entrées vers less
- analyse correctement le type de script à partir de l'en-tête shebang
- fonctionne pour les 434 types de fichiers lexibles par Pygments
- le schéma de couleurs est paramétré comme une variable d'environnement
sudo apt-get install python-pygments python3-pygments gawk
Vérifier si lesspipe
ou lessfile
est déjà activé :
echo $LESSOPEN
Si vous ne voyez aucun des programmes référencés ici, assurez-vous que lesspipe
est installé (la plupart des distros sont fournies avec).
Ajoutez le code suivant à ~/.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'
Si vous ne voulez pas de lesspipe
, remplacez l'énoncé eval
par :
export LESSOPEN='|~/.lessfilter %s'
~/.lessfilter
Ajoutez le code suivant et rendez le fichier exécutable : 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
Utilisez le GNU Source-highlight ; vous pouvez l'installer avec apt
si vous l'avez, ou sinon l'installer à partir des sources. Ensuite, installez un “préprocesseur d'entrée” pour moins cher, avec l'aide des documentations “Source-highlight” pour installation avec moins :
Ceci a été suggéré par Konstantine Serebriany. Le script src-hilite-lesspipe.sh sera installé en même temps que le “Source-highlight”. Vous pouvez utiliser les variables d'environnement suivantes :
export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=' -R '
De cette façon, lorsque vous utilisez moins pour parcourir un fichier, s'il s'agit d'un fichier source géré par source-highlight, il sera automatiquement mis en évidence.
Xavier-Emmanuel Vincent a récemment fourni une version alternative du schéma de couleurs ANSI, esc256.style : certains terminaux peuvent gérer 256 couleurs. Xavier a également fourni un script qui vérifie combien de couleurs votre terminal peut gérer, et au cas où, utilise la variante 256. Le script est appelé source-highlight-esc.sh et sera installé avec les autres binaires.
Condensé de mon billet de blog complet sur l'amélioration de l'expérience des moins expérimentés : https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/
Pour des pages de manuel colorées, ajoutez ce qui suit à votre .bashrc
ou .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
Pour la mise en évidence syntaxique, utilisez un lesspipe.sh
puissant existant pour le gérer au lieu d'écrire le vôtre : https://github.com/wofr06/lesspipe
Pour développer une autre réponse, vous pouvez la faire fonctionner pour la plupart, voire la totalité, de vos scripts qui n'ont pas d'extension en modifiant le fichier .lessfilter autour de :
#!/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
Vous devrez toujours ajouter les deux variables à . bashrc :
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
Et vous devrez toujours rendre le fichier .lessfilter exécutable :
$ chmod 700 ~/.lessfilter
Je voulais également ajouter que sous debian le paquet pygments est appelé python-pygments. J'ai eu du mal à le localiser au début parce que la faute d'orthographe évidente de “pigments” comme “pygments” n'était pas une indication suffisante pour moi que c'était un paquet qui pouvait être préfixé avec “python-” par le gestionnaire de paquets.
J'ai trouvé cette solution simple et élégante. Vous n'avez pas besoin d'installer quoi que ce soit de plus car il est déjà là par défaut sur la plupart des machines. Comme vim
est installé par défaut sur la plupart des machines, il comprend une macro pour exécuter vim
comme less
Certaines des options pour l'utiliser sont de créer un alias:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'
ou de créer un lien symbolique:ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless
Ensuite, il suffit d'exécuter vless myfile.py
J'ai obtenu la plupart des informations ici
La solution la plus intuitive et la plus simple pour moi était d'utiliser pygmentize
en ajoutant les lignes ci-dessous à .bashrc
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Au cas où vous ne pourriez pas appeler pygmentize
, il suffit d'installer comme
pip install pygments
ps. Le binaire exécutable de pygmentize
se trouve dans /usr/local/bin/
ou dans votre /home/username/.virtualenv/venvname/bin/
ou quelque part.
Une alternative au moins/plus qui fonctionne avec des couleurs sortant de l'ordinaire est la chauve-souris. Vous pouvez l'installer avec la plupart des gestionnaires de paquets l'utiliser comme pager ainsi que comme remplacement de chat. https://github.com/sharkdp/bat
Tant que le texte de sortie comporte des caractères de contrôle des couleurs, less -R
fera l'affaire.
Aucun d'entre eux ne fonctionnait à ma place et j'ai trouvé un moyen facile de le faire fonctionner, alors j'ai pensé que je pourrais le partager.
Utilisez simplement tmux, qui vous permet d'accéder et de faire défiler un historique plus large et préserve parfaitement les couleurs.