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

Kiedy czytam plik z komendą &007 lub &007, jak mogę uzyskać zawartość w kolorach?

Kiedy czytam plik w Linuksie z komendą less lub more, jak mogę uzyskać zawartość w kolorach?

Odpowiedzi (17)

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

Spróbuj:

less -R

od man less:

-r lub --raw-control-chars

Powoduje wyświetlanie “surowych” znaków kontrolnych. (…)

-R lub --RAW-CONTROL-CHARS

Like -r, but only ANSI “color” escape sequences are output in “raw” form. (…)

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

(aktualizacja w 2020 r.)

Szybszym sposobem byłoby użycie less -R ref. https://superuser.com/a/117842/34893

  • *

Możesz wykorzystać moc pygmentacji z mniejszą ilością - automatycznie! (Nie ma potrzeby ręcznego pipe'a.)

Zainstaluj pygments za pomocą swojego menedżera pakietów lub pip'a (możliwe, że nazywa się python-pygments) lub uzyskaj go 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 .bashrc dodaj

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

Musisz także uczynić ~/.lessfilter wykonywalnym przez uruchomienie

chmod u+x ~/.lessfilter

Przetestowany na Debianie.

Wpadasz na ten pomysł. Oczywiście można go jeszcze bardziej ulepszyć, akceptując więcej rozszerzeń lub parsowanie shebang dla innych interpretatorów niż bash. Zobacz kilka innych odpowiedzi na to pytanie.

Pomysł pochodzi ze starego wpisu na blogu twórców Pigmentów , ale oryginalny wpis już nie istnieje.

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

Dostałem odpowiedź w innym poście: [ Less i Grep. ] Uzyskanie kolorowych wyników przy użyciu rurki od grepu do less ](https://superuser.com/questions/36022/less-and-grep-color)

Kiedy po prostu uruchomisz grep --color, oznacza to, że grep --color=auto wykrywa czy wyjście jest terminalem, a jeśli tak to włącza kolory. Jednakże, gdy wykryje rurkę, wyłącza ona kolorowanie. Następująca komenda:

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

Zawsze włączy kolorowanie i zastąpi automatyczne wykrywanie, a podświetlenie kolorów otrzymasz w mniej.

Ostrzeżenie: Nie umieszczaj --color=always jako aliasu, czasem coś zepsuje. Dlatego właśnie istnieje opcja --color=auto.

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

Użyj view zamiast less. Otwiera on plik z vim w trybie tylko do odczytu.

Jest to praktycznie kolorowy less: pager, na którym można szukać za pomocą / (i więcej). Jedyną wadą jest to, że nie możesz wyjść za pomocą q, ale potrzebujesz :q

Ponadto, otrzymujesz to samo zabarwienie co vim (ponieważ w rzeczywistości używasz vim).

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

Aby mniej powiedzieć, aby pokazać kolory, zadzwoń do -R:

less -R

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

W tych przypadkach możliwe jest użycie unbuffer:

unbuffer <command> | less -R

Przykład użycia pakera

unbuffer pacman -Ss firefox | less -R

Polecenie unbuffer jest zazwyczaj częścią pakietu expect (Arch Linux, Debian/Ubuntu) lub expect-dev (starsze wersje Debiana/Ubuntu).

Aby odpowiedzieć na pytanie o kompletność:

Jak inni już odpowiedzieli, pygmentize jest świetny do kolorowania kodu źródłowego. Nie wymaga unbuffer. Najłatwiejsze połączenie:

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

pygmentize obsługuje opcję -g umożliwiającą automatyczne odgadnięcie leksera, który jest użyteczny dla plików odczytywanych z STDIN bez sprawdzania typu rozszerzenia.

Używając tego, wystarczy ustawić w .bashrc tylko następujące 2 eksportu bez żadnych dodatkowych skryptów:

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

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

Jeśli chcesz kolorowanie składni dla kodu źródłowego, potrzebujesz kolorowania kodu źródłowego. Czasami używam pygmentize jak ten

pygmentize file.cpp | less

lub

pygmentize file.cpp | more

Wokół są inne kolorowanki.

To jest dość szybkie. If you don’t mind fireing up vim there is a read-only mode that can give you syntax highlighting if you have it in vim.

view file.cpp

or alternatively see churnd’s answer.

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

Jest to kolejna odpowiedź oparta na pygmentach , z kilkoma znaczącymi usprawnieniami:

  • nie psuje lesspipe lub lessfile filtrów
  • działa z wieloma wejściami do less
  • poprawnie parsuje typ skryptu z nagłówka shebang
  • działa dla wszystkich 434 typów plików lexable by Pygments
  • schemat kolorów jest parametryzowany jako zmienna środowiskowa

Install Pygments and Gawk

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

Set Environment Variables

Sprawdź czy lesspipe lub lessfile jest już włączone:

echo $LESSOPEN

If you don’t see either program referenced there, ensure that lesspipe is installed (most distros come with it).

Add the following to ~/.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'

If you don’t want lesspipe, replace the eval statement with:

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

Create ~/.lessfilter

Add the following code and make the file executable: 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

Użyj GNU Source-highlight ; możesz zainstalować go z apt, jeśli go masz, lub w inny sposób zainstalować go ze źródła. Następnie ustaw “preprocesor wejścia” dla less, z pomocą dokumentacji Source-highligh dla ustawienie z less :

To zostało zasugerowane przez Konstantine'a Serebriany. Skrypt src-hilite-lesspipe.sh zostanie zainstalowany razem z source-highligh'em. 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, gdy używasz less do przeglądania pliku, jeśli jest to plik źródłowy obsługiwany przez source-highlight, zostanie on automatycznie podświetlony.

Xavier-Emmanuel Vincent ostatnio dostarczył 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, a w przypadku, gdy używa wariantu 256. Skrypt jest nazywany source-highlight-esc.sh i będzie instalowany razem z innymi binariami.

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

z mojego pełnego wpisu na blogu o poprawieniu mniejszego doświadczenia: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/ _

Dla kolorowych stron, dodaj do .bashrc lub .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

Dla podświetlania składni, używając istniejącego potężnego lesspipe.sh aby obsłużyć go zamiast pisać własne: https://github.com/wofr06/lesspipe

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

Aby rozwinąć inną odpowiedź, możesz sprawić, że będzie ona działała dla większości, jeśli nie dla wszystkich twoich skryptów, które nie mają rozszerzeń, zmieniając plik .lessfilter na około:

#!/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ć te dwie zmienne do . bashrc:

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

I nadal będziesz musiał uczynić .lessfilter wykonywalnym:

$ chmod 700 ~/.lessfilter

Również chciałem dodać, że pod debianem pakiet pygments nazywa się python-pygments. Na początku miałam trudności z jego zlokalizowaniem, ponieważ oczywista błędna pisownia “pigmentów” jako “pygmentów” nie była dla mnie wystarczającą wskazówką, że jest to pakiet, który może być poprzedzony “python-” przez menedżera pakietów.

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

Możesz rozważyć użycie narzędzia most, które jest przyjazną dla kolorów alternatywą dla less i more.

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

Znalazłem to proste, eleganckie rozwiązanie. Nie musisz instalować niczego dodatkowego, ponieważ jest to już domyślnie zainstalowane na większości maszyn. Ponieważ vim jest domyślnie zainstalowany na większości maszyn, zawiera makro do uruchomienia vim jak less

Niektóre z opcji, aby go użyć to stworzenie aliasu:alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

lub stworzenie symbolicznego linku:ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Następnie wystarczy uruchomić vless myfile.py

Mam większość informacji tutaj

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

Najbardziej intuicyjnym i prostym rozwiązaniem było dla mnie użycie pygmentize poprzez dodanie poniższych linii do .bashrc

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

W przypadku, gdy nie mogłeś zadzwonić do pygmentize, po prostu zainstaluj jak

pip install pygments

ps. pygmentize wykonywalny binarny będzie siedział w /usr/local/bin/ lub w Twoim /home/username/.virtualenv/venvname/bin/ lub gdzieś.

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

Alternatywą dla mniej/więcej, która działa z kolorami z pudełka, jest nietoperz. Możesz go zainstalować z większością menedżerów pakietów, używaj go jako pagera, jak również jako zamiennika kota. https://github.com/sharkdp/bat

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

Tak długo jak tekst wyjściowy ma znaki kontroli koloru, less -R to zrobi.

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

Żaden z nich nie działał dla mnie bez zarzutu i wymyśliłem prosty sposób, aby to zrobić, więc pomyślałem, że się nim podzielę.

Po prostu użyj tmuxa, który umożliwia dostęp i przewijanie większej historii i doskonale zachowuje kolory.