Lors de la lecture d'un fichier avec `less` ou` more`, comment puis-je obtenir le contenu en couleurs?

415

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

Ouvrir le chemin
la source
5
Cela semble lié: superuser.com/questions/36022/less-and-grep-color - est-ce que cela vous aide?
Jonik
7
Le titre de cette question est très trompeur. Beaucoup de gens débarquant sur cette page attendent une solution à la question de la coloration que vous obtenez lorsque la tuyauterie d' une commande avec une sortie colorée pour less: les couleurs sont perdues. (Les réponses à cette «question de tuyauterie» impliquent less -R, unbufferetc.) Mais la question même concerne l' ouverture d'un fichier ! - L'ambiguïté réside principalement dans le titre de la question, mais même à part cela, à mon humble avis, la question est encore trop large: «lire un fichier» pourrait faire référence à n'importe quel fichier (probablement du texte brut). (eh bien, "obtenez le contenu en couleurs" fait probablement référence à la coloration syntaxique.)
myrdd
Je dois me corriger, il ne manque que 3 (ou 4) réponses sur 14 à la question du PO: les réponses de ChristopheD , Puneet et Onlyjob ; et peut-être jbbr . Pourtant, deux de ces réponses font partie des trois réponses les plus votées.
Myrdd
@myrdd "la coloration syntaxique" est le terme pertinent alors ... (il demande d'afficher des couleurs, de ne pas en ajouter?) less -Rfonctionne également sur les fichiers, par exemplels --color=always > /tmp/file && less -R /tmp/file
Gert van den Berg du
1
@myrdd Il serait peut-être logique de clore la question car "ce qui est demandé est difficile à déterminer", car les questions posées à l'une ou l'autre seront probablement marquées comme des doublons de cette ... (et les réponses de l'une ou l'autre peuvent être rejetées en fonction de la façon dont l'électeur l'interprète ...) (Mon cas d'utilisation était un fichier journal qui contient (de manière agaçante) des codes d'échappement de couleur)
Gert van den Berg

Réponses:

149

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

Installez-le pygmentsavec votre gestionnaire de paquets ou votre pip (éventuellement appelé python-pygments) ou téléchargez-le 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 .bashrcajouter

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

En outre, vous devez rendre ~/.lessfilterexécutable en exécutant

chmod u+x ~/.lessfilter

Testé sur Debian.

Vous avez eu l'idée. Cela peut bien entendu être encore amélioré, en acceptant plus d'extensions 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 ancien billet de blog des fabricants de Pygments , mais le message original n'existe plus.

Dario Seidl
la source
6
Si vous souhaitez que les fichiers de code source soient coloriés, vous devez également rendre ~ / .lessfilter exécutable en exécutant chmod u+x ~/.lessfilter. Vous devez également avoir installé pygmentize ( pygments.org/download ).
Sergiy Belozorov
Quelqu'un peut-il confirmer que cela fonctionne car il n'a aucun effet pour moi lorsque j'exécute une commande commels -l | less
puk
7
@puk vous pouvez faire quelque chose comme ls --color=always -l | less -R. De toute évidence, il y a beaucoup de choses à taper mais vous pouvez le nommer à quelque chose comme ll. Si vous ne voulez pas utiliser de bibliothèques supplémentaires.
PhilT
2
ajout du commentaire de SergiyByelozyorov dans la réponse.
Andrybak
2
Ma modification a été rejetée. J'imagine donc que je la posterai sous forme de commentaire: Ne testez pas les codes de sortie des commandes indirectement. Vous pouvez utiliser if grep -q "#\!/bin/bash" "$1"(la -qsortie standard est supprimée). Vous voudrez peut-être rediriger l'erreur standard avec 2>/dev/null.
Tom Fenech
503

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 générées sous forme "brute". (...)

ChristopheD
la source
17
Ceci est utile lorsque le fichier lui-même contient les codes d'échappement à afficher.
Nitrodist
1
J'avais l'habitude de connaître less -r mais la recherche dans le fichier à l'aide de "/" n'arrêtait pas de faire apparaître les mauvaises lignes. -R semble faire un meilleur travail. Merci pour le conseil.
Amos Shapira
54
Il convient de noter que la plupart des programmes utilisent l'appel isatty(2)système pour vérifier si leur sortie standard est un terminal et désactivent généralement la sortie colorisée si ce n'est pas le cas. Pour tout tuyau de moins, isattyretournera 0. Pour vérifier si cela fonctionne, essayezecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e 24/09
11
Cette réponse n’excelle pas dans le test fait quelque chose.
Michael Wolf
18
Vous pouvez également taper -Rquand vous l'avez déjà ouvert lesspour y parvenir.
Scz
138

J'ai eu la réponse dans un autre post: Less et Grep: Obtenir des résultats colorés lors de l'utilisation d'un tuyau de grep à less

Lorsque vous l'exécutez simplement, grep --colorcela implique de grep --color=autosavoir si la sortie est un terminal et, le cas échéant, d'activer les couleurs. Cependant, lorsqu'il détecte un tuyau, il désactive la coloration. La commande suivante:

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

Permettra toujours d'activer la coloration et d'ignorer la détection automatique, et la coloration en surbrillance sera réduite.

Attention: ne mettez pas --color=alwayscomme alias, ça casse parfois. C'est pourquoi il y a une --color=autooption.

Puneet
la source
6
Nice, merci Sauf que je dois utiliser -Rcomme une option à less, aussi bien.
naught101
10
Je crois que grep -Rc'est pour spécifier la recherche récursive. less -Rest nécessaire pour que lessles couleurs soient correctement recrachées. grep --color=always [grep cmds] | less -Rfonctionne pour moi sur OS X 10.7.3!
Steven Lu
@ naught101 @ Steven Lu Edited in, bien qu'il semble que certaines personnes n'aient pas besoin de l'utiliser less -R(selon l'auteur du message original, en tout cas).
jtpereyda
2
Est-il possible de laisser grep savoir qu'il suffit de diriger la commande less -R et de colorier? Nous n’avons donc pas besoin de mettre - color = toujours et moins -R tout le temps.
A-letubby
1
C'est de loin la réponse la plus simple. Merci!
Danny Staple
37

Utilisez viewau lieu de less. Il ouvre le fichier vimen mode lecture seule.

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

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

Riccardo Galli
la source
Qu'en est-il des performances des gros fichiers? La mise en évidence de la syntaxe Vim est connue pour être lente sur les gros fichiers.
pihentagy
Je ne sais pas quelle est votre valeur pour "grand", mais ouvrir un fichier de 10000 lignes est instantané, la recherche à l'intérieur est incluse.
Riccardo Galli
1
J'ai voté (je ne le savais pas view) mais un autre inconvénient est que j / k / haut / bas ne défile pas instantanément, car il y a un curseur.
Tyler Collier
7
Notez que vous devrez peut-être ajouter view -lors de la tuyauterie
user45909
6
vimest un éditeur qui charge le fichier complet en mémoire, alors lessqu’un pageur ne charge que partiellement le fichier en mémoire. Vous saurez la différence avec d'énormes fichiers.
jeudi
16

Pour en dire moins pour afficher les couleurs, appelez-le avec -R:

less -R

Malheureusement, certains programmes détectent que leur sortie standard n’est pas un terminal et désactivent les couleurs - par exemple, pacman (gestionnaire de paquets 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

La unbuffercommande 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 manière complète:

Comme d’autres ont déjà répondu, pygmentizec’est excellent pour coloriser le code source. Cela ne nécessite pas unbuffer. Appel le plus facile:

pygmentize someSource.cpp | less -R
jbbr
la source
2
Pour utiliser unbuffersur Ubuntu,sudo apt install expect
wisbucky
Cette réponse nécessite plus de votes positifs.
Thomas Dignan
J'essayais de canaliser la sortie de dmesg pour vérifier les erreurs d'amorçage, mais les couleurs ne fonctionnaient pas si je n'utilisais pas tampon, ce qui déroutait complètement: unbuffer dmesg | less -Rfonctionne comme prévu.
pbhj
15

pygmentizesupporte l' -goption de deviner automatiquement le lexer à utiliser, ce qui est utile pour les fichiers lus STDINsans vérifier le type d'extension.

Avec cela, il vous suffit de définir les 2 exportations suivantes dans votre .bashrcsans scripts supplémentaires:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Tuxdude
la source
4
Concis et efficace Je préfère définir un alias, car parfois, moins c'est mieux. Donc: alias lesc = 'LESS = "- R" LESSOPEN = "| pygmentize -g% s" less "
Tiago le
9

Vous n'avez pas précisé le sens de cette couleur, par exemple, quelles devraient être les couleurs d'un fichier texte?

Si ce que vous voulez, c'est la coloration syntaxique 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 autour.

C'est assez rapide. Si cela ne vous dérange pas de vous lancer, vimil existe un mode en lecture seule qui peut vous donner la coloration syntaxique si vous l'avez vim.

view file.cpp

ou bien voir la réponse de churnd.

Benjamin Bannier
la source
5

C'est encore une autre réponse basée sur les pygments , avec plusieurs améliorations majeures:

  • ne se casse pas lesspipeou ne lessfilefiltre pas
  • fonctionne avec plusieurs entrées pour less
  • analyse correctement le type de script à partir de l'en-tête shebang
  • fonctionne pour tous les types de fichiers 434 lexable de Pygments
  • l'arrangement de couleur est paramétré comme variable d'environnement

Installez Pygments et Gawk

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

Définir les variables d'environnement

Vérifiez si lesspipeou lessfileest déjà activé:

echo $LESSOPEN

Si vous ne voyez aucun des programmes référencés ici, assurez-vous qu’il lesspipeest installé (la plupart des distributions viennent avec).

Ajouter ce qui suit à ~/.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 lesspipe, remplacez la evaldéclaration par:

export LESSOPEN='|~/.lessfilter %s'

Créer ~/.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
Joe Coder
la source
Le seul inconvénient de cette approche est que Pygments est un programme Python, et ainsi de suite lors de la première utilisation lors d’une session shell, il existe un délai de «démarrage à froid». Les invocations suivantes sont beaucoup plus rapides.
Joe Coder
Agréable! Vraiment complet.
Dario Seidl
4

Utilisez la source GNU en surbrillance ; vous pouvez l'installer avec aptsi vous en avez un ou l'installer de la source. Ensuite, configurez un "préprocesseur d'entrée" pour moins, avec l'aide des documentations Source-highligh 'pour configurer avec moins :

Cela a été suggéré par Konstantine Serebriany. Le script src-hilite-lesspipe.sh sera installé avec 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 la source en surbrillance, il est automatiquement mis en surbrillance.

Xavier-Emmanuel Vincent a récemment fourni une version alternative du jeu de couleurs ANSI, esc256.style: certains terminaux peuvent gérer 256 couleurs. Xavier a également fourni un script qui vérifie le nombre de couleurs que votre terminal peut gérer et utilise le cas échéant la variante 256. Le script s'appelle source-highlight-esc.sh et sera installé avec les autres fichiers binaires.

ArsaKasra
la source
3

Pour développer une autre réponse, vous pouvez faire en sorte que cela fonctionne pour la plupart, sinon tous, de vos scripts sans extension en modifiant légèrement 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 devez toujours ajouter les deux variables à .bashrc:

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

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

$ chmod 700 ~/.lessfilter

Aussi, je voulais ajouter que, sous debian, le paquet pygments s'appelle python-pygments. J'ai eu du mal à le localiser au début parce que l'orthographe évidente de "pigments" en tant que "pygments" ne me laissait pas croire qu'il s'agissait d'un paquet pouvant être préfixé par "python" par le gestionnaire de paquets.

Speeddymon
la source
2
2 commentaires: 1) Merci pour l'amélioration. 2) Des phrases comme "voté meilleure réponse" ne sont pas géniales; cela pourrait changer (en fait, si cela vaut mieux que cette réponse, cet article pourrait devenir la meilleure réponse. À ce moment-là, il sera simplement déroutant. Peut-être simplement dire "pour développer une autre réponse" ou "la réponse de capitanecom"?
cpast
2

Vous pouvez envisager d'utiliser un mostutilitaire qui constitue une alternative aux couleurs respectives pour lesset more.

Onlyjob
la source
pouvez-vous nous montrer un exemple? J'ai essayé ici et la sortie était en noir et blanc.
danilo
Votre entrée doit contenir des couleurs. Produire d' abord un échantillon Colorised (par exemple ccze -A </var/log/dpkg.log, ls -1 --color /var/log) puis conduit à most: ls -1 --color /var/log | most.
Onlyjob
oui, je: git status | less --color,git status | most --color
danilo
J'ai utilisé le plus, le plus, le moins et tous les outils sont noir et blanc
danilo
Assurez-vous que votre commande produit des couleurs avant de créer un lien vers lessou vers d’ autres. Assurez-vous que votre émulateur de terminal peut imprimer des couleurs. Vérifiez TERMla variable d'environnement. Lisez-en plus sur unix.stackexchange.com/questions/148/… Si possible, utilisez une distribution GNU + Linux moderne comme Debian . Utilisez le moteur de recherche (par exemple, duckduckgo.com startpage.com ) pour trouver des réponses. Rappelez-vous que les commentaires ne sont pas pour la discussion.
Onlyjob
2

Condensé de mon billet de blog complet sur l'amélioration de l'expérience: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

Pour les pages de manuel colorées, ajoutez ce qui suit à votre .bashrcou .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 coloration syntaxique, utilisez un puissant existant lesspipe.shpour le gérer au lieu d’écrire le vôtre: https://github.com/wofr06/lesspipe

Xuhdev
la source
1

J'ai trouvé cette solution simple et élégante. Vous n'avez pas à installer quoi que ce soit de plus car il est déjà présent par défaut sur la plupart des machines. Comme il vimest installé par défaut sur la plupart des machines, il inclut une macro à exécuter de la manière suivante vim:less

Certaines des options pour l'utiliser consistent à 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

Alors tu viens de courir vless myfile.py

J'ai eu la plupart des informations ici

Wavesailor
la source
1
J'ai alias lesser='/usr/share/vim/vim80/macros/less.sh'dans ~/bash_aliases(dans Ubuntu 18.04). Peut utiliser des raccourcis tels que f forward, b backward, d half down, u half up, q stop, etc ...
Daniel
0

La solution la plus intuitive et la plus simple pour moi consistait à pygmentize
ajouter les lignes ci-dessous à .bashrc

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

Si vous ne pouvez pas appeler pygmentize, installez simplement

pip install pygments

ps. Le pygmentizebinaire exécutable serait assis dans /usr/local/bin/ou dans votre /home/username/.virtualenv/venvname/bin/ou quelque part.

David Jung
la source
-2

Aucun de ceux-ci ne fonctionnait pour moi et j'ai trouvé un moyen facile de faire ce travail, alors j'ai pensé partager.

Il suffit d’utiliser tmux, qui vous permet d’accéder à un historique plus grand et de le faire défiler, tout en préservant parfaitement les couleurs.

math0ne
la source
1
Tmux n'autorise-t-il pas plusieurs terminaux à partir d'un seul écran, comment modifie-t-il l'affichage des couleurs de moins?
Xen2050
@ Xen2050 Je pense que c'est une solution de contournement bien que cette réponse n'explique pas comment entrer en mode de défilement (Ctrl-b + [)
siikamiika
-2

Tant que le texte de sortie a des caractères de contrôle de couleur, less -Rfera l'affaire.

Leonardo Raele
la source
C'est ce qu'une autre réponse (d'il y a 9 ans) dit. Les réponses qui dupliquent d'autres réponses ne sont pas utiles.
Kamil Maciorowski
Correct, mais cette réponse ne dit pas clairement que cela ne fonctionne que sur les fichiers construits avec des caractères de contrôle des couleurs.
Leonardo Raele