Question Obtenez des couleurs en moins ou plus


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


342
2018-03-09 10:44


origine


Cela semble lié: superuser.com/questions/36022/less-and-grep-color - Aide-t-il? - Jonik


Réponses:


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

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

Ecrire 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"
        ;;
    *)
        grep "#\!/bin/bash" "$1" > /dev/null
        if [ "$?" -eq "0" ]; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

Dans ton .bashrc ajouter

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

En outre, vous devez faire ~/.lessfilter exécutable en cours d'exécution

chmod u+x ~/.lessfilter

Testé sur Debian.

L'idée est venue d'un vieux post de blog de la fabricants de Pygments, mais le message original n'existe plus.


124
2017-09-20 03:29



Si vous voulez avoir la coloration des fichiers de code source, vous devez également rendre exécutable ~ / .lessfilter en exécutant chmod u+x ~/.lessfilter. Vous devez également avoir pygmentize (pygments.org/download) installée. - Sergiy Byelozyorov
Quelqu'un peut-il confirmer que cela fonctionne car il n'a aucun effet pour moi lorsque j'exécute une commande comme ls -l | less - puk
Une idée de comment enchaîner cela avec lessopen.sh de Vladimir Linek ?? il est configuré avec cette forme: LESSOPEN = "lessopen.sh% s" - Gregory
@puk vous pouvez faire quelque chose comme ls --color=always -l | less -R. De toute évidence, beaucoup de choses à taper mais vous pouvez l’utiliser comme quelque chose comme ll. C'est si vous ne voulez pas utiliser de bibliothèques supplémentaires. - PhilT
Le commentaire de @ SergiyByelozyorov a été ajouté à la réponse. - andrybak


Essayez ce qui suit:

less -R

de man less:

-r ou --raw-control-chars

Provoque l'affichage des caractères de contrôle "bruts". (...)

-R ou --RAW-CONTROL-CHARS

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


405
2018-03-09 10:48



Ceci est utile lorsque le fichier contient les codes d'échappement qui devront être affichés. - Nitrodist
J'avais l'habitude de connaître moins -r mais la recherche dans le fichier en utilisant "/" n'arrêtait pas de faire apparaître les mauvaises lignes. -R semble faire un meilleur travail. Merci pour le conseil. - Amos Shapira
Il convient de noter que la plupart des programmes utilisent le isatty(2) syscall pour vérifier si leur sortie standard est un terminal, et généralement désactiver la sortie colorisée si ce n'est pas le cas. Pour toute pipe à moins, isatty renverra 0. Pour vérifier si cela fonctionne, essayez echo -e '\x1b[32;1mtest\x1b[m' | less -r - mic_e
Cette réponse n'excelle pas dans le fait de faire quelque chose. - Michael Wolf
Vous pouvez aussi taper -R quand tu as déjà ouvert less pour y parvenir. - Scz


J'ai eu la réponse dans un autre post: Less and Grep: Obtenir des résultats colorés en utilisant un tube de grep à moins

Lorsque vous courez simplement grep --color il   implique grep --color=auto lequel   détecte si la sortie est un   terminal et si oui permet des couleurs.   Cependant, quand il détecte un tuyau il   désactive la coloration. Le suivant   commander:

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

Permettra toujours la coloration et   remplacer la détection automatique, et   vous obtiendrez la couleur mettant en évidence dans   Moins.

Attention: ne pas mettre --color=always en tant qu'alias, cela casse parfois les choses. C'est pourquoi il y a un --color=auto option.


114
2018-04-27 04:19



Gentille merci Sauf que je dois utiliser -R en option à less, ainsi que. - naught101
Je crois grep -R est pour spécifier la recherche récursive. less -R est nécessaire pour less pour cracher correctement les couleurs. grep --color=always [grep cmds] | less -R fonctionne pour moi sur OS X 10.7.3! - Steven Lu
@ naught101 @Steven Lu Édité en, bien qu'il semble que certaines personnes n'aient pas besoin d'utiliser less -R (selon l'auteur du message original, de toute façon). - jtpereyda
Y a-t-il de toute façon la possibilité que grep sache qu'il suffit de diriger moins la commande -R et de ne faire que colorer? Il n'est donc pas nécessaire de mettre --color = always et less -R tout le temps. - A-letubby
C'est de loin la réponse de travail la plus simple. Merci! - Danny Staple


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

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

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


30
2017-09-24 09:50



Qu'en est-il des performances des gros fichiers? La mise en évidence de la syntaxe Vim est lente sur les fichiers volumineux. - pihentagy
Je ne sais pas quelle est votre valeur pour 'big', mais l'ouverture d'un fichier de ~ 10000 lignes est instantanée, recherche à l'intérieur incluse. - Riccardo Galli
J'ai voté (je ne connaissais pas view) mais un autre inconvénient est que j / k / up / down ne défile pas instantanément, car il y a un curseur. - Tyler Collier
Notez que vous devrez peut-être ajouter view - lors de la tuyauterie - user45909
vim est un éditeur qui charge le fichier complet en mémoire, alors que less est un pager, ne chargeant que partiellement le fichier en mémoire. Vous saurez la différence avec des fichiers volumineux. - sjas


Utiliser VIM comme pagineur de syntaxe.


12
2018-03-09 13:25



non j'ai demandé plus (ou moins), pas pour vim merci quand même - flow
De toute évidence, la mise en évidence de la syntaxe n'est pas intégrée par défaut, la solution consiste donc à utiliser un alias pour l'une des macros de VIM. Il se comporte plus ou moins comme plus ou moins. :) - churnd
Si vous préférez utiliser vim au lieu de vim émuler moins, vous pouvez simplement faire ... | vim - lire de stdin, ou ... | vim -R - en lecture seule (pour éviter "Pas d'écriture depuis la dernière modification" en quittant). Alias ​​it pour une utilisation rapide: alias r='vim -R -' puis ... | r - bain


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

En utilisant cela, il vous suffit de définir les 2 exportations suivantes dans votre .bashrc sans scripts supplémentaires:

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

11
2018-03-12 07:17



Concis et efficace Je préfère définir un alias, car parfois moins vaut mieux. Donc: alias lesc = 'LESS = "- R" LESSOPEN = "| pygmentize -g% s" less " - Tiago


Vous n'avez pas dit ce que cette couleur devrait signifier, par ex. Quelles devraient être les couleurs pour un fichier texte?

Si vous souhaitez mettre en évidence la syntaxe du code source, vous avez besoin d’un surligneur de code source. J'utilise parfois pygmentize comme ça

pygmentize file.cpp | less

ou

pygmentize file.cpp | more

Il y a d'autres surligneurs.

C'est assez rapide. Si cela ne vous dérange pas de tirer vim il y a un mode en lecture seule qui peut vous donner une mise en évidence de la syntaxe si vous l'avez en vim.

view file.cpp

ou bien voir la réponse de baratte.


9
2018-03-09 13:30