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.

4voto

Speeddymon Points 211

Pour développer une autre réponse, vous pouvez faire en sorte que cela fonctionne pour la plupart, si ce n'est tous vos scripts qui n'ont pas d'extensions en modifiant un peu le fichier .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"
        ;;
    *)
        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 quand même ajouter les deux variables au fichier .bashrc :

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

Et vous aurez toujours besoin de rendre .lessfilter exécutable :

$ chmod 700 ~/.lessfilter

Je voulais aussi ajouter que sous debian le paquet pygments s'appelle Python-pygments. J'ai eu du mal à le localiser au début parce que la mauvaise orthographe évidente de "pigments" en "pygments" n'était pas un indice suffisant pour me faire comprendre qu'il s'agissait d'un paquet qui pourrait être préfixé par "Python-" par le gestionnaire de paquets.

3voto

Waylon Walker Points 121

Une alternative à less/more qui fonctionne avec les couleurs est bat. Vous pouvez l'installer avec la plupart des gestionnaires de paquets et l'utiliser comme un pager ainsi que pour remplacer cat.

https://github.com/sharkdp/bat

2voto

Alex Gulin Points 21

Vous pouvez envisager d'utiliser most qui est une alternative conviviale en matière de couleurs pour less y more .

2voto

Wavesailor Points 228

J'ai trouvé cette solution simple et élégante. Vous n'avez pas besoin d'installer quoi que ce soit d'autre car elle est déjà présente par défaut sur la plupart des machines. Comme vim est installé par défaut sur la plupart des machines, il inclut 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 créer un lien symbolique : ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Ensuite, il suffit de lancer vless myfile.py

J'ai obtenu la plupart des informations aquí

1voto

David Jung Points 111

La solution la plus intuitive et la plus directe pour moi était d'utiliser pygmentize
en ajoutant les lignes ci-dessous au fichier .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 site pygmentize Le binaire exécutable se trouverait dans /usr/local/bin/ ou dans votre /home/username/.virtualenv/venvname/bin/ ou quelque part.

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