Ao ler um arquivo com `menos` ou` mais`, como posso obter o conteúdo em cores?

415

Quando leio um arquivo no Linux com o comando lessou more, como posso obter o conteúdo em cores?

Abra o caminho
fonte
5
Isso parece relacionado: superuser.com/questions/36022/less-and-grep-color - ajuda?
Jonik
7
O título desta pergunta é muito enganador. Muitas pessoas que chegam nesta página esperam uma solução para o problema de coloração que obterá ao canalizar um comando com saída colorida para less: cores perdidas. (As respostas a essa “questão tubulação” envolvem less -R, unbufferetc.) Mas a questão real refere-se a abertura de um arquivo ! - A ambiguidade está primariamente no título da pergunta, mas mesmo assim, IMHO a questão ainda é muito ampla: "leia um arquivo" pode se referir a qualquer arquivo (provavelmente texto sem formatação). (bem, "obter o conteúdo em cores" provavelmente está se referindo ao realce da sintaxe.) #
03rd18
Preciso me corrigir, apenas 3 (ou 4) das 14 respostas estão faltando à pergunta real do OP: as respostas de ChristopheD , Puneet e Onlyjob ; e talvez jbbr . Ainda assim, duas dessas respostas fazem parte das três mais votadas.
myrdd
@myrdd "destaque de sintaxe" é o termo relevante, então ... (Ele pergunta sobre mostrar cores, não adicionar cores?) less -Rtambém funcionará em arquivos, por exemplols --color=always > /tmp/file && less -R /tmp/file
Gert van den Berg
1
@myrdd Pode fazer mais sentido que a pergunta seja encerrada como "não está claro o que está sendo solicitado", uma vez que as perguntas feitas a qualquer um dos dois provavelmente serão marcadas como duplicatas disso ... baseado em como o eleitor o interpreta ...) (Meu caso de uso era um arquivo de log que (irritantemente) possui códigos de escape de cores)
Gert van den Berg -

Respostas:

149

Você pode utilizar o poder do pytograma com menos - automaticamente! (Não há necessidade de canalizar manualmente).

Instale pygmentscom o seu gerenciador de pacotes ou pip (possivelmente chamado python-pygments) ou obtenha-o aqui http://pygments.org/download/ .

Escreva um arquivo ~/.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

No seu .bashrcadd

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

Além disso, você precisa tornar o ~/.lessfilterexecutável executando

chmod u+x ~/.lessfilter

Testado no Debian.

Você entendeu a ideia. Obviamente, isso pode ser melhorado, aceitando mais extensões ou analisando o shebang para outros intérpretes que não o bash. Veja algumas das outras respostas para isso.

A idéia veio de uma antiga postagem de blog dos criadores de Pygments , mas a postagem original não existe mais.

Dario Seidl
fonte
6
Se você deseja colorir os arquivos de código-fonte, também precisa tornar ~ / .lessfilter executável executando chmod u+x ~/.lessfilter. Você também precisa ter o pycementize ( pygments.org/download ) instalado.
Sergiy Belozorov 18/12/12
Alguém pode confirmar que isso funciona, pois não tem efeito para mim quando executo um comando comols -l | less
puk 30/10
7
@uk você pode fazer algo parecido ls --color=always -l | less -R. Obviamente, muito para digitar, mas você pode usar o apelido para algo assim ll. Ou seja, se você não quiser usar nenhuma biblioteca extra.
PhilT 23/07
2
adicionou o comentário de @ SergiyByelozyorov na resposta.
precisa saber é o seguinte
2
Minha edição foi rejeitada, então acho que vou postá-la como um comentário: não teste os códigos de saída dos comandos indiretamente. Você pode usar if grep -q "#\!/bin/bash" "$1"( -qsuprime a saída padrão). Você pode redirecionar o erro padrão com 2>/dev/null.
Tom Fenech
503

Tente o seguinte:

less -R

de man less:

-r ou --raw-control-chars

Faz com que caracteres de controle "brutos" sejam exibidos. (...)

-R ou --RAW-CONTROL-CHARS

Como -r, mas apenas as seqüências de escape "cor" ANSI são exibidas na forma "bruta". (...)

ChristopheD
fonte
17
Isso é útil quando o próprio arquivo contém os códigos de escape que precisam ser exibidos.
Nitrodist
1
Eu costumava conhecer menos -r, mas pesquisar no arquivo usando "/" continuava trazendo as linhas erradas. -R parece fazer um trabalho melhor. Obrigado pela dica.
Amos Shapira
54
Deve-se observar que a maioria dos programas usa o isatty(2)syscall para verificar se a saída padrão é um terminal e, geralmente, desativa a saída colorida. Para qualquer pipe para menos, isattyretornará 0. Para verificar se isso funciona, tenteecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e
11
Esta resposta não se destaca no teste realmente faz alguma coisa.
Michael Wolf
18
Você também pode digitar -Rquando já abriu lesspara conseguir isso.
SCz
138

Eu recebi a resposta em outro post: Less e Grep: Obtendo resultados coloridos ao usar um pipe de grep para less

Quando você simplesmente executa grep --color, implica em grep --color=autoqual detecta se a saída é um terminal e, em caso afirmativo, ativa as cores. No entanto, quando detecta um tubo, desativa a coloração. O seguinte comando:

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

Sempre habilitará a cor e substituirá a detecção automática, e você obterá o realce da cor em menos.

Aviso: Não coloque --color=alwayscomo um pseudônimo, às vezes isso quebra coisas. É por isso que existe uma --color=autoopção.

Puneet
fonte
6
Bom obrigado. Exceto que eu preciso usar -Rcomo opção lesstambém.
N
10
Eu acredito que grep -Ré para especificar a pesquisa recursiva. less -Ré necessário para lesscuspir corretamente as cores. grep --color=always [grep cmds] | less -Rfunciona para mim no OS X 10.7.3!
Steven Lu
@ naught101 @Steven Lu Editado em, embora pareça que algumas pessoas talvez não precisem usar less -R(de qualquer maneira, de acordo com o autor da postagem original).
Jtpereyda # 22/13
2
Existe alguma maneira de deixar o grep saber canalizar menos o comando -R e depois colorir? Portanto, não precisamos colocar --color = sempre e menos -R o tempo todo.
A-letubby
1
Esta é de longe a resposta mais simples de trabalho. Obrigado!
Danny Staple
37

Use em viewvez de less. Ele abre o arquivo vimno modo somente leitura.

É praticamente um colorido less: um pager onde você pode pesquisar /(e mais). A única desvantagem é que você não pode sair com qmas precisa:q

Além disso, você obtém a mesma cor que vim(já que está de fato usando vim).

Riccardo Galli
fonte
E o desempenho de arquivos grandes? O destaque da sintaxe do Vim é lento em arquivos grandes.
pihentagy
Não sei qual é o seu valor para 'grande', mas abrir um arquivo de ~ 10000 linhas é instantâneo, e a pesquisa é incluída.
Riccardo Galli
1
Votou (não sabia view), mas outra desvantagem é que j / k / para cima / para baixo não rola instantaneamente, pois existe um cursor.
Tyler Collier
7
Observe que você pode precisar adicionar view -ao fazer a tubulação
user45909 2/15/15
6
vimé um editor que carrega o arquivo completo na memória, enquanto lessé um pager, carregando o arquivo apenas parcialmente na memória. Você saberá a diferença com arquivos enormes.
S2 20/07
16

Para dizer menos para mostrar cores, chame-o com -R:

less -R

Infelizmente, alguns programas detectam que seu stdout não é um terminal e desativam cores - por exemplo, pacman (gerenciador de pacotes do Arch Linux).

Nesses casos, é possível usar unbuffer:

unbuffer <command> | less -R

Exemplo usando pacman

unbuffer pacman -Ss firefox | less -R

O unbuffercomando geralmente faz parte do pacote expect(Arch Linux, Debian / Ubuntu) ou expect-dev(versões herdadas do Debian / Ubuntu).

Para responder à pergunta por completo:

Como outros já responderam, pygmentizeé ótimo para colorir o código fonte. Não requer unbuffer. Chamada mais fácil:

pygmentize someSource.cpp | less -R
jbbr
fonte
2
Para usar unbufferno Ubuntu, #sudo apt install expect
415 wisbucky
Esta resposta precisa de mais votos.
Thomas Dignan 19/04
Eu estava tentando canalizar a saída do dmesg para verificar os erros de inicialização, mas as cores não funcionavam, a menos que eu usasse o buffer, o que estava confundindo muita coisa: unbuffer dmesg | less -Rfunciona como esperado.
pbhj
15

pygmentizesuporta a -gopção de adivinhar automaticamente o lexer a ser usado, o que é útil para leitura de arquivos STDINsem verificar nenhum tipo de extensão.

Usando isso, você só precisa definir as 2 exportações a seguir no seu, .bashrcsem scripts adicionais:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Tuxdude
fonte
4
Conciso e eficaz. Eu prefiro definir um alias, porque às vezes menos é melhor. Então: alias lesc = 'LESS = "- R" LESSOPEN = "| pycementize -g% s" less' '
Tiago
9

Você não disse o que essa cor deveria significar, por exemplo, quais deveriam ser as cores de um arquivo de texto?

Se o que você deseja é o destaque da sintaxe para o código fonte, você precisa de um marcador de código fonte. Às vezes eu uso pycementize assim

pygmentize file.cpp | less

ou

pygmentize file.cpp | more

Existem outros marcadores por aí.

Isso é bem rápido. Se você não se importa em iniciar, vimexiste um modo somente leitura que pode destacar a sintaxe se você o tiver vim.

view file.cpp

ou, alternativamente, veja a resposta de churnd.

Benjamin Bannier
fonte
5

Esta é mais uma resposta baseada em pigmentos , com várias melhorias importantes:

  • não quebra lesspipeou lessfilefiltra
  • trabalha com várias entradas para less
  • analisa corretamente o tipo de script do cabeçalho shebang
  • funciona para todos os 434 tipos de arquivos lexáveis ​​por Pygments
  • esquema de cores é parametrizado como uma variável de ambiente

Instalar pigmentos e Gawk

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

Definir variáveis ​​de ambiente

Verifique se lesspipeou lessfilejá está ativado:

echo $LESSOPEN

Se você não lesspipevir nenhum dos programas mencionados lá, verifique se está instalado (a maioria das distros vem com ele).

Adicione o seguinte 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'

Se você não quiser lesspipe, substitua a evalinstrução por:

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

Crio ~/.lessfilter

Adicione o seguinte código e torne o arquivo executável: 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
fonte
A única desvantagem dessa abordagem é que o Pygments é um programa Python; portanto, no primeiro uso durante uma sessão de shell, há um atraso de "início a frio". As invocações subsequentes são muito mais rápidas.
Joe Coder
Agradável! Realmente abrangente.
Dario Seidl
4

Use o destaque da fonte GNU ; você pode instalá-lo aptse tiver, ou instalá-lo da fonte. Em seguida, configure um "pré-processador de entrada" por menos, com a ajuda das documentações Source-highligh 'para configurar com menos :

Isto foi sugerido por Konstantine Serebriany. O script src-hilite-lesspipe.sh será instalado juntamente com o destaque da fonte. Você pode usar as seguintes variáveis ​​de ambiente:

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

Dessa forma, quando você usa menos para procurar um arquivo, se for um arquivo de origem tratado pelo destaque de origem, ele será destacado automaticamente.

Xavier-Emmanuel Vincent recentemente forneceu uma versão alternativa do esquema de cores ANSI, esc256.style: alguns terminais podem lidar com 256 cores. Xavier também forneceu um script que verifica quantas cores o seu terminal pode suportar e, no caso, usa a variante 256. O script é chamado source-highlight-esc.sh e será instalado junto com os outros binários.

arsaKasra
fonte
3

Para expandir para outra resposta, você pode fazê-lo funcionar para a maioria, senão todos os scripts que não possuem extensões, alterando um pouco o arquivo .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

Você ainda precisará adicionar as duas variáveis ​​ao .bashrc:

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

E você ainda precisará tornar o .lessfilter executável:

$ chmod 700 ~/.lessfilter

Também queria acrescentar que, no debian, o pacote pygments é chamado python-pygments. Eu tive problemas para localizá-lo no início, porque o erro ortográfico óbvio de "pigmentos" como "pigmentos" não era o suficiente para sugerir que era um pacote que poderia ser prefixado com "python-" pelo gerenciador de pacotes.

Speeddymon
fonte
2
2 comentários: 1) Obrigado pela melhoria. 2) Frases como "melhor resposta votada" não são ótimas; isso pode mudar (na verdade, se isso for melhor do que essa resposta, esse post poderá se tornar a resposta principal, quando será confuso. Talvez diga apenas "expandir sobre outra resposta" ou "resposta do capitão-cômico"?
cpast
2

Você pode considerar o uso de um mostutilitário que é uma alternativa ecologicamente correta para lesse more.

Onlyjob
fonte
você pode nos mostrar um exemplo? Eu tentei aqui, e a saída foi em preto e branco.
danilo
Sua entrada deve conter cores. Primeiro produzir uma amostra colorised (por exemplo ccze -A </var/log/dpkg.log, ls -1 --color /var/log), em seguida, tubo isso de most: ls -1 --color /var/log | most.
Onlyjob 15/06
sim, eu usei: git status | less --color,git status | most --color
danilo
Eu usei mais, mais, menos, e todas as ferramentas mostram preto e branco
danilo
Certifique-se de que seu comando produz cores antes de canalizar para lessoutras pessoas. Verifique se o emulador de terminal pode gerar cores. Verifique TERMa variável de ambiente. Leia mais em unix.stackexchange.com/questions/148/… Quando possível, use a moderna distribuição GNU + Linux como o Debian . Use motor de busca (por exemplo duckduckgo.com startpage.com ) para encontrar respostas. Lembre-se de que os comentários não são para discussão.
Onlyjob 16/06
2

Condensado do meu post completo sobre como melhorar menos experiência: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

Para páginas de manual coloridas, adicione o seguinte ao seu .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

Para realçar a sintaxe, use um poderoso existente lesspipe.shpara lidar com isso, em vez de escrever o seu próprio: https://github.com/wofr06/lesspipe

xuhdev
fonte
1

Encontrei esta solução simples e elegante. Você não precisa instalar nada extra, pois ele já existe por padrão na maioria das máquinas. Como vimé instalado por padrão na maioria das máquinas, inclui uma macro para executar vimcomoless

Algumas das opções para usá-lo são para criar um alias: alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

ou crie um link simbólico: ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Então você apenas corre vless myfile.py

Eu tenho a maioria das informações aqui

Wavesailor
fonte
1
Eu tenho alias lesser='/usr/share/vim/vim80/macros/less.sh'em ~/bash_aliases(no Ubuntu 18.04). Pode usar atalhos como f para frente, b para trás, d meio para baixo, u meio para cima, q sair, etc ...
Daniel
0

A solução mais intuitiva e direta para mim foi usando pygmentize
adicionando as linhas abaixo ao .bashrc

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

Caso você não possa ligar pygmentize, basta instalar como

pip install pygments

ps. O pygmentizebinário executável ficava /usr/local/bin/no seu /home/username/.virtualenv/venvname/bin/ou em algum lugar.

David Jung
fonte
-2

Nenhuma delas estava funcionando bem para mim e eu descobri uma maneira fácil de fazer esse trabalho, então pensei em compartilhar.

Basta usar o tmux, que permite acessar e rolar por uma história maior e preservar as cores perfeitamente.

math0ne
fonte
1
O tmux não permite vários terminais em uma tela, como muda menos a exibição de cores?
Xen2050 26/10/18
@ Xen2050 Eu acho que é uma solução legal, embora essa resposta não explique como entrar no modo de rolagem (Ctrl-b + [)
siikamiika 18/04
-2

Contanto que o texto de saída tenha caracteres de controle de cores, o less -Rfará.

Leonardo Raele
fonte
É isso que outra resposta (de 9 anos atrás) diz. Respostas que duplicam outras respostas não são úteis.
Kamil Maciorowski
É justo, mas essa resposta não torna explícito que ele só funciona em arquivos criados com caracteres de controle de cores.
Leonardo Raele 15/07