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


415

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


5
Это кажется связанным: superuser.com/questions/36022/less-and-grep-color - это помогает?
Джоник

7
Название этого вопроса очень вводит в заблуждение. Многие люди, попадающие на эту страницу, ожидают решения проблемы окраски, которую вы получите, отправив команду с цветным выводом less: цвета потеряны. (Ответы на этот «вопрос трубопровода» включают less -Rи unbufferт. Д.) Но фактический вопрос касается открытия файла ! - Неоднозначность заключается, прежде всего, в названии вопроса, но даже помимо этого, ИМХО, вопрос все еще слишком широк: «прочитать файл» может относиться к любому файлу (возможно, к простому тексту). (ну, «получить содержимое в цветах», вероятно, относится к подсветке синтаксиса.)
myrdd

Мне нужно исправить себя, только 3 (или 4) из 14 ответов не содержат актуального вопроса ОП: ответы ChristopheD , Puneet и Onlyjob ; и, возможно, JBBR . Тем не менее, два из этих ответов являются частью трех с наибольшим количеством голосов.
Myrdd

@myrdd "подсветка синтаксиса" является соответствующим термином ... (он спрашивает об отображении цветов, а не о добавлении цветов?) также less -Rбудет работать с файлами, напримерls --color=always > /tmp/file && less -R /tmp/file
Герт ван ден Берг

1
@myrdd Возможно, имеет смысл закрыть вопрос как «неясно, что задают», поскольку вопросы, задающие любой из этих двух вопросов, вероятно, будут помечены как дубликаты этого ... (И ответы на любой из этих двух могут быть опровергнуты основанный на том, как избиратель интерпретирует это ...) (Мой вариант использования был файлом журнала, в котором (досадно) есть цветовые escape-коды)
Герт ван ден Берг

Ответы:


149

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

Установите pygmentsс вашим менеджером пакетов или pip (возможно, называется 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";;

    *)
        if grep -q "#\!/bin/bash" "$1" 2> /dev/null; 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.

Вы поняли идею. Это, конечно, может быть улучшено и дальше, принимая больше расширений или анализируя shebang для других интерпретаторов, чем bash. Посмотрите некоторые другие ответы для этого.

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


6
Если вы хотите раскрасить файлы исходного кода, вам также нужно сделать исполняемый файл ~ / .lessfilter запуском chmod u+x ~/.lessfilter. Вам также нужно установить pygmentize ( pygments.org/download ).
Сергей Белозоров

Может кто-нибудь подтвердить, что это работает, поскольку это не имеет никакого эффекта для меня, когда я выполняю такую ​​команду, какls -l | less
puk

7
@puk вы можете сделать что-то вроде ls --color=always -l | less -R. Очевидно, что много печатать, но вы можете псевдоним это что-то вроде ll. Это если вы не хотите использовать какие-либо дополнительные библиотеки.
PhilT

2
добавил комментарий @ SergiyByelozyorov в ответ.
Андрыбак

2
Мое редактирование было отклонено, поэтому я, скорее всего, опубликую его как комментарий: не проверяйте коды выхода команд косвенно. Вы можете использовать if grep -q "#\!/bin/bash" "$1"( -qподавляет стандартный вывод). Вы можете перенаправить стандартную ошибку с 2>/dev/null.
Том Фенек

503

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

less -R

от man less:

-r или же --raw-control-chars

Вызывает отображение «сырых» управляющих символов. (...)

-R или же --RAW-CONTROL-CHARS

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


17
Это полезно, когда сам файл содержит управляющие коды, которые необходимо отобразить.
Нитродист

1
Раньше я знал о less -r, но при поиске в файле с помощью «/» появлялись неправильные строки. -R, кажется, делает лучшую работу. Спасибо за чаевые.
Амос Шапира

54
Следует отметить, что большинство программ используют isatty(2)системный вызов для проверки того, является ли их стандартный вывод терминалом, и обычно отключают цветной вывод, если это не так. Для любой трубы меньше, isattyвернет 0. Чтобы проверить, работает ли это, попробуйтеecho -e '\x1b[32;1mtest\x1b[m' | less -r
mic_e

11
Этот ответ не превосходит в самом деле что-то тестировать.
Майкл Вольф

18
Вы также можете напечатать, -Rкогда вы уже открыли, lessчтобы достичь этого.
Scz

138

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

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

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

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

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


6
Здорово спасибо Кроме того, что мне нужно использовать -Rв качестве опции less, а также.
naught101

10
Я считаю, grep -Rчто для определения рекурсивного поиска. less -Rнеобходимо для того, lessчтобы правильно выплевывать цвета обратно. grep --color=always [grep cmds] | less -Rу меня работает на OS X 10.7.3!
Стивен Лу

@ naught101 @ Steven Lu Отредактировано, хотя кажется, что некоторым людям может и не понадобиться использовать less -R(по словам автора оригинального поста, в любом случае).
Jtpereyda

2
Есть ли какой-нибудь способ сообщить команде grep только команду pipe less -R и затем выполнить раскраску? Таким образом, нам не нужно ставить --color = всегда и меньше -R все время.
A-letubby

1
Это, безусловно, самый простой рабочий ответ. Спасибо!
Дэнни Стейпл

37

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

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

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


Как насчет производительности больших файлов? Подсветка синтаксиса Vim, как известно, работает медленно на больших файлах.
Pihentagy

Я не знаю, каково ваше значение для «большого», но открытие файла ~ 10000 строк происходит мгновенно, включая поиск внутри.
Риккардо Галли

1
Я проголосовал (я не знал об этом view), но другой недостаток в том, что j / k / up / down не прокручивается мгновенно, так как есть курсор.
Тайлер Кольер

7
Обратите внимание, что вам, возможно, придется добавить, view -когда трубопровод
user45909

6
vimэто редактор, который загружает весь файл в память, тогда lessкак это пейджер, загружающий файл только частично в память. Вы узнаете разницу с огромными файлами.
Sjas

16

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

less -R

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

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

unbuffer <command> | less -R

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

unbuffer pacman -Ss firefox | less -R

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

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

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

pygmentize someSource.cpp | less -R

2
Использовать unbufferв Ubuntu,sudo apt install expect
wisbucky

Этот ответ нуждается в большем количестве голосов.
Томас Диньян

Я пытался передать вывод dmesg для проверки ошибок загрузки, но цвета не работали, если я не использовал unbuffer, что выводило меня из себя: unbuffer dmesg | less -Rработает как положено.
pbhj

15

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

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

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

4
Краткий и эффективный. Я предпочитаю определять псевдоним, потому что иногда чем меньше, тем лучше. Итак: alias lesc = 'LESS = "- R" LESSOPEN = "| pygmentize -g% s" less "
Tiago

9

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

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

pygmentize file.cpp | less

или же

pygmentize file.cpp | more

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

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

view file.cpp

или, альтернативно, посмотрите ответ Чурнда.


5

Это еще один ответ на основе фрагментов , с несколькими существенными улучшениями:

  • не ломается lesspipeили не lessfileфильтрует
  • работает с несколькими входами в less
  • правильно анализирует тип сценария из заголовка shebang
  • работает для всех 434 типов файлов, которые могут быть скомпонованы с помощью Pygments
  • цветовая схема параметризована как переменная окружения

Установите Pygments и 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 "$@"; 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

Единственным недостатком этого подхода является то, что Pygments - это программа на Python, и поэтому при первом использовании во время сеанса оболочки возникает задержка «холодного запуска». Последующие вызовы намного быстрее.
Джо Кодер

Приятно! Действительно всеобъемлющий.
Дарио Сеидл

4

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

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

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

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

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


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-».


2
2 комментария: 1) Спасибо за улучшение. 2) фразы типа «проголосовал за лучший ответ» не очень хороши; это может измениться (на самом деле, если это лучше, чем этот ответ, этот пост может стать главным ответом, и в этот момент он будет просто сбивать с толку. Может быть, просто сказать «расширить на другой ответ» или «ответ капитана»?
cpast

2

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


Можете ли вы показать нам один пример? Я попробовал здесь, и выход был черно-белым.
Данило

Ваш вход должен содержать цвета. Сначала производят colorised образец (например ccze -A </var/log/dpkg.log, ls -1 --color /var/log) , то это трубы к most: ls -1 --color /var/log | most.
Onlyjob

да, я использовал: git status | less --color,git status | most --color
Данило

Я использовал больше, больше, меньше, и все инструменты показывают черно-белое
Данило

Убедитесь, что ваша команда выдает цвета, прежде чем отправлять по трубам lessили другим. Убедитесь, что ваш эмулятор терминала может выводить цвета. Проверьте TERMпеременную среды. Подробнее читайте в unix.stackexchange.com/questions/148/… По возможности используйте современный дистрибутив GNU + Linux, такой как Debian . Используйте поисковую систему (например duckduckgo.com startpage.com ) , чтобы найти ответы. Помните, что комментарии не для обсуждения.
Onlyjob

2

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

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


1

Я нашел это простое элегантное решение. Вам не нужно устанавливать ничего лишнего, так как он уже есть по умолчанию на большинстве машин. Как 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

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


1
Я alias lesser='/usr/share/vim/vim80/macros/less.sh'в ~/bash_aliases(в Ubuntu 18.04). Можно использовать такие сочетания клавиш, как f вперед, b назад, d половина вниз, u половина вверх, q выход и т. Д.
Даниил

0

Самым интуитивным и простым решением для меня было использование pygmentize
добавления строк ниже к .bashrc

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

Если вы не можете позвонить pygmentize, просто установите как

pip install pygments

пс. pygmentizeИсполняемый двоичный файл будет сидеть /usr/local/bin/или в вашем /home/username/.virtualenv/venvname/bin/или где - нибудь.


-2

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

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


1
Разве tmux не позволяет использовать несколько терминалов с одного экрана, как он меняет отображение цветов меньше?
Xen2050

@ Xen2050 Я думаю, что это хороший обходной путь, хотя этот ответ не объясняет, как войти в режим прокрутки (Ctrl-b + [)
siikamiika

-2

Пока выходной текст имеет символы управления цветом, less -Rбудет делать.


Это то, что говорит другой ответ (от 9 лет назад). Ответы, дублирующие другие ответы, бесполезны.
Камиль Мачоровский

Справедливо, но этот ответ не делает явным то, что он работает только с файлами, созданными с помощью символов управления цветом.
Леонардо Раеле
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.