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

Wanneer ik een bestand met &007 of &007 lees, hoe kan ik dan de inhoud in kleuren krijgen?

Wanneer ik een bestand in Linux lees met het commando less of more, hoe kan ik dan de inhoud in kleuren krijgen?

Antwoorden (17)

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

Probeer het volgende:

less -R

van man less:

-r of --raw-control-chars

Causes “raw” control characters worden weergegeven. (…)

-R of --RAW-CONTROL-CHARS

Zoals -r, maar alleen ANSI “kleur” escape-sequenties worden in “ruwe” vorm weergegeven. (…)

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

(update over 2020)

De snellere manier zou het gebruik van less -R ref. https://superuser.com/a/117842/34893 ](https://superuser.com/a/117842/34893)

  • *

U kunt de kracht van pygmentize met minder - automatisch - gebruiken! (U hoeft niet met de hand te pijpen)

Installeer pygments met uw pakketbeheerder of pip (eventueel met de naam python-pygments) of haal het hier op http://pygments.org/download/ .

Schrijf een bestand ~/.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

In uw .bashrc voegt u

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

toe. Ook moet u ~/.lessfilter uitvoerbaar maken door

chmod u+x ~/.lessfilter

te testen op Debian.

U krijgt het idee. Dit kan natuurlijk verder worden verbeterd, door meer uitbreidingen te accepteren of de shebang te parseren voor andere tolken dan bash. Zie daarvoor enkele andere antwoorden.

Het idee kwam uit een oud blogbericht van de makers van Pygments , maar het oorspronkelijke bericht bestaat niet meer.

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

Ik heb het antwoord in een andere post gekregen: Minder en Grep: Het krijgen van gekleurde resultaten bij het gebruik van een pijp van grep naar minder ](https://superuser.com/questions/36022/less-and-grep-color)

Wanneer u gewoon grep --color uitvoert, impliceert dit grep --color=auto die detecteert of de uitvoer een terminal is en zo ja, kleuren inschakelt. Wanneer het echter een pijp detecteert, schakelt het de kleuring uit. De volgende opdracht:

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

zal altijd de automatische detectie van kleuren inschakelen en opheffen, en u krijgt de kleurmarkering in minder.

Waarschuwing: Zet --color=always niet als een alias, het breekt soms dingen. Daarom is er een --color=auto optie.

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

Gebruik view in plaats van less. Het opent het bestand met vim in readonly modus.

Het is praktisch een gekleurde less: een pager waar je kunt zoeken met / (en meer). Het enige nadeel is dat je niet kunt afsluiten met q maar je hebt :q

nodig. Ook krijg je dezelfde kleurstelling als vim (omdat je in feite vim gebruikt).

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

Om minder te vertellen om kleuren te tonen noem je het met -R: less -R

. Helaas detecteren sommige programma’s dat hun stdout geen terminal is en schakelen ze de kleuren uit - bijvoorbeeld pacman (Arch Linux package manager).

In die gevallen is het mogelijk om unbuffer te gebruiken:

unbuffer <command> | less -R

Voorbeeld met behulp van pacman

unbuffer pacman -Ss firefox | less -R

Het unbuffer commando is meestal onderdeel van het pakket expect (Arch Linux, Debian/Ubuntu) of expect-dev (legacy versies van Debian/Ubuntu).

Om de vraag naar volledigheid te beantwoorden:

Zoals anderen al hebben geantwoord, is pygmentize geweldig voor het inkleuren van broncode. Het vereist geen unbuffer. Gemakkelijkste oproep:

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

pygmentize ondersteunt de -g optie om automatisch de te gebruiken lexer te raden, wat handig is voor bestanden die van STDIN worden gelezen zonder dat er een extensietype wordt gecontroleerd.

Met behulp daarvan hoeft u alleen de volgende 2 exports in uw .bashrc in te stellen zonder dat er extra scripts nodig zijn:

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

Je hebt niet gezegd wat deze kleur moet betekenen, bijvoorbeeld wat de kleuren moeten zijn voor een tekstbestand?

Als wat je wilt syntax highlighting voor de broncode is, heb je een broncode highlighter nodig. Ik gebruik soms pygmentize zoals deze

pygmentize file.cpp | less

of

pygmentize file.cpp | more

Er zijn andere markeerstiften in de buurt.

Dit is vrij snel. Als je het niet erg vindt om vim op te starten is er een alleen-lezen modus die je syntaxis markeringen kan geven als je het in vim hebt.

view file.cpp

of als alternatief zie je het antwoord van churnd.

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

Dit is weer een antwoord op basis van pyfragmenten , met een aantal belangrijke verbeteringen:

  • breekt lesspipe of lessfile filters niet - werkt met meerdere ingangen naar less
  • parseert correct het scripttype uit de shebang header
  • werkt voor alle 434 bestandstypes lexable door Pygments
  • kleurenschema is geparametreerd als een omgevingsvariabele

Installeren van Pygments en Gawk

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

Instellen van omgevingsvariabelen

Controleer of lesspipe of lessfile al is ingeschakeld:

echo $LESSOPEN

Als u daar geen van beide programma’s ziet, controleer dan of lesspipe is geïnstalleerd (de meeste distro’s worden meegeleverd).

Voeg het volgende toe aan ~/.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'

Als u lesspipe niet wilt, vervang dan de verklaring van eval door:

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

Maak ~/.lessfilter

Voeg de volgende code toe en maak het bestand uitvoerbaar: 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

Gebruik de GNU Source-highlight ; u kunt het installeren met apt als u het hebt, of op een andere manier installeren vanaf de bron. Stel vervolgens een “input preprocessor” in voor minder, met behulp van de Source-highligh’ documentatie voor het opzetten met minder :

Dit werd gesuggereerd door Konstantine Serebriany. Het script src-hilite-lesspipe.sh wordt samen met Source-highlight geïnstalleerd. U kunt de volgende omgevingsvariabelen gebruiken:

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

Op deze manier, wanneer u minder gebruikt om een bestand te doorbladeren, wordt het automatisch gemarkeerd als het een bronbestand is dat wordt behandeld door bron-highlight.

Xavier-Emmanuel Vincent heeft onlangs een alternatieve versie van ANSI-kleurenschema, esc256.style, geleverd: sommige terminals kunnen 256 kleuren aan. Xavier heeft ook een script geleverd dat controleert hoeveel kleuren uw terminal aankan, en in het geval dat de 256 variant wordt gebruikt. Het script heet source-highlight-esc.sh en wordt samen met de andere binaries geïnstalleerd.

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

Gecondoleerd uit mijn volledige blogpost over het verbeteren van minder ervaring: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/ ](https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/)_

Voor kleurrijke manpages, voeg het volgende toe aan uw .bashrc of .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

Voor syntax highlighting, met behulp van een bestaande krachtige lesspipe.sh om het te behandelen in plaats van het schrijven van uw eigen: https://github.com/wofr06/lesspipe

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

Om uit te breiden naar een ander antwoord, kunt u het voor de meeste, zo niet al uw scripts die geen extensies hebben, laten werken door het .lessfilter-bestand een beetje aan te passen:

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

U zou nog steeds de twee variabelen moeten toevoegen aan . bashrc:

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

en je moet nog steeds .lessfilter uitvoerbaar maken:

$ chmod 700 ~/.lessfilter

Ook wilde ik toevoegen dat onder debian het python-pygmenten pakket python-pygmenten heet. Ik had in het begin moeite om het te lokaliseren omdat de duidelijke foutieve spelling van “pigmenten” als “pygments” voor mij niet genoeg hint was dat het een pakket was dat door de pakketbeheerder met “python-” zou kunnen worden voorafgegaan.

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

U kunt het gebruik van most utility overwegen, wat een kleurvriendelijk alternatief is voor less en more.

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

Ik heb deze eenvoudige elegante oplossing gevonden. Je hoeft niets extra’s te installeren, want het staat standaard al op de meeste machines. Aangezien vim standaard op de meeste machines is geïnstalleerd, bevat het een macro om vim uit te voeren zoals less

. Enkele van de opties om het te gebruiken zijn om een alias:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

te maken of een symbolische link te maken:ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

. Dan hoeft u alleen maar vless myfile.py

te draaien.

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

De meest intuïtieve en eenvoudige oplossing voor mij was het gebruik van pygmentize door onderstaande regels toe te voegen aan .bashrc

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

In het geval je pygmentize niet kon bellen, installeer dan gewoon zoals

pip install pygments

ps. De pygmentize executable binary zou in /usr/local/bin/ zitten of in uw /home/username/.virtualenv/venvname/bin/ of ergens.

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

Een alternatief voor minder/meer dat werkt met kleuren uit de doos is vleermuis. U kunt het installeren met de meeste pakketbeheerders die het gebruiken als een pager en als een kattenvervanger. https://github.com/sharkdp/bat

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

Zolang de uitvoertekst kleurcontrolekarakters heeft, is less -R voldoende.

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

Niets van dit alles werkte uit de doos voor mij en ik bedacht een makkelijke manier om dit te laten werken zodat ik dacht dat ik het zou delen.

Gebruik gewoon tmux, dat geeft je toegang tot en scrollt door een grotere geschiedenis en bewaart de kleuren perfect.