Pregunta Obtener colores en menos o más


Cuando leo un archivo en Linux con el comando less o more¿Cómo puedo obtener el contenido en colores?


342


origen


Esto parece relacionado: superuser.com/questions/36022/less-and-grep-color - ¿Ayuda? - Jonik


Respuestas:


¡Puedes utilizar el poder de pygramize con menos, automáticamente! (No es necesario que pipe a mano)

Instalar pygments con su administrador de paquete o pip (posiblemente llamado python-pygments) o consíguelo aquí http://pygments.org/download/.

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

exit 0

En tus .bashrc añadir

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

Además, necesitas hacer ~/.lessfilter ejecutable ejecutando

chmod u+x ~/.lessfilter

Probado en Debian.

La idea vino de una vieja publicación de blog de la creadores de Pygments, pero la publicación original ya no existe.


124



Si desea colorear los archivos de código fuente, también debe ejecutar ~ / .lessfilter ejecutando chmod u+x ~/.lessfilter. También necesitas tener pygramize (pygments.org/download) instalado. - Sergiy Byelozyorov
¿Alguien puede confirmar que esto funciona ya que no tiene ningún efecto para mí cuando ejecuto un comando como ls -l | less - puk
¿Alguna idea de cómo encadenar esto con lessopen.sh de Vladimir Linek? está configurado con este formulario: LESSOPEN = "lessopen.sh% s" - Gregory
@puk puedes hacer algo como ls --color=always -l | less -R. Obviamente, hay mucho que escribir, pero podrías alias a algo así como ll. Eso es si no quieres usar ninguna biblioteca adicional. - PhilT
agregó el comentario de @SergiyByelozyorov en la respuesta. - andrybak


Pruebe lo siguiente:

less -R

de man less:

-r o --raw-control-chars

Causa que se muestren caracteres de control "en bruto". (...)

-R o --RAW-CONTROL-CHARS

Me gusta -r, pero solo las secuencias de escape de "color" de ANSI se envían en forma "cruda". (...)


405



Esto es útil cuando el archivo en sí contiene los códigos de escape que deberán mostrarse. - Nitrodist
Solía ​​saber menos -r pero buscar en el archivo usando "/" seguía sacando las líneas incorrectas. -R parece hacer un mejor trabajo. Gracias por el consejo. - Amos Shapira
Cabe señalar que la mayoría de los programas utilizan el isatty(2) syscall para comprobar si su salida estándar es una terminal, y generalmente desactiva la salida coloreada si no lo es. Para cualquier tubería a menos, isatty devolverá 0. Para comprobar si esto funciona, intente echo -e '\x1b[32;1mtest\x1b[m' | less -r - mic_e
Esta respuesta no sobresale en realidad hace algo prueba. - Michael Wolf
También puedes escribir -R cuando ya abriste less lograr esto. - Scz


Obtuve la respuesta en otra publicación: Menos y Grep: obteniendo resultados coloreados al usar un tubo de grep a menos

Cuando simplemente corres grep --color eso   implica grep --color=auto cual   detecta si la salida es una   terminal y si es así habilita los colores.   Sin embargo, cuando detecta una tubería,   desactiva el coloreado. El seguimiento   mando:

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

Siempre habilitará colorear y   anula la detección automática, y   obtendrá el resaltado de color en   Menos.

Advertencia: No poner --color=always como un alias, rompe las cosas a veces. Es por eso que hay un --color=auto opción.


114



Genial gracias. Excepto que necesito usar -R como una opción para less, también. - naught101
Creo grep -R es para especificar la búsqueda recursiva. less -R es necesario para less para escupir correctamente los colores hacia atrás. grep --color=always [grep cmds] | less -R funciona para mí en OS X 10.7.3! - Steven Lu
@ naught101 @Steven Lu Edited in, aunque parece que algunas personas pueden no necesitar usar less -R (de acuerdo con el autor de la publicación original, de todos modos). - jtpereyda
¿De todos modos hay que dejar que grep sepa solo usar el comando menos R y luego simplemente colorear? Por lo tanto, no tenemos que poner --color = siempre y menos - R todo el tiempo. - A-letubby
Esta es la respuesta de trabajo más simple. ¡Gracias! - Danny Staple


Utilizar view en lugar de less. Abre el archivo con vim en modo solo lectura

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

Además, obtienes la misma coloración que vim (ya que de hecho estás usando vim)


30



¿Qué tal el rendimiento de los archivos grandes? El resaltado de sintaxis de Vim es lento en archivos grandes. - pihentagy
No sé cuál es tu valor para 'grande', pero abrir un archivo de ~ 10000 líneas es instantáneo, incluye la búsqueda dentro. - Riccardo Galli
Subí (no sabía sobre view) pero otro inconveniente es que j / k / up / down no se desplazan instantáneamente, ya que hay un cursor. - Tyler Collier
Tenga en cuenta que es posible que deba agregar view - cuando la tubería - user45909
vim es un editor, que carga el archivo completo en la memoria, mientras que less es un buscapersonas, cargando el archivo solo parcialmente en la memoria. Sabrá la diferencia con archivos enormes. - sjas


Use VIM como sintaxis resaltando buscapersonas.


12



no, pedí más (o menos), no por vim, gracias de todos modos - flow
Obviamente, el resaltado de sintaxis no está incorporado más o menos de forma predeterminada, por lo que la solución alternativa es usar un alias para una de las macros de VIM. Se comporta más o menos como más o menos. :) - churnd
Si prefiere usar vim en lugar de vim emulando menos, puede hacer ... | vim - leer de stdin, o ... | vim -R - solo lectura (para evitar "No escribir desde el último cambio" al salir). Alias ​​para un uso rápido: alias r='vim -R -' entonces ... | r - bain


pygmentize apoya el -g opción para adivinar automáticamente el lexer que se utilizará, que es útil para archivos leídos desde STDIN sin verificar ningún tipo de extensión.

Con eso, solo necesita establecer las siguientes 2 exportaciones en su .bashrc sin ningún script adicional:

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

11



Concisa y efectiva Prefiero definir un alias, porque a veces menos es mejor. Entonces: alias lesc = 'LESS = "- R" LESSOPEN = "| pygramize -g% s" menos " - Tiago


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

Si lo que desea es resaltar la sintaxis para el código fuente, necesita un resaltador de código fuente. A veces uso pygramize Me gusta esto

pygmentize file.cpp | less

o

pygmentize file.cpp | more

Hay otros resaltadores alrededor.

Esto es bastante rápido. Si no te importa disparar vim hay un modo de solo lectura que puede darle resaltado de sintaxis si lo tiene en vim.

view file.cpp

o alternativamente vea la respuesta de churnd.


9





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

less -R

Desafortunadamente, algunos programas detectan que su stdout no es un terminal y desactivan los colores, por ejemplo, pacman (administrador de paquetes de Arch Linux).

En esos casos es posible usar unbuffer:

unbuffer <command> | less -R

Ejemplo usando pacman

unbuffer pacman -Ss firefox | less -R

los unbuffer comando es generalmente parte de la expect-dev(Debian / Ubuntu) o expect (Arch Linux) paquete.

Para responder la pregunta para completarla:

Como otros ya respondieron, pygmentize es ideal para colorear el código fuente. No requiere unbuffer. Llamada más fácil:

pygmentize someSource.cpp | less -R

7