2010-03-09 10:44:32 +0000 2010-03-09 10:44:32 +0000
428
428

Quando leggo un file con il comando &007 o &007, come posso ottenere il contenuto a colori?

Quando leggo un file in Linux con il comando less o more, come posso ottenere il contenuto a colori?

Risposte (17)

520
520
520
2010-03-09 10:48:33 +0000

Provare quanto segue:

less -R

da man less:

-r o --raw-control-chars

Cause dei caratteri di controllo “grezzi” da visualizzare. (…)

-R o --RAW-CONTROL-CHARS

Come -r, ma solo le sequenze di escape “a colori” ANSI vengono emesse in forma “grezza”. (…)

156
156
156
2011-09-20 03:29:09 +0000

(aggiornamento al 2020)

Il modo più veloce sarebbe quello di utilizzare less -R rif. https://superuser.com/a/117842/34893 (http://pygments.org/download/)


È possibile utilizzare la potenza del pigmenziamento con meno - automaticamente! (Non c'è bisogno di tubare a mano.)

Installare pygments con il vostro gestore di pacchetti o pip (possibilmente chiamato python-pygments) o procurarselo qui http://pygments.org/download/ .

Scrivi un file ~/.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
``` ```
export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'

Nel tuo .bashrc aggiungi

chmod u+x ~/.lessfilter

Inoltre, devi rendere ~/.lessfilter eseguibile eseguendo

&001

Tested su Debian.

Hai capito l'idea. Naturalmente questo può essere ulteriormente migliorato, accettando più estensioni o analizzando lo shebang per altri interpreti rispetto a bash. Vedi alcune delle altre risposte per questo.

L'idea è venuta da un vecchio post del blog dei [ makers of Pygments ]&003, ma il post originale non esiste più.

141
141
141
2011-04-27 04:19:53 +0000

Ho ricevuto la risposta in un altro post: Meno e Grep: Ottenere risultati colorati quando si usa un tubo da grep a meno

Quando si esegue semplicemente grep --color implica grep --color=auto che rileva se l'uscita è un terminale e in tal caso abilita i colori. Tuttavia, quando rileva un tubo, disabilita la colorazione. Il seguente comando:

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

abiliterà sempre la colorazione e sovrascriverà la rilevazione automatica, e si otterrà l'evidenziazione del colore in meno.

Warning: Non mettere --color=always come alias, a volte rompe le cose. Ecco perché c'è un'opzione --color=auto.

36
36
36
2013-09-24 09:50:04 +0000

Utilizzare view al posto di less. Apre il file con vim in sola lettura.

È praticamente un less colorato: un cercapersone dove si può cercare con / (e altro ancora). L'unico inconveniente è che non si può uscire con q ma si ha bisogno di :q

Inoltre, si ottiene la stessa colorazione di vim (dato che in realtà si sta usando vim).

18
18
18
2016-10-08 10:37:29 +0000

Per dire meno per mostrare i colori chiamatelo con -R:

less -R

Purtroppo alcuni programmi rilevano che il loro stdout non è un terminale e disabilitano i colori - ad esempio pacman (gestore di pacchetti Arch Linux).

In questi casi è possibile utilizzare unbuffer:

unbuffer <command> | less -R

Esempio di utilizzo di pacman

unbuffer pacman -Ss firefox | less -R
``` ```
pygmentize someSource.cpp | less -R

Il comando unbuffer è di solito parte del pacchetto expect (Arch Linux, Debian/Ubuntu) o expect-dev (versioni legacy di Debian/Ubuntu).

Per rispondere alla domanda per completezza:

Come altri hanno già risposto, pygmentize è ottimo per colorare il codice sorgente. Non richiede unbuffer. Chiamata più facile:

&001

15
15
15
2013-03-12 07:17:20 +0000

pygmentize supporta l'opzione -g per indovinare automaticamente il lexer da utilizzare, utile per i file letti da STDIN senza controllare alcun tipo di estensione.

Usando questo, è sufficiente impostare le seguenti 2 esportazioni nel vostro .bashrc senza ulteriori script:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
10
10
10
2010-03-09 13:30:02 +0000

Non avete detto cosa dovrebbe significare questo colore, ad esempio quali dovrebbero essere i colori per un file di testo?

Se ciò che si desidera è l'evidenziazione della sintassi per il codice sorgente, è necessario un evidenziatore del codice sorgente. A volte uso pygmentize come questo

pygmentize file.cpp | less

o

pygmentize file.cpp | more

Ci sono altri evidenziatori in giro.

Questo è abbastanza veloce. Se non vi dispiace accendere vim c'è una modalità di sola lettura che può darvi l'evidenziazione della sintassi se l'avete in vim.

view file.cpp
``` &001 


o in alternativa vedere la risposta di churnd.
6
6
6
2017-05-29 09:21:34 +0000

Questa è l'ennesima risposta basata su pygments , con diversi importanti miglioramenti:

  • non rompe i filtri lesspipe o lessfile
  • funziona con ingressi multipli a less
  • analizza correttamente il tipo di script dall'intestazione shebang
  • funziona per tutti i 434 tipi di file lexabili da Pygments
  • lo schema dei colori è parametrizzato come variabile d'ambiente

Installare Pygments e Gawk

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

Impostare le variabili d'ambiente

Controllare se lesspipe o lessfile è già abilitato:

echo $LESSOPEN
``` ```
# 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'

Se non vedete nessuno dei due programmi a cui si fa riferimento, assicuratevi che lesspipe sia installato (la maggior parte delle distro sono in dotazione).

Aggiungere quanto segue a ~/.bashrc:

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

Se non si desidera lesspipe, sostituire la dichiarazione eval con:

#!/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

Creare ~/.lessfilter

Aggiungere il seguente codice e rendere il file eseguibile: chmod u+x ~/.lessfilter

&001

4
4
4
2014-05-25 19:52:43 +0000

Usare il GNU Source-highlight ; si può installare con apt se ce l'avete, o altrimenti installarlo dal sorgente. Poi impostare un “preprocessore di input” per meno, con l'aiuto della documentazione Source-highlight’ per impostare con meno :

Questo è stato suggerito da Konstantine Serebriany. Lo script src-hilite-lesspipe.sh sarà installato insieme a source-highlight. Si possono usare le seguenti variabili di ambiente:

export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
 export LESS=' -R '
``` &001 


> In questo modo, quando si usa meno per sfogliare un file, se è un file sorgente gestito da source-highlight, verrà automaticamente evidenziato. 
> 
> Xavier-Emmanuel Vincent ha recentemente fornito una versione alternativa dello schema di colori ANSI, esc256.style: alcuni terminali possono gestire 256 colori. Xavier ha anche fornito uno script che controlla quanti colori il vostro terminale può gestire e, nel caso, utilizza la variante 256. Lo script è chiamato source-highlight-esc.sh e verrà installato insieme agli altri binari.
3
3
3
2016-10-04 02:51:08 +0000

Condensato dal mio post completo sul blog sul miglioramento dell'esperienza: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/ (https://github.com/wofr06/lesspipe)_

Per le pagine colorate, aggiungete quanto segue al vostro .bashrc o .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
``` &001 


Per evidenziare la sintassi, usando un potente `lesspipe.sh` esistente per gestirla invece di scriverne una vostra: [ https://github.com/wofr06/lesspipe ]&003
3
3
3
2013-02-27 22:45:25 +0000

Per espandere un'altra risposta, si può farla funzionare per la maggior parte se non per tutti i vostri script che non hanno estensioni, cambiando il file .lessfilter solo un pochino:

#!/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

Si dovrebbero comunque aggiungere le due variabili a . bashrc:

export LESS='-R'
export LESSOPEN='|~/.lessfilter %s'
``` ```
$ chmod 700 ~/.lessfilter

E si dovrà ancora rendere eseguibile .lessfilter:

&001 &001

Inoltre volevo aggiungere che sotto debian il pacchetto pygments è chiamato python-pygments. All'inizio ho avuto difficoltà a localizzarlo perché l'ovvio errore di ortografia di “pigmenti” come “pygments” non mi bastava per capire che si trattava di un pacchetto che poteva essere prefisso con “python-” dal gestore dei pacchetti.

2
2
2
2013-08-22 00:34:58 +0000

Potete considerare l'utilizzo dell'utilità most che è un'alternativa colorata per less e more.

1
1
1
2018-05-31 09:59:32 +0000

Ho trovato questa semplice ed elegante soluzione. Non è necessario installare nulla in più perché è già presente di default sulla maggior parte delle macchine. Poiché vim è installato di default sulla maggior parte delle macchine, include una macro per eseguire vim come less

Alcune delle opzioni per usarlo sono di creare un alias:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

o creare un link simbolico:ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Poi basta eseguire vless myfile.py

Ho ottenuto la maggior parte delle informazioni qui

0
0
0
2019-01-22 02:44:37 +0000

La soluzione più intuitiva e diretta per me è stata quella di utilizzare pygmentize aggiungendo le linee sottostanti a .bashrc

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

Nel caso in cui non si potesse chiamare pygmentize, bastava installare come

pip install pygments

ps. Il binario eseguibile pygmentize si troverebbe in /usr/local/bin/ o nel vostro /home/username/.virtualenv/venvname/bin/ o da qualche parte.

0
0
0
2020-02-02 15:27:44 +0000

Un'alternativa al meno/più che funziona con i colori fuori dagli schemi è la mazza. Si può installare con la maggior parte dei gestori di pacchetti che lo usano come cercapersone e come sostituto del gatto. https://github.com/sharkdp/bat

-2
-2
-2
2019-07-15 12:50:13 +0000

Finché il testo in uscita avrà caratteri di controllo del colore, less -R andrà bene.

-2
-2
-2
2018-01-25 18:35:55 +0000

Nessuno di questi funzionava fuori dagli schemi per me e ho trovato un modo semplice per farlo funzionare, così ho pensato di condividere.

Basta usare tmux, che permette di accedere e scorrere una storia più ampia e conserva perfettamente i colori.