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

Al leer un archivo con &007 o &007, ¿cómo puedo obtener el contenido en colores?

Al leer un archivo en Linux con el comando less o more, ¿cómo puedo obtener el contenido en colores?

Respuestas (17)

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

Intente lo siguiente:

less -R

de man less:

-r o --raw-control-chars

Hace que se muestren los caracteres de control “crudos”. (…)

-R o --RAW-CONTROL-CHARS

Como -r, pero sólo las secuencias de escape “color” ANSI son emitidas en forma “raw”. (…)

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

(actualización en 2020)

La manera más rápida sería usar less -R ref. https://superuser.com/a/117842/34893


Puedes utilizar el poder de pigmentación con menos - ¡automáticamente! (No hay necesidad de pipetear a mano.)

Instale pygments con su administrador de paquetes o pip (posiblemente llamado python-pygments) o consígalo aquí http://pygments.org/download/ .

Escriba un archivo ~/.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

En su .bashrc añada

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

Además, necesita hacer ejecutable el ~/.lessfilter ejecutando

chmod u+x ~/.lessfilter

Probado en Debian.

Ya tiene la idea. Por supuesto, esto puede mejorarse aún más, aceptando más extensiones o analizando el shebang para otros intérpretes que el bash. Vea algunas de las otras respuestas para eso.

La idea vino de una vieja entrada en el blog de los creadores de Pygments, pero la entrada original ya no existe.

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

Recibí la respuesta en otro correo: Less y Grep: Obtener resultados de color cuando se utiliza un tubo de grep a menos

Cuando simplemente se ejecuta grep --color implica grep --color=auto que detecta si la salida es una terminal y si es así permite los colores. Sin embargo, cuando detecta un tubo, desactiva los colores. El siguiente comando:

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

Siempre habilitará el coloreado y anulará la detección automática, y obtendrá el resaltado de color en menos.

Advertencia: No pongas --color=always como un alias, a veces rompe cosas. Por eso hay una opción de --color=auto.

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

Use view en lugar de less. Abre el archivo con vim en modo de sólo lectura.

Es prácticamente un less de color: un buscador donde puedes buscar con / (y más). El único inconveniente es que no puedes salir con q pero necesitas :q

Además, obtienes el mismo colorido que vim (ya que de hecho estás usando vim).

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

Para decir menos para mostrar los colores llámalo con -R:

less -R

Desafortunadamente algunos programas detectan que su stdout no es una terminal y desactivan los colores - por ejemplo pacman (Arch Linux package manager).

En esos casos es posible usar unbuffer:

unbuffer <command> | less -R

Ejemplo usando pacman

unbuffer pacman -Ss firefox | less -R

El comando unbuffer es usualmente parte del paquete expect (Arch Linux, Debian/Ubuntu) o expect-dev (versiones heredadas de Debian/Ubuntu).

Para responder a la pregunta para completar:

Como otros ya han respondido, pygmentize es genial para colorear el código fuente. No requiere unbuffer. La llamada más fácil:

pygmentize someSource.cpp | less -R
15
15
15
2013-03-12 07:17:20 +0000

pygmentize soporta la opción -g para adivinar automáticamente el lexer a utilizar, lo cual es útil para los archivos leídos desde STDIN sin comprobar ningún tipo de extensión.

Usando eso, sólo necesita configurar las siguientes 2 exportaciones en su .bashrc sin ningún tipo de scripts adicionales:

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

No dijiste lo que este color debería significar, por ejemplo, ¿cuáles deberían ser los colores para un archivo de texto?

Si lo que quieres es un resaltador de sintaxis para el código fuente, necesitas un resaltador de código fuente. A veces uso pygmentize como este

pygmentize file.cpp | less

o

pygmentize file.cpp | more

Hay otros resaltadores alrededor.

Esto es bastante rápido. Si no te importa encender el vim hay un modo de sólo lectura que puede darte un resaltado de sintaxis si lo tienes en vim.

view file.cpp

o alternativamente ver la respuesta de Churnd.

6
6
6
2017-05-29 09:21:34 +0000

Esta es otra respuesta basada en el Pygments (http://pygments.org/), con varias mejoras importantes:

  • no rompe los filtros lesspipe o lessfile
  • funciona con múltiples entradas a less
  • analiza correctamente el tipo de script de la cabecera del shebang
  • funciona para todos los 434 tipos de archivos lexables por Pygments
  • el esquema de color se parametriza como una variable de entorno

Instalar Pygments y Gawk

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

Establecer las variables de entorno

Comprobar si lesspipe o lessfile ya está activado:

echo $LESSOPEN

Si no ves ninguno de los programas referenciados allí, asegúrate de que lesspipe está instalado (la mayoría de las distros vienen con él).

Añade lo siguiente al ~/.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 no quieres lesspipe, sustituye la declaración de eval por:

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

Create ~/.lessfilter

Añade el siguiente código y haz el archivo ejecutable: 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
4
4
4
2014-05-25 19:52:43 +0000

Usa el GNU Source-highlight ; puedes instalarlo con apt si lo tienes, o de otra manera instalarlo desde la fuente. Entonces configura un “preprocesador de entrada” por menos, con la ayuda de las documentaciones de Source-highlight’ para configurar con menos:

Esto fue sugerido por Konstantine Serebriany. El script src-hilite-lesspipe.sh se instalará junto con Source-highlight. Puedes usar las siguientes variables de entorno:

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

De esta manera, cuando uses menos para navegar por un archivo, si es un archivo fuente manejado por source-highlight, será resaltado automáticamente.

Xavier-Emmanuel Vincent recientemente proporcionó una versión alternativa del esquema de colores ANSI, esc256.style: algunas terminales pueden manejar 256 colores. Xavier también proporcionó un script que comprueba cuántos colores puede manejar su terminal y, en caso de que lo haga, utiliza la variante de 256. El script se llama source-highlight-esc.sh y se instalará junto con los otros binarios.

3
3
3
2016-10-04 02:51:08 +0000

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

Pour des pages de manuel colorées, ajoutez ce qui suit à votre .bashrc ou .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 mise en évidence syntaxique, utilisez un lesspipe.sh puissant existant pour le gérer au lieu d'écrire le vôtre : https://github.com/wofr06/lesspipe

3
3
3
2013-02-27 22:45:25 +0000

Para expandir otra respuesta, puedes hacer que funcione para la mayoría, si no todos tus scripts que no tienen extensiones, cambiando el archivo .lessfilter un poco:

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

Aún así necesitarías añadir las dos variables a . bashrc:

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

Y todavía necesitarás hacer ejecutable el .lessfilter:

$ chmod 700 ~/.lessfilter

También quería añadir que en debian el paquete pygments se llama python-pygments. Tuve problemas para localizarlo al principio porque la obvia falta de ortografía de “pigmentos” como “pygments” no era suficiente indicio para mí de que era un paquete que podría ser prefijado con “python-” por el gestor de paquetes.

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

Puedes considerar el uso de la utilidad most que es una alternativa de color para less y more.

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

Encontré esta simple y elegante solución. No tienes que instalar nada extra ya que ya está ahí por defecto en la mayoría de las máquinas. Como vim está instalado por defecto en la mayoría de las máquinas, incluye una macro para ejecutar vim como less

Algunas de las opciones para usarla son crear un alias:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

o crear un enlace simbólico:ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Entonces sólo tienes que ejecutar vless myfile.py

Tengo la mayoría de la información aquí

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

La solución más intuitiva y directa para mí fue usar pygmentize agregando las líneas de abajo a

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

En caso de que no puedas llamar a pygmentize, simplemente instala como

pip install pygments

ps. El binario ejecutable del pygmentize se colocaría en el /usr/local/bin/ o en tu /home/username/.virtualenv/venvname/bin/ o en algún lugar.

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

Una alternativa a menos/más que funciona con colores fuera de la caja es el murciélago. Puedes instalarlo con la mayoría de los gestores de paquetes lo usan como un buscapersonas así como un sustituto del gato. https://github.com/sharkdp/bat

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

Mientras el texto de salida tenga caracteres de control de color, less -R servirá.

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

Ninguno de estos funcionaba fuera de la caja para mí y pensé en una manera fácil de hacer que esto funcionara, así que pensé en compartirlo.

Sólo usa el tmux, que te permite acceder y desplazarte a través de una historia más grande y conserva los colores perfectamente.