517 votes

Lorsque je lis un fichier avec `less` ou `more`, comment puis-je obtenir le contenu en couleurs ?

Quand je lis un fichier sous Linux avec la commande less o more comment puis-je obtenir le contenu en couleurs ?

6 votes

Cela semble lié : superuser.com/questions/36022/less-et-grep-color - Est-ce que ça aide ?

10 votes

Le titre de cette question est très trompeur. De nombreuses personnes arrivant sur cette page s'attendent à trouver une solution au problème de coloration que vous rencontrez lorsque tuyauterie une commande avec une sortie colorée vers less : les couleurs sont perdues. (Les réponses à ce "problème de tuyauterie" impliquent less -R , unbuffer etc.) Mais la vraie question porte sur ouverture d'un fichier ! - L'ambiguïté réside principalement dans le titre de la question, mais même en dehors de cela, IMHO la question est encore trop large : "lire un fichier" pourrait se référer à tout (probablement du texte brut). (enfin, "obtenir le contenu en couleurs" fait probablement référence à la coloration syntaxique).

0 votes

Je dois me corriger, seulement 3 (ou 4) des 14 réponses ne répondent pas à la question réelle du PO : les réponses de ChristopheD , Puneet y Onlyjob ; et peut-être jbbr . Pourtant, deux de ces réponses font partie des trois réponses les plus votées.

18voto

George Willcox Points 1858

pygmentize soutient le -g pour deviner automatiquement le lexer à utiliser, ce qui est utile pour les fichiers lus à partir de STDIN sans vérifier aucun type d'extension.

En utilisant cela, vous n'avez qu'à définir les 2 exportations suivantes dans votre fichier .bashrc sans aucun scripts supplémentaire :

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

11voto

Michael Medin Points 605

Vous n'avez pas dit ce que cette couleur doit signifier, par exemple, quelles doivent être les couleurs pour un fichier texte ?

Si ce que vous voulez, c'est une coloration syntaxique du code source, il vous faut un surligneur de code source. J'utilise parfois pygmatiser comme ceci

pygmentize file.cpp | less

oder

pygmentize file.cpp | more

Il existe d'autres surligneurs.

C'est assez rapide. Si ça ne vous dérange pas d'allumer vim il existe un mode de lecture seule qui peut vous donner la coloration syntaxique si vous l'avez en vim .

view file.cpp

ou alternativement voir la réponse de churnd.

9voto

Apollo4235 Points 11

C'est encore une autre pygmes -avec plusieurs améliorations majeures :

  • ne se brise pas lesspipe o lessfile filtres
  • travaille avec des entrées multiples pour less
  • analyse correctement le type script de l'en-tête shebang
  • fonctionne pour tous les 434 types de fichiers lisibles par Pygments
  • La palette de couleurs est paramétrée comme une variable d'environnement

EDIT : Je maintiens une version mise à jour/améliorée de ce script ici : https://github.com/CoeJoder/lessfilter-pygmentize

Version originale ci-dessous :

Installer Pygments et Gawk

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

Définir les variables d'environnement

Vérifiez si lesspipe o lessfile est déjà activé :

echo $LESSOPEN

Si vous ne voyez aucun des deux programmes référencés ici, assurez-vous que lesspipe est installé (la plupart des distros sont livrées avec).

Ajoutez ce qui suit à ~/.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 lesspipe remplacez le eval déclaration avec :

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

Créer ~/.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

5voto

arsaKasra Points 223

Utilisez le GNU Source-highlight ; vous pouvez l'installer avec apt si vous l'avez, ou sinon installez-le depuis les sources. Ensuite, configurez un "préprocesseur d'entrée" pour less, en vous aidant des documentations de Source-highligh' pour s'installer avec moins :

Cette idée a été suggérée par Konstantine Serebriany. Le script src-hilite-lesspipe.sh sera installé en même temps que source-highlight. Vous pouvez utiliser les variables d'environnement suivantes :

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

Ainsi, lorsque vous utilisez less 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 il sera installé avec les autres binaires.

5voto

xuhdev Points 1601

Condensé de l'article complet de mon blog sur l'amélioration de l'expérience des mineurs : 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 fichier .bashrc o .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 de la syntaxe, l'utilisation d'une puissante lesspipe.sh pour le gérer au lieu d'écrire le vôtre : https://github.com/wofr06/lesspipe

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X