2010-03-09 10:44:32 +0000 2010-03-09 10:44:32 +0000
428
428

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 ?

Réponses (17)

520
520
520
2010-03-09 10:48:33 +0000

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”. (…)

156
156
156
2011-09-20 03:29:09 +0000

(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.

141
141
141
2011-04-27 04:19:53 +0000

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 implique grep --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.

36
36
36
2013-09-24 09:50:04 +0000

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).

18
18
18
2016-10-08 10:37:29 +0000

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
15
15
15
2013-03-12 07:17:20 +0000

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'
10
10
10
2010-03-09 13:30:02 +0000

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.

6
6
6
2017-05-29 09:21:34 +0000

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

Installer Pygments et Gawk

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

Définir les variables d'environnement

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'

Create ~/.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
4
4
4
2014-05-25 19:52:43 +0000

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.

3
3
3
2016-10-04 02:51:08 +0000

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

3
3
3
2013-02-27 22:45:25 +0000

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.

2
2
2
2013-08-22 00:34:58 +0000

Vous pouvez envisager d'utiliser l'utilitaire most qui est une alternative colorée pour less et more.

1
1
1
2018-05-31 09:59:32 +0000

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

0
0
0
2019-01-22 02:44:37 +0000

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.

0
0
0
2020-02-02 15:27:44 +0000

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

-2
-2
-2
2019-07-15 12:50:13 +0000

Tant que le texte de sortie comporte des caractères de contrôle des couleurs, less -R fera l'affaire.

-2
-2
-2
2018-01-25 18:35:55 +0000

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.