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.

552voto

ChristopheD Points 5934

Essayez ce qui suit :

less -R

de man less :

-r o --raw-control-chars

Permet d'afficher les caractères de contrôle "bruts". (...)

-R o --RAW-CONTROL-CHARS

Comme -r mais seules les séquences d'échappement ANSI "couleur" sont produites sous forme "brute". (...)

216voto

Dario Seidl Points 3119

Si vous voulez juste dire less pour interpréter les codes de couleur, utilisez less -R . réf.


Vous pouvez utiliser la puissance de pygmentize avec moins - automatiquement ! (Pas besoin de pipeter à la main).

Installer pygments avec votre gestionnaire de paquets ou pip (éventuellement appelé python-pygments ) ou l'obtenir ici http://pygments.org/download/ .

Écrire un 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";;

    *)
        if grep -q "#\!/bin/bash" "$1" 2> /dev/null; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

Dans votre .bashrc (ou .zshrc ou équivalent) ajouter

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

Aussi, vous devez faire ~/.lessfilter exécutable en exécutant

chmod u+x ~/.lessfilter

Edit : Si vous avez lesspipe sur votre système, vous pouvez l'utiliser pour décompresser automatiquement les archives lorsque vous les regardez avec less, par ex. less log.gz . lesspipe prend également en charge un .lessfilter donc tout ce qui est dit ci-dessus fonctionne de la même façon, il suffit d'exécuter

eval "$(lesspipe)" 

dans votre fichier rc au lieu de définir l'option LESSOPEN variable. Exécuter echo "$(lesspipe)" pour voir ce qu'il fait. Votre .lessfilter fonctionnera toujours. Voir man lesspipe .


Testé sur Debian.

Vous voyez le genre. Cela peut bien sûr être amélioré, en acceptant plus d'extensions, des fichiers multiples, ou en analysant le shebang pour d'autres interprètes que bash. Voir certaines des autres réponses pour cela.

L'idée est venue d'un vieil article de blog de la les fabricants de Pygments mais le message original n'existe plus.


Btw. vous pouvez également utiliser cette technique pour afficher les listes de l'annuaire con less .

158voto

Puneet Points 1561

J'ai eu la réponse dans un autre post : Less et Grep : Obtention de résultats colorés lors de l'utilisation d'un pipe de grep vers less

Lorsque vous exécutez simplement grep --color il implique grep --color=auto qui détecte si la sortie est un et si c'est le cas, il active les couleurs. Cependant, lorsqu'il détecte un pipe, il désactive la coloration. La commande suivante commande suivante :

grep --color=always "search string" * | less -R

permettra toujours de colorier et remplacer la détection automatique, et vous obtiendrez la mise en évidence de la couleur en moins.

Avertissement : Ne mettez pas --color=always comme un alias, cela casse parfois les choses. C'est pourquoi il existe un --color=auto option.

43voto

Riccardo Galli Points 543

Utilisez view au lieu de less . Il ouvre le fichier avec vim en mode lecture seule.

C'est pratiquement une couleur less : un pager où vous pouvez rechercher avec / (et plus encore). Le seul inconvénient est que vous ne pouvez pas quitter avec q mais vous avez besoin :q

De plus, vous obtenez la même coloration que vim (puisque vous utilisez en fait vim ).

26voto

Alex Points 1

Pour dire moins pour montrer des couleurs, appelez-le avec -R :

less -R

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 :

unbuffer <command> | less -R

Exemple d'utilisation de pacman

unbuffer pacman -Ss firefox | less -R

El unbuffer fait généralement partie du paquetage expect (Arch Linux, Debian/Ubuntu) ou expect-dev (anciennes versions de Debian/Ubuntu).

Pour répondre à la question par souci d'exhaustivité :

Comme d'autres ont déjà répondu, pygmentize est idéal pour colorer le code source. Il ne nécessite pas unbuffer . L'appel le plus facile :

pygmentize someSource.cpp | less -R

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