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

415

Cuando leo un archivo en Linux con el comando lesso more, ¿cómo puedo obtener el contenido en colores?

Abre el camino
fuente
55
Esto parece relacionado: superuser.com/questions/36022/less-and-grep-color : ¿ayuda?
Jonik
77
El título de esta pregunta es muy engañoso. Muchas personas que llegan a esta página esperan una solución al problema de coloración que obtendrá al canalizar un comando con salida de color a less: los colores se pierden. (Las respuestas a ese "problema de tuberías" implican less -R, unbufferetc.) ¡Pero la pregunta real se refiere a abrir un archivo ! - La ambigüedad radica principalmente en el título de la pregunta, pero además de eso, en mi humilde opinión, la pregunta sigue siendo demasiado amplia: "leer un archivo" podría referirse a cualquier archivo (probablemente texto sin formato). (bueno, "obtener el contenido en colores" probablemente se refiera al resaltado de sintaxis)
myrdd
Necesito corregirme, solo faltan 3 (o 4) de las 14 respuestas a la pregunta real del OP: las respuestas de ChristopheD , Puneet y Onlyjob ; y tal vez jbbr . Aún así, dos de esas respuestas son parte de las tres más votadas.
myrdd
@myrdd "resaltado de sintaxis" es el término relevante entonces ... (¿Pregunta sobre mostrar colores, no agregar colores?) less -Rtambién funcionará en los archivos, por ejemplols --color=always > /tmp/file && less -R /tmp/file
Gert van den Berg
1
@myrdd Podría tener más sentido que la pregunta se cierre como "no está claro lo que se está preguntando", ya que las preguntas que hacen cualquiera de los dos probablemente se marcarán como duplicados de esto ... (Y las respuestas para cualquiera de los dos pueden ser rechazadas basado en cómo lo interpreta el votante ...) (Mi caso de uso fue un archivo de registro que (molestamente) tiene códigos de escape de color)
Gert van den Berg

Respuestas:

149

Puede utilizar el poder de pygmentize con menos, ¡automáticamente! (No es necesario hacer tubos a mano).

Instale pygmentscon su administrador de paquetes o pip (posiblemente llamado python-pygments) u obténgalo 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";;

    *)
        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 .bashrccomplemento

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

Además, debe hacer ~/.lessfilterejecutable ejecutando

chmod u+x ~/.lessfilter

Probado en Debian.

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

La idea surgió de una antigua publicación de blog de los creadores de Pygments , pero la publicación original ya no existe.

Dario Seidl
fuente
66
Si desea colorear los archivos de código fuente, también debe hacer que ejecute ~ / .lessfilter ejecutando chmod u+x ~/.lessfilter. También necesita tener pygmentize ( pygments.org/download ) instalado.
Sergiy Belozorov
¿Alguien puede confirmar que esto funciona ya que no tiene ningún efecto para mí cuando ejecuto un comando comols -l | less
Puk
77
@puk puedes hacer algo como ls --color=always -l | less -R. Obviamente, hay mucho que escribir, pero puedes usar un alias para algo así ll. Eso es si no quieres usar ninguna biblioteca adicional.
PhilT
2
agregó el comentario de @ SergiyByelozyorov a la respuesta.
andrybak
2
Mi edición fue rechazada, así que supongo que la publicaré como un comentario en su lugar: no pruebe los códigos de salida de los comandos indirectamente. Puede usar if grep -q "#\!/bin/bash" "$1"( -qsuprime la salida estándar). Es posible que desee redirigir el error estándar con 2>/dev/null.
Tom Fenech
503

Intenta lo siguiente:

less -R

de man less:

-r o --raw-control-chars

Hace que se muestren los caracteres de control "sin formato". (...)

-R o --RAW-CONTROL-CHARS

Como -r, pero solo las secuencias de escape de "color" ANSI se generan en forma "en bruto". (...)

ChristopheD
fuente
17
Esto es útil cuando el archivo en sí contiene los códigos de escape que deberán mostrarse.
Nitrodist
1
Solía ​​saber acerca de less -r pero buscando en el archivo usando "/" seguía apareciendo las líneas incorrectas. -R parece hacer un mejor trabajo. Gracias por el consejo.
Amos Shapira
54
Cabe señalar que la mayoría de los programas utilizan la isatty(2)llamada al sistema para verificar si su salida estándar es un terminal y, por lo general, deshabilitan la salida coloreada si no lo es. Para cualquier tubería a menos, isattydevolverá 0. Para verificar si esto funciona, intenteecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e
11
Esta respuesta no sobresale en la prueba realmente hace algo.
Michael Wolf
18
También puede escribir -Rcuando ya lo abrió lesspara lograr esto.
Scz
138

Obtuve la respuesta en otra publicación: Less and Grep: obtener resultados coloreados al usar una tubería de grep a less

Cuando simplemente ejecuta grep --color, implica grep --color=autoque detecta si la salida es un terminal y, si es así, habilita los colores. Sin embargo, cuando detecta una tubería, deshabilita la coloración. El siguiente comando:

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

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

Advertencia: no lo pongas --color=alwayscomo un alias, a veces rompe cosas. Por eso hay una --color=autoopción.

Puneet
fuente
66
Genial gracias. Excepto que necesito usar -Rcomo opción lesstambién.
naught101
10
Creo que grep -Res para especificar la búsqueda recursiva. less -Res necesario para lessescupir correctamente los colores. grep --color=always [grep cmds] | less -R¡funciona para mí en OS X 10.7.3!
Steven Lu
@ naught101 @Steven Lu Editado, 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
2
¿Hay alguna forma de hacerle saber a Grep que solo canalice el comando -R y luego simplemente coloree? Por lo tanto, no tenemos que poner --color = siempre y menos -R todo el tiempo.
A-letubby
1
Esta es, con mucho, la respuesta de trabajo más simple. ¡Gracias!
Danny Staple el
37

Usar en viewlugar de less. Abre el archivo vimen modo de solo lectura.

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

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

Riccardo Galli
fuente
¿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 su valor para 'grande', pero abrir un archivo de ~ 10000 líneas es instantáneo, buscar dentro incluido.
Riccardo Galli
1
He votado a favor (no lo sabía view) pero otra desventaja es que j / k / arriba / abajo no se desplaza instantáneamente, ya que hay un cursor.
Tyler Collier
77
Tenga en cuenta que es posible que deba agregar view -al realizar la tubería
user45909
66
vimes un editor, que carga el archivo completo en la memoria, mientras que lesses un localizador, cargando el archivo solo parcialmente en la memoria. Sabrás la diferencia con archivos enormes.
sjas
16

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

less -R

Desafortunadamente, algunos programas detectan que su stdout no es un terminal y deshabilitan 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

El unbuffercomando generalmente forma parte del paquete expect(Arch Linux, Debian / Ubuntu) o expect-dev(versiones heredadas de Debian / Ubuntu).

Para responder la pregunta para completar:

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

pygmentize someSource.cpp | less -R
jbbr
fuente
2
Para usar unbufferen Ubuntu,sudo apt install expect
wisbucky
Esta respuesta necesita más votos a favor.
Thomas Dignan
Estaba tratando de canalizar la salida de dmesg para verificar los errores de arranque, pero los colores no funcionaron a menos que usara unbuffer, lo que me confundía muchísimo: unbuffer dmesg | less -Rfunciona como se esperaba.
pbhj
15

pygmentizeadmite la -gopción de adivinar automáticamente el lexer que se utilizará, lo cual es útil para los archivos leídos STDINsin verificar ningún tipo de extensión.

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

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Tuxdude
fuente
44
Conciso y efectivo. Prefiero definir un alias, porque a veces menos es mejor. Entonces: alias lesc = 'LESS = "- R" LESSOPEN = "| pygmentize -g% s" less'
Tiago
9

No dijo qué debería significar este color, por ejemplo, ¿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 pygmentize así

pygmentize file.cpp | less

o

pygmentize file.cpp | more

Hay otros resaltadores alrededor.

Esto es bastante rápido Si no le importa disparar, vimhay un modo de solo lectura que puede darle resaltado de sintaxis si lo tiene activado vim.

view file.cpp

o alternativamente vea la respuesta de Churnd.

Benjamin Bannier
fuente
5

Esta es otra respuesta basada en pigmentos , con varias mejoras importantes:

  • no se rompe lesspipeni lessfilefiltra
  • funciona con múltiples entradas para less
  • analiza correctamente el tipo de script desde el encabezado shebang
  • funciona para todos los 434 tipos de archivos lexable por Pygments
  • esquema de color se parametriza como una variable de entorno

Instalar pigmentos y Gawk

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

Establecer variables de entorno

Comprobar si lesspipeo lessfileya está habilitado:

echo $LESSOPEN

Si no ve ninguno de los programas mencionados allí, asegúrese de que lesspipeesté instalado (la mayoría de las distribuciones vienen con él).

Agregue lo siguiente a ~/.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 quiere lesspipe, reemplace la evaldeclaración con:

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

Crear ~/.lessfilter

Agregue el siguiente código y haga que el archivo sea 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
Joe Coder
fuente
El único inconveniente de este enfoque es que Pygments es un programa de Python y, por lo tanto, cuando se usa por primera vez durante una sesión de shell, hay un retraso de "arranque en frío". Las invocaciones posteriores son mucho más rápidas.
Joe Coder
¡Agradable! Realmente completo.
Dario Seidl
4

Use el resaltado de fuente GNU ; puede instalarlo aptsi lo tiene, o instalarlo desde la fuente. Luego configure un "preprocesador de entrada" por menos, con la ayuda de las documentaciones de Source-highligh para configurar con menos :

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

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

De esta manera, cuando usa menos para explorar un archivo, si es un archivo fuente manejado por resaltado de fuente, se resaltará automáticamente.

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

arsaKasra
fuente
3

Para ampliar otra respuesta, puede hacer que funcione para la mayoría, si no para todos, sus scripts que no tienen extensiones cambiando el archivo .lessfilter solo 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 necesitaría agregar las dos variables a .bashrc:

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

Y aún necesitará hacer que .lessfilter sea ejecutable:

$ chmod 700 ~/.lessfilter

También quería agregar que bajo debian el paquete pygments se llama python-pygments. Al principio tuve problemas para localizarlo porque la falta de ortografía obvia de los "pigmentos" como "pigmentos" no era una pista suficiente para mí de que era un paquete que podría tener como prefijo "python-" el administrador de paquetes.

Speeddymon
fuente
2
2 comentarios: 1) Gracias por la mejora. 2) Las frases como "mejor respuesta votada" no son geniales; eso puede cambiar (de hecho, si esto es mejor que esa respuesta, esta publicación podría convertirse en la respuesta principal, en cuyo punto será confuso. ¿Quizás simplemente diga "expandir sobre otra respuesta" o "respuesta del capitáncomic"?
cpast
2

Puede considerar usar la mostutilidad, que es una alternativa amigable con el color para lessy more.

Solo trabajo
fuente
¿Puedes mostrarnos un ejemplo? Lo intenté aquí, y la salida fue en blanco y negro.
Danilo
Su entrada debe contener colores. En primer lugar producir una muestra colorised (por ejemplo ccze -A </var/log/dpkg.log, ls -1 --color /var/log) entonces tubería a most: ls -1 --color /var/log | most.
Onlyjob
Sí, he utilizado: git status | less --color,git status | most --color
Danilo
Usé la mayoría, más, menos, y todas las herramientas se muestran en blanco y negro
danilo
Asegúrese de que su comando produzca colores antes de canalizar a lessotros. Asegúrese de que su emulador de terminal pueda generar colores. Comprobar TERMvariable de entorno. Lea más en unix.stackexchange.com/questions/148/… Cuando sea posible, use la distribución moderna de GNU + Linux como Debian . Utilizar motores de búsqueda (por ejemplo duckduckgo.com Startpage.com ) para encontrar respuestas. Recuerde que los comentarios no son para discusión.
Onlyjob
2

Condensada de mi publicación de blog completa sobre cómo mejorar menos experiencia: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

Para páginas de manual coloridas, agregue lo siguiente a su .bashrco .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

Para resaltar la sintaxis, use un potente existente lesspipe.shpara manejarlo en lugar de escribir el suyo propio: https://github.com/wofr06/lesspipe

xuhdev
fuente
1

Encontré esta solución simple y elegante. No tiene que instalar nada extra ya que ya está allí por defecto en la mayoría de las máquinas. Como vimse instala por defecto en la mayoría de las máquinas, incluye una macro para ejecutar vimcomoless

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

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

Entonces solo corres vless myfile.py

Obtuve la mayor parte de la información aquí

Wavesailor
fuente
1
Tengo alias lesser='/usr/share/vim/vim80/macros/less.sh'en ~/bash_aliases(en Ubuntu 18.04). Puede usar atajos como f hacia adelante, b hacia atrás, d mitad abajo, u mitad arriba, q salir, etc ...
Daniel
0

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

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

En caso de que no pueda llamar pygmentize, simplemente instale como

pip install pygments

PD. El pygmentizebinario ejecutable se sentaría en /usr/local/bin/o en su /home/username/.virtualenv/venvname/bin/o en algún lugar.

David Jung
fuente
-2

Ninguno de estos funcionó para mí y descubrí una manera fácil de hacer que esto funcione, así que pensé en compartirlo.

Simplemente use tmux, que le permite acceder y desplazarse por un historial más amplio y preserva los colores perfectamente.

math0ne
fuente
1
Tmux no permite múltiples terminales desde una pantalla, ¿cómo cambia la visualización de menos colores?
Xen2050
@ Xen2050 Creo que es una solución clara, aunque esta respuesta no explica cómo ingresar al modo de desplazamiento (Ctrl-b + [)
siikamiika
-2

Siempre que el texto de salida tenga caracteres de control de color, less -Rservirá.

Leonardo Raele
fuente
Esto es lo que dice otra respuesta (de hace 9 años). Las respuestas que duplican otras respuestas no son útiles.
Kamil Maciorowski
Correcto, pero esa respuesta no hace explícito que solo funciona en archivos que se crearon con caracteres de control de color.
Leonardo Raele