Quand je lis un fichier sous Linux avec la commande less
o more
comment puis-je obtenir le contenu en couleurs ?
Réponses
Trop de publicités?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
.
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 impliquegrep --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.
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
).
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
- Réponses précédentes
- Plus de réponses
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" impliquentless -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.
0 votes
@myrdd "syntax highlighting" est le terme pertinent alors... (Il s'agit d'afficher des couleurs, pas d'en ajouter ?)
less -R
fonctionnera également sur les fichiers, par ex.ls --color=always > /tmp/file && less -R /tmp/file
0 votes
@GertvandenBerg Je pense que le PO voulait dire " comment obtenir la coloration syntaxique dans
less
omore
lorsque le fichier ouvert ne contient PAS de codes d'échappement ". Mais je ne piense en il voulait dire ça, je ne le sais pas. - Au fait, je ne suis pas d'accord avec votre interprétation de la question. La question dit " Lorsque je lis un fichier [ ] "et par "fichier", je suis sûr que le PO voulait dire une typique un fichier en clair, ou un fichier "normal". Un fichier en clair "typique" (ou un fichier "normal") contient-il des caractères d'échappement, c'est-à-dire des couleurs ? Non. Donc, selon moi, la question est sur l'"ajout" de couleurs (ou de coloration syntaxique).2 votes
@myrdd Il serait peut-être plus logique que la question soit fermée en tant que "ce qui est demandé n'est pas clair" puisque les questions posant l'une ou l'autre de ces deux questions seraient probablement marquées comme des doublons de celle-ci... (Et les réponses à l'une ou l'autre de ces deux questions peuvent être rétrogradées en fonction de la façon dont le votant les interprète...) (Mon cas d'utilisation était un fichier journal qui (fâcheusement) contient des codes d'échappement de couleur).
0 votes
@GertvandenBerg Je suis d'accord. J'ai déjà voté pour la fermeture de la question.
0 votes
Il semble qu'il s'agisse d'un doublon de superuser.com/q/71588/105108 .