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
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.
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”. (...)
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ąć.
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.
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).
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:
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:
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.
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 variableseval"$(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/bashfor 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;;esacdone
exit 0
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:
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.
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:
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.
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.
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.
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
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
less
: kolory zostaną utracone. (Odpowiedzi na tej „kwestii rurociągu” obejmowaćless -R
,unbuffer
itd.), 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).less -R
będzie również działać na plikach, np.ls --color=always > /tmp/file && less -R /tmp/file
Odpowiedzi:
Możesz wykorzystać moc pygmentacji za pomocą mniej - automatycznie! (Nie trzeba ręcznie wykonywać rur).
Zainstaluj za
pygments
pomocą menedżera pakietów lub pipa (ewentualnie nazywanegopython-pygments
) lub pobierz tutaj http://pygments.org/download/ .Napisz plik
~/.lessfilter
W swoim
.bashrc
dodaniuMusisz także
~/.lessfilter
uruchomić plik wykonywalnyTestowane 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.
źródło
chmod u+x ~/.lessfilter
. Musisz także mieć zainstalowany program pygmentize ( pygments.org/download ).ls -l | less
ls --color=always -l | less -R
. Oczywiście dużo do wpisania, ale możesz to zrobić alias do czegoś takiegoll
. To znaczy, jeśli nie chcesz używać żadnych dodatkowych bibliotek.if grep -q "#\!/bin/bash" "$1"
(-q
pomija standardowe wyjście). Możesz przekierować standardowy błąd za pomocą2>/dev/null
.Spróbuj wykonać następujące czynności:
z
man less
:źródło
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,isatty
zwróci 0. Aby sprawdzić, czy to działa, spróbujecho -e '\x1b[32;1mtest\x1b[m' | less -r
-R
gdy już otworzyłeś,less
aby to osiągnąć.Odpowiedź otrzymałem w innym poście: Less i Grep: uzyskiwanie kolorowych wyników podczas używania potoku od grep do less
Ostrzeżenie: nie podawaj
--color=always
jako aliasu, czasem coś psuje. Dlatego istnieje--color=auto
opcja.źródło
-R
jako opcjiless
.grep -R
służy do wyszukiwania rekurencyjnego.less -R
jest konieczne,less
aby poprawnie wypluć kolory z powrotem.grep --color=always [grep cmds] | less -R
działa dla mnie na OS X 10.7.3!less -R
( przynajmniej według autora oryginalnego postu).Użyj
view
zamiastless
. Otwiera plikvim
w 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żywaszvim
).źródło
view
), ale kolejną wadą jest to, że j / k / góra / dół nie przewijają się natychmiast, ponieważ jest kursor.view -
podczas instalacjivim
to edytor, który ładuje cały plik do pamięci, natomiastless
jest pageriem, ładującym plik tylko częściowo do pamięci. Różnicę poznasz dzięki dużym plikom.Aby powiedzieć mniej, aby pokazywać kolory, wywołaj to z -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
:Przykład użycia Pacmana
unbuffer
Polecenie jest zwykle częścią pakietuexpect
(Arch Linux, Debian / Ubuntu) lubexpect-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 wymagaunbuffer
. Najłatwiejsze połączenie:źródło
unbuffer
na Ubuntu,sudo apt install expect
unbuffer dmesg | less -R
działa zgodnie z oczekiwaniami.pygmentize
obsługuje-g
opcję automatycznego odgadnięcia używanego leksykonu, co jest przydatne w przypadku plików odczytywanychSTDIN
bez sprawdzania jakiegokolwiek typu rozszerzenia.Korzystając z tego, musisz ustawić tylko 2 następujące eksporty
.bashrc
bez żadnych dodatkowych skryptów:źródło
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
lub
Wokół są inne wyróżnienia.
To jest dość szybkie. Jeśli nie masz nic przeciwko odpalaniu,
vim
istnieje tryb tylko do odczytu, który może podświetlić składnię, jeśli ją maszvim
.lub alternatywnie zobacz odpowiedź churnda.
źródło
Jest to kolejna odpowiedź oparta na pigmencie , z kilkoma istotnymi ulepszeniami:
lesspipe
ani nielessfile
filtrujeless
Zainstaluj Pygments i Gawk
Ustaw zmienne środowiskowe
Sprawdź, czy
lesspipe
lublessfile
jest już włączony:Jeśli nie widzisz żadnego programu, do którego się tam odwołujesz, upewnij się, że
lesspipe
jest zainstalowany (większość dystrybucji zawiera go).Dodaj następujące elementy do
~/.bashrc
:Jeśli nie chcesz
lesspipe
, zamieńeval
instrukcję na:Stwórz
~/.lessfilter
Dodaj następujący kod i spraw, aby plik był wykonywalny:
chmod u+x ~/.lessfilter
źródło
Użyj podświetlenia źródła GNU ; możesz go zainstalować,
apt
jeś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 :źródło
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:
Nadal będziesz musiał dodać dwie zmienne do .bashrc:
I nadal musisz uczynić plik .lessfilter wykonywalnym:
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.
źródło
Możesz rozważyć użycie
most
narzędzia, które jest przyjazną dla kolorów alternatywą dlaless
imore
.źródło
ccze -A </var/log/dpkg.log
,ls -1 --color /var/log
), a następnie ją doprowadzić domost
:ls -1 --color /var/log | most
.git status | less --color
,git status | most --color
less
lub innym. Upewnij się, że emulator terminala może wyświetlać kolory. SprawdźTERM
zmienną ś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.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
.bashrc
lub.zshrc
:Podświetlanie składni, używanie istniejącego narzędzia
lesspipe.sh
do obsługi go zamiast pisania własnego: https://github.com/wofr06/lesspipeźródło
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ż
vim
jest instalowany domyślnie na większości komputerów, zawiera makro, które ma działaćvim
podobnieless
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
źródło
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.Najbardziej intuicyjne i proste rozwiązanie dla mnie polegało
pygmentize
na dodaniu poniższych wierszy do pliku .bashrc
Jeśli nie możesz zadzwonić
pygmentize
, po prostu zainstaluj jakps. Plik
pygmentize
wykonywalny będzie siedział/usr/local/bin/
w twoim/home/username/.virtualenv/venvname/bin/
lub gdzieś.źródło
Ż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.
źródło
Tak długo, jak tekst wyjściowy będzie zawierał znaki sterujące kolorem,
less -R
wystarczy.źródło