W jaki sposób mogę uzyskać zawartość w kolorach podczas czytania pliku z „mniej” lub „więcej”?

415

Kiedy czytam plik w systemie Linux za pomocą polecenia lesslub more, w jaki sposób mogę uzyskać zawartość w kolorach?

Otwórz drogę
źródło
5
To wydaje się powiązane: superuser.com/questions/36022/less-and-grep-color - czy to pomaga?
Jonik
7
Tytuł tego pytania jest bardzo mylący. Wiele osób lądowania na tej stronie spodziewać się rozwiązania problemu kolorowania dostaniesz gdy potokiem polecenie z kolorowym wyjścia do less: kolory zostaną utracone. (Odpowiedzi na tej „kwestii rurociągu” obejmować less -R, unbufferitd.), Ale rzeczywisty pytanie odnosi się do otwierania pliku ! - Dwuznaczność leży przede wszystkim w tytule pytania, ale nawet poza tym, IMHO pytanie jest wciąż zbyt ogólne: „przeczytaj plik” może odnosić się do dowolnego pliku (prawdopodobnie zwykłego tekstu). (cóż, „pobierz treść w kolorach” prawdopodobnie odnosi się do podświetlania składni).
myrdd
Muszę się poprawić, tylko 3 (lub 4) z 14 odpowiedzi brakuje rzeczywistego pytania PO: odpowiedzi ChristopheD , Puneet i Onlyjob ; a może jbbr . Mimo to dwie z tych odpowiedzi należą do trzech najczęściej głosowanych.
myrdd
@myrdd „podświetlanie składni” jest wtedy odpowiednim terminem ... (Pyta o pokazywanie kolorów, a nie dodawanie kolorów?) less -Rbędzie również działać na plikach, np.ls --color=always > /tmp/file && less -R /tmp/file
Gert van den Berg
1
@myrdd To może mieć sens, aby pytanie zostało zamknięte jako „niejasne, o co się pyta”, ponieważ pytania zadające którekolwiek z tych dwóch pytań zostaną prawdopodobnie oznaczone jako duplikaty tego ... na podstawie sposobu, w jaki wyborca ​​to interpretuje ...) (Mój przypadek użycia to plik dziennika, który (irytujące) zawiera kolorowe kody ucieczki)
Gert van den Berg

Odpowiedzi:

149

Możesz wykorzystać moc pygmentacji za pomocą mniej - automatycznie! (Nie trzeba ręcznie wykonywać rur).

Zainstaluj za pygmentspomocą menedżera pakietów lub pipa (ewentualnie nazywanego python-pygments) lub pobierz tutaj http://pygments.org/download/ .

Napisz plik ~/.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

W swoim .bashrcdodaniu

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

Musisz także ~/.lessfilteruruchomić plik wykonywalny

chmod u+x ~/.lessfilter

Testowane na Debianie.

Masz pomysł. Można to oczywiście ulepszyć, przyjmując więcej rozszerzeń lub analizując shebang dla innych tłumaczy niż bash. Zobacz na to inne odpowiedzi.

Pomysł zrodził się ze starego posta na blogu od twórców Pygments , ale oryginalny post już nie istnieje.

Dario Seidl
źródło
6
Jeśli chcesz mieć kolorowanie plików kodu źródłowego, musisz także uruchomić plik ~ / .lessfilter chmod u+x ~/.lessfilter. Musisz także mieć zainstalowany program pygmentize ( pygments.org/download ).
Sergiy Belozorov,
Czy ktoś może potwierdzić, że to działa, ponieważ nie ma dla mnie żadnego efektu, gdy wykonuję polecenie takie jakls -l | less
puk
7
@puk możesz zrobić coś takiego ls --color=always -l | less -R. Oczywiście dużo do wpisania, ale możesz to zrobić alias do czegoś takiego ll. To znaczy, jeśli nie chcesz używać żadnych dodatkowych bibliotek.
PhilT,
2
dodał komentarz SergiyByelozyorov do odpowiedzi.
andrybak
2
Moja edycja została odrzucona, więc chyba opublikuję ją jako komentarz: Nie testuj kodów wyjścia poleceń pośrednio. Możesz użyć if grep -q "#\!/bin/bash" "$1"( -qpomija standardowe wyjście). Możesz przekierować standardowy błąd za pomocą 2>/dev/null.
Tom Fenech
503

Spróbuj wykonać następujące czynności:

less -R

z man less:

-r lub --raw-control-chars

Powoduje wyświetlanie „surowych” znaków sterujących. (...)

-R lub --RAW-CONTROL-CHARS

Podobnie -r, ale tylko sekwencje specjalne „kolorowe” ANSI są generowane w postaci „surowej”. (...)

ChristopheD
źródło
17
Jest to przydatne, gdy sam plik zawiera kody ucieczki, które będą musiały zostać wyświetlone.
Nitrodist,
1
Wcześniej wiedziałem o mniej -r, ale wyszukiwanie w pliku za pomocą „/” ciągle wyświetlało błędne linie. -R wydaje się wykonywać lepszą robotę. Dzięki za wskazówkę.
Amos Shapira,
54
Należy zauważyć, że większość programów używa isatty(2)syscall do sprawdzenia, czy ich standardowym wyjściem jest terminal, i zwykle wyłącza wyjście kolorowe, jeśli tak nie jest. Za każdą potok do mniejszej, isattyzwróci 0. Aby sprawdzić, czy to działa, spróbujecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e
11
Ta odpowiedź nie przoduje w tym, że faktycznie coś testuje.
Michael Wolf,
18
Możesz także wpisać, -Rgdy już otworzyłeś, lessaby to osiągnąć.
Scz
138

Odpowiedź otrzymałem w innym poście: Less i Grep: uzyskiwanie kolorowych wyników podczas używania potoku od grep do less

Po prostu uruchamia grep --colorto, grep --color=autoco wykrywa, czy wyjście jest terminalem, a jeśli tak, włącza kolory. Jednak po wykryciu rury wyłącza kolorowanie. Następujące polecenie:

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

Zawsze włącza kolorowanie i zastępuje automatyczne wykrywanie, a podświetlanie kolorów będzie mniejsze.

Ostrzeżenie: nie podawaj --color=alwaysjako aliasu, czasem coś psuje. Dlatego istnieje --color=autoopcja.

Puneet
źródło
6
Fajnie dzięki. Tyle że muszę również użyć -Rjako opcji less.
naught101
10
Uważam, że grep -Rsłuży do wyszukiwania rekurencyjnego. less -Rjest konieczne, lessaby poprawnie wypluć kolory z powrotem. grep --color=always [grep cmds] | less -Rdziała dla mnie na OS X 10.7.3!
Steven Lu
@ naught101 @Steven Lu Edytowano w, choć wydaje się, że niektórzy ludzie mogą nie potrzebować less -R( przynajmniej według autora oryginalnego postu).
jtpereyda
2
Czy jest jakiś sposób, aby poinformować grep po prostu o komendzie -R, a następnie po prostu zrobić kolorowanie? Nie musimy więc ustawiać --color = zawsze i mniej -R przez cały czas.
A-letubby
1
To zdecydowanie najprostsza działająca odpowiedź. Dzięki!
Danny Staple
37

Użyj viewzamiast less. Otwiera plik vimw trybie tylko do odczytu.

Jest praktycznie kolorowy less: pager, w którym można wyszukiwać za pomocą /(i nie tylko). Jedyną wadą jest to, że nie możesz wyjść, qale potrzebujesz:q

Otrzymujesz również taką samą kolorystykę jak vim(ponieważ faktycznie używasz vim).

Riccardo Galli
źródło
A co z wydajnością dużych plików? Podświetlanie składni Vima jest powolne w przypadku dużych plików.
pihentagy
Nie wiem, jaka jest twoja wartość „dużego”, ale otwarcie pliku ~ 10000 linii jest natychmiastowe, w tym wyszukiwanie w środku.
Riccardo Galli
1
Głosowałem (nie wiedziałem o tym view), ale kolejną wadą jest to, że j / k / góra / dół nie przewijają się natychmiast, ponieważ jest kursor.
Tyler Collier
7
Pamiętaj, że może być konieczne dodanie view -podczas instalacji
user45909
6
vimto edytor, który ładuje cały plik do pamięci, natomiast lessjest pageriem, ładującym plik tylko częściowo do pamięci. Różnicę poznasz dzięki dużym plikom.
sjas,
16

Aby powiedzieć mniej, aby pokazywać kolory, wywołaj to z -R:

less -R

Niestety niektóre programy wykrywają, że ich standardowe wyjście nie jest terminalem i wyłączają kolory - np. Pacman (menedżer pakietów Arch Linux).

W takich przypadkach można użyć unbuffer:

unbuffer <command> | less -R

Przykład użycia Pacmana

unbuffer pacman -Ss firefox | less -R

unbufferPolecenie jest zwykle częścią pakietu expect(Arch Linux, Debian / Ubuntu) lub expect-dev(wersje Legacy of Debian / Ubuntu).

Aby odpowiedzieć na pytanie pod kątem kompletności:

Jak już inni odpowiedzieli, pygmentiześwietnie nadaje się do kolorowania kodu źródłowego. To nie wymaga unbuffer. Najłatwiejsze połączenie:

pygmentize someSource.cpp | less -R
jbbr
źródło
2
Do użycia unbufferna Ubuntu,sudo apt install expect
wisbucky
Ta odpowiedź wymaga więcej głosów pozytywnych.
Thomas Dignan
Próbowałem przesłać dane wyjściowe dmesg, aby sprawdzić błędy rozruchu, ale kolory nie działały, chyba że użyję opcji buforowania, co mylę mnie do cholery: unbuffer dmesg | less -Rdziała zgodnie z oczekiwaniami.
pbhj
15

pygmentizeobsługuje -gopcję automatycznego odgadnięcia używanego leksykonu, co jest przydatne w przypadku plików odczytywanych STDINbez sprawdzania jakiegokolwiek typu rozszerzenia.

Korzystając z tego, musisz ustawić tylko 2 następujące eksporty .bashrcbez żadnych dodatkowych skryptów:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Tuxdude
źródło
4
Zwięzły i skuteczny. Wolę zdefiniować alias, ponieważ czasami mniej znaczy lepiej. Więc: alias lesc = 'LESS = "- R" LESSOPEN = "| pygmentize -g% s" mniej "
Tiago
9

Nie powiedziałeś, co powinien oznaczać ten kolor, np. Jakie powinny być kolory pliku tekstowego?

Jeśli chcesz wyróżniać składnię kodu źródłowego, potrzebujesz wyróżnienia kodu źródłowego. Czasami używam pygmentize tak

pygmentize file.cpp | less

lub

pygmentize file.cpp | more

Wokół są inne wyróżnienia.

To jest dość szybkie. Jeśli nie masz nic przeciwko odpalaniu, vimistnieje tryb tylko do odczytu, który może podświetlić składnię, jeśli ją masz vim.

view file.cpp

lub alternatywnie zobacz odpowiedź churnda.

Benjamin Bannier
źródło
5

Jest to kolejna odpowiedź oparta na pigmencie , z kilkoma istotnymi ulepszeniami:

  • nie pęka lesspipeani nie lessfilefiltruje
  • działa z wieloma wejściami do less
  • poprawnie analizuje typ skryptu z nagłówka shebang
  • działa dla wszystkich 434 typów plików zarchiwizowanych przez Pygments
  • schemat kolorów jest sparametryzowany jako zmienna środowiskowa

Zainstaluj Pygments i Gawk

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

Ustaw zmienne środowiskowe

Sprawdź, czy lesspipelub lessfilejest już włączony:

echo $LESSOPEN

Jeśli nie widzisz żadnego programu, do którego się tam odwołujesz, upewnij się, że lesspipejest zainstalowany (większość dystrybucji zawiera go).

Dodaj następujące elementy do ~/.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'

Jeśli nie chcesz lesspipe, zamień evalinstrukcję na:

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

Stwórz ~/.lessfilter

Dodaj następujący kod i spraw, aby plik był wykonywalny: 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
źródło
Jedyną wadą tego podejścia jest to, że Pygments to program w języku Python, więc przy pierwszym użyciu podczas sesji powłoki występuje opóźnienie „zimnego startu”. Kolejne wywołania są znacznie szybsze.
Joe Coder,
Miły! Naprawdę kompleksowe.
Dario Seidl
4

Użyj podświetlenia źródła GNU ; możesz go zainstalować, aptjeśli go masz, lub w inny sposób zainstalować ze źródła. Następnie skonfiguruj „preprocesor wejściowy” za mniej, korzystając z dokumentacji Source-highligh, aby skonfigurować za mniej :

Zostało to zasugerowane przez Konstantine Serebriany. Skrypt src-hilite-lesspipe.sh zostanie zainstalowany razem z podświetleniem źródła. Możesz użyć następujących zmiennych środowiskowych:

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

W ten sposób, jeśli użyjesz mniej do przeglądania pliku, jeśli jest to plik źródłowy obsługiwany przez źródło-podświetlenie, zostanie on automatycznie podświetlony.

Xavier-Emmanuel Vincent niedawno udostępnił alternatywną wersję schematu kolorów ANSI, esc256.style: niektóre terminale mogą obsługiwać 256 kolorów. Xavier dostarczył również skrypt, który sprawdza, ile kolorów może obsłużyć twój terminal, i na wszelki wypadek używa wariantu 256. Skrypt nazywa się source-highlight-esc.sh i zostanie zainstalowany razem z innymi plikami binarnymi.

arsaKasra
źródło
3

Aby rozwinąć inną odpowiedź, możesz sprawić, że będzie działać dla większości, jeśli nie wszystkich skryptów, które nie mają rozszerzeń, zmieniając nieco plik .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

Nadal będziesz musiał dodać dwie zmienne do .bashrc:

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

I nadal musisz uczynić plik .lessfilter wykonywalnym:

$ chmod 700 ~/.lessfilter

Chciałem również dodać, że w debianie pakiet pygments nazywa się pygments python. Na początku miałem problem z lokalizacją, ponieważ oczywiste błędy pisowni „pigmentów” jako „pigmentów” nie były dla mnie wystarczającą wskazówką, że był to pakiet, który może być poprzedzony „python-” przez menedżera pakietów.

Speeddymon
źródło
2
2 komentarze: 1) Dzięki za ulepszenie. 2) Zwroty takie jak „wybrana najlepsza odpowiedź” nie są świetne; to może się zmienić (w rzeczywistości, jeśli jest to lepsza odpowiedź niż ta, ten post może stać się najwyższą odpowiedzią, w którym to momencie będzie po prostu mylący. Może po prostu powiedz „rozwinąć na inną odpowiedź” lub „odpowiedź kapitana”)
cpast
2

Możesz rozważyć użycie mostnarzędzia, które jest przyjazną dla kolorów alternatywą dla lessi more.

Onlyjob
źródło
czy możesz nam pokazać jeden przykład? Próbowałem tutaj, a wydruk był czarno-biały.
danilo
Twój wkład powinien zawierać kolory. Najpierw wytwarza się colorised próbkę (na przykład ccze -A </var/log/dpkg.log, ls -1 --color /var/log), a następnie ją doprowadzić do most: ls -1 --color /var/log | most.
Onlyjob
Tak, użyłem: git status | less --color,git status | most --color
Danilo
Używałem
Upewnij się, że twoje polecenie produkuje kolory przed potokowaniem do lesslub innym. Upewnij się, że emulator terminala może wyświetlać kolory. Sprawdź TERMzmienną środowiskową. Przeczytaj więcej na unix.stackexchange.com/questions/148/... Jeśli to możliwe, użyj nowoczesnej dystrybucji GNU + Linux, takiej jak Debian . Użyj wyszukiwarki (np. Duckduckgo.com startpage.com ), aby znaleźć odpowiedzi. Pamiętaj, że komentarze nie są do dyskusji.
Onlyjob
2

Skrócone z mojego pełnego postu na blogu o poprawie mniejszego doświadczenia: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

Aby uzyskać kolorowe strony podręczne, dodaj do .bashrclub .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

Podświetlanie składni, używanie istniejącego narzędzia lesspipe.shdo obsługi go zamiast pisania własnego: https://github.com/wofr06/lesspipe

xuhdev
źródło
1

Znalazłem to proste eleganckie rozwiązanie. Nie musisz instalować niczego dodatkowego, ponieważ jest już domyślnie dostępny na większości komputerów. Ponieważ vimjest instalowany domyślnie na większości komputerów, zawiera makro, które ma działać vimpodobnieless

Niektóre opcje korzystania z niego to utworzenie aliasu: alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

lub utwórz link symboliczny: ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Więc po prostu biegnij vless myfile.py

Mam większość informacji tutaj

Wavesailor
źródło
1
Mam alias lesser='/usr/share/vim/vim80/macros/less.sh'w ~/bash_aliases(w Ubuntu 18.04). Można używać skrótów, takich jak f do przodu, b do tyłu, d do połowy, u do połowy, q quit itp.
Daniel
0

Najbardziej intuicyjne i proste rozwiązanie dla mnie polegało pygmentize
na dodaniu poniższych wierszy do pliku .bashrc

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

Jeśli nie możesz zadzwonić pygmentize, po prostu zainstaluj jak

pip install pygments

ps. Plik pygmentizewykonywalny będzie siedział /usr/local/bin/w twoim /home/username/.virtualenv/venvname/bin/lub gdzieś.

David Jung
źródło
-2

Żadne z nich nie działało dla mnie po wyjęciu z pudełka i wymyśliłem prosty sposób, aby to zadziałało, więc pomyślałem, że będę mógł je udostępnić.

Wystarczy użyć tmux, który pozwala uzyskać dostęp i przewijać większą historię i doskonale zachowuje kolory.

math0ne
źródło
1
Czy tmux nie zezwala na wiele terminali z jednego ekranu, jak to zmienia wyświetlanie kolorów mniej?
Xen2050,
@ Xen2050 Myślę, że to fajne obejście, chociaż ta odpowiedź nie wyjaśnia, jak wejść w tryb przewijania (Ctrl-b + [)
siikamiika
-2

Tak długo, jak tekst wyjściowy będzie zawierał znaki sterujące kolorem, less -Rwystarczy.

Leonardo Raele
źródło
Tak mówi inna odpowiedź (sprzed 9 lat). Odpowiedzi, które duplikują inne odpowiedzi, nie są przydatne.
Kamil Maciorowski
To prawda, ale ta odpowiedź nie mówi wprost, że działa tylko na plikach zbudowanych ze znaków sterujących kolorem.
Leonardo Raele