Получать цвета меньше или больше

Когда я читаю файл в Linux с помощью команды less или more, как я могу получить содержимое в цветах?

339 голосов | спросил flow 9 MarpmTue, 09 Mar 2010 13:44:32 +03002010-03-09T13:44:32+03:0001 2010, 13:44:32

15 ответов


123

Вы можете использовать мощность pygmentize с меньшим - автоматически! (Не нужно трубить вручную.)

Установите pygments с вашим менеджером пакетов или пиком (возможно, называется python-pygments)) или получите его здесь http://pygments.org/download/.

Запишите файл ~/.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"
        ;;
    *)
        grep "#\!/bin/bash" "$1" > /dev/null
        if [ "$?" -eq "0" ]; then
            pygmentize -f 256 -l sh "$1"
        else
            exit 1
        fi
esac

exit 0

В .bashrc добавить

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

Кроме того, вы должны сделать исполняемый файл ~/.lessfilter, запустив

chmod u+x ~/.lessfilter

Протестировано на Debian.

Идея исходила из старого сообщения в блоге из создателей Pyigs , но исходный пост не существует больше.

ответил Dario Seidl 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 20 Sep 2011 07:29:09 +0400 2011, 07:29:09
397

Попробуйте следующее:

less -R

из man less:

  

-r или --raw-control-chars

     

Вызывает «сырые» контрольные символы для отображения. (...)

     

-R или --RAW-CONTROL-CHARS

     

Подобно -r, но только «ANSI» «цветовые» escape-последовательности выводятся в «сырой» форме. (...)

ответил ChristopheD 9 MarpmTue, 09 Mar 2010 13:48:33 +03002010-03-09T13:48:33+03:0001 2010, 13:48:33
114

Я получил ответ в другом сообщении: Less and Grep: получение цветных результатов при использовании канала из grep до менее

  

Когда вы просто запускаете grep --color   подразумевает grep --color=auto, который   определяет, является ли выход   терминал, и если да, значит, цвета.   Однако, когда он обнаруживает трубу,   отключает окраску. Следующие   Команда:

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

Всегда будет включать окраску и   переопределить автоматическое обнаружение и   вы получите цветную подсветку в   меньше.

Предупреждение. Не помещайте --color=always в качестве псевдонима, иногда это прерывает. Вот почему есть опция --color=auto.

ответил Puneet 27 AMpWed, 27 Apr 2011 08:19:53 +040019Wednesday 2011, 08:19:53
30

Используйте view вместо less. Он открывает файл с помощью vim в режиме readonly.

Это практически цветной less: пейджер, где вы можете искать с помощью / (и более). Единственный недостаток заключается в том, что вы не можете выйти с q , но вам нужно :q

Кроме того, вы получаете ту же окраску, что и vim (поскольку вы фактически используете vim).

ответил Riccardo Galli 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 24 Sep 2013 13:50:04 +0400 2013, 13:50:04
12
ответил churnd 9 MarpmTue, 09 Mar 2010 16:25:36 +03002010-03-09T16:25:36+03:0004 2010, 16:25:36
10

pygmentize поддерживает параметр -g, чтобы автоматически угадывать используемый лексер, который полезен для файлов, считанных из STDIN, без проверки какого-либо расширения тип.

Используя это, вам нужно установить только два экспорта в .bashrc без каких-либо дополнительных скриптов:

export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
ответил Tuxdude 12 MaramTue, 12 Mar 2013 11:17:20 +04002013-03-12T11:17:20+04:0011 2013, 11:17:20
9

Вы не сказали, что должен означать этот цвет, например. каковы должны быть цвета для текстового файла?

Если вы хотите выделить синтаксис для исходного кода, вам понадобится подсветка исходного кода. Я иногда использую pygmentize , как этот

pygmentize file.cpp | less

или

pygmentize file.cpp | more

Есть другие маркеры вокруг.

Это довольно быстро. Если вы не возражаете против запуска vim, существует режим только для чтения, который может дать вам подсветку синтаксиса, если у вас есть это в vim.

view file.cpp

или, альтернативно, см. ответ churnd.

ответил Benjamin Bannier 9 MarpmTue, 09 Mar 2010 16:30:02 +03002010-03-09T16:30:02+03:0004 2010, 16:30:02
6

Чтобы показать меньше, чтобы показать цвета, вызовите его с помощью -R:

less -R

К сожалению, некоторые программы обнаруживают, что их stdout не является терминалом и отключает цвета - например, pacman (диспетчер пакетов Arch Linux).

В этих случаях его можно использовать unbuffer:

unbuffer <command> | less -R

Пример использования pacman

unbuffer pacman -Ss firefox | less -R

Команда unbuffer обычно является частью пакета expect-dev (Debian /Ubuntu) или expect (Arch Linux).

Чтобы ответить на вопрос о полноте:

Как уже говорили другие, pygmentize отлично подходит для раскраски исходного кода. Для этого не требуется unbuffer. Самый простой вызов:

pygmentize someSource.cpp | less -R
ответил jbbr 8 +03002016-10-08T13:37:29+03:00312016bEurope/MoscowSat, 08 Oct 2016 13:37:29 +0300 2016, 13:37:29
3

Используйте источник GNU Source-highlight ; вы можете установить его с помощью apt, если он у вас есть, или иначе установить его из источника. Затем настройте «входной препроцессор» на меньшее, с помощью документации Source-highligh для настройка с меньшим :

  

Это было предложено Константином Серебриани. Сценарий src-hilite -lesspipe.sh будет установлен вместе с источником-подсветкой. Вы можете использовать следующие переменные среды:

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

Таким образом, когда вы используете меньше, чтобы просматривать файл, если это исходный файл, обработанный источником-подсветкой, он будет автоматически подсвечиваться.

     

Xavier-Emmanuel Vincent недавно предоставил альтернативную версию цветовой схемы ANSI, esc256.style: некоторые терминалы могут обрабатывать 256 цветов. Xavier также предоставил сценарий, который проверяет, сколько цветов может обрабатывать ваш терминал, и в случае использования варианта 256. Сценарий называется source -highlight-esc.sh, и он будет установлен вместе с другими двоичными файлами.

ответил arsaKasra 25 Maypm14 2014, 23:52:43
3

Чтобы расширить другой ответ, вы можете заставить его работать для большинства, если не всех ваших скриптов, у которых нет расширений, просто изменив файл .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

Вам все равно нужно добавить две переменные в .bashrc:

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

И вам все равно нужно сделать исполняемый файл .lessfilter:

$ chmod 700 ~/.lessfilter

Также я хотел добавить, что под debian пакет pygments называется python-pygments. Сначала мне не удалось найти его, потому что очевидного написания «пигментов» как «пигментов» было недостаточно для подсказки, что это пакет, который может быть префикс «python-» менеджером пакетов.

ответил Speeddymon 28 FebruaryEurope/MoscowbThu, 28 Feb 2013 02:45:25 +0400000000amThu, 28 Feb 2013 02:45:25 +040013 2013, 02:45:25
2

Вы можете использовать утилиту most, которая удобна для использования с цветом для less и more.

ответил Onlyjob 22 AM00000040000005831 2013, 04:34:58
2

Это еще один pygments , основанный на нескольких важных улучшениях:

  • не разбивает lesspipe или lessfile фильтры
  • работает с несколькими входами less
  • правильно разбирает тип скрипта из заголовка shebang
  • работает для всех 434 типов файлов lexable by Pygments.
  • Цветовая схема
  • параметризуется как переменная среды

Установить Pyigs и Gawk

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

Установить переменные среды

Проверьте, включен ли lesspipe или lessfile:

 echo $LESSOPEN

Если вы не видите ни одну из указанных там программ, убедитесь, что lesspipe (большинство дистрибутивов поставляется с ним).

Добавьте следующее в ~/.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'

Если вы не хотите lesspipe, замените оператор eval:

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

Создать ~/.lessfilter

Добавьте следующий код и сделайте исполняемый файл: chmod u+x ~/.lessfilter

 #!/bin/bash
for path in "[email protected]"; 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 29 Maypm17 2017, 12:21:34
1

Снято с моего полного сообщения в блоге об улучшении опыта: https://www.topbug.net/blog/2016/09/27/make-gnu-less-more-powerful/

Для ярких manpages добавьте следующее к вашему .bashrc или .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

Для подсветки синтаксиса, используя существующий мощный lesspipe.sh, чтобы обрабатывать его, вместо того чтобы писать свои собственные: https://github.com/wofr06/lesspipe

ответил xuhdev 4 +03002016-10-04T05:51:08+03:00312016bEurope/MoscowTue, 04 Oct 2016 05:51:08 +0300 2016, 05:51:08
0

Я нашел это простое элегантное решение. Вам не нужно устанавливать что-либо дополнительное, поскольку оно уже существует по умолчанию на большинстве машин. Поскольку vim установлен по умолчанию на большинстве машин, он включает макрос для запуска vim, например less

Некоторые из вариантов его использования - создать псевдоним: alias vless='vim -u /usr/share/vim/vim74/macros/less.vim'

или создать символическую ссылку: ln -s /usr/share/vim/vim74/macros/less.sh ~/bin/vless

Затем вы просто запустите vless myfile.py

Я получил большую часть информации здесь

ответил Wavesailor 31 Maypm18 2018, 12:59:32
-2

Ни один из них не работал из коробки для меня, и я понял, как легко сделать эту работу, поэтому я думал, что поделюсь.

Просто используйте tmux, который позволяет вам просматривать и прокручивать более крупную историю и прекрасно сохранять цвета.

ответил math0ne 25 Jpm1000000pmThu, 25 Jan 2018 21:35:55 +030018 2018, 21:35:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132