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


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


342
2018-03-09 10:44


происхождения


Это похоже на: superuser.com/questions/36022/less-and-grep-color - Помогает ли это? - Jonik


ответы:


Вы можете использовать мощь 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.

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


124
2017-09-20 03:29



Если вы хотите иметь раскраску файлов исходного кода, вам также необходимо сделать исполняемый файл ~ / .lessfilter, выполнив chmod u+x ~/.lessfilter, Вы также должны иметь pygmentize (pygments.org/download) установлен. - Sergiy Byelozyorov
Может ли кто-нибудь подтвердить, что это работает, поскольку это не влияет на меня, когда я выполняю команду вроде ls -l | less - puk
Любая идея, как связать это с lessoken. он устанавливается с помощью этой формы: LESSOPEN = "lessopen.sh% s" - Gregory
@puk вы можете сделать что-то вроде ls --color=always -l | less -R, Очевидно, что нужно много набирать, но вы могли бы использовать его как нечто вроде ll, То есть, если вы не хотите использовать какие-либо дополнительные библиотеки. - PhilT
добавил комментарий Сергея Белосторова в ответ. - andrybak


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

less -R

из man less:

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

Заставляет выводить «необработанные» управляющие символы. (...)

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

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


405
2018-03-09 10:48



Это полезно, когда сам файл содержит коды эвакуации, которые необходимо будет отображать. - Nitrodist
Раньше я знал о менее -r, но поиск в файле с помощью «/» продолжал воспитывать неправильные строки. -R, похоже, делает лучшую работу. Спасибо за совет. - Amos Shapira
Следует отметить, что большинство программ используют isatty(2)syscall, чтобы проверить, является ли их стандартный вывод терминалом, и обычно отключает раскрашенный вывод, если это не так. Для любой трубы меньше, isatty вернет 0. Чтобы проверить, работает ли это, попробуйте echo -e '\x1b[32;1mtest\x1b[m' | less -r - mic_e
Этот ответ не преуспевает в том, что на самом деле что-то тестирует. - Michael Wolf
Вы также можете ввести -R когда вы уже открылись less для достижения этой цели. - Scz


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

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

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

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

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


114
2018-04-27 04:19



Приятно, спасибо. За исключением того, что мне нужно использовать -R как вариант less, также. - naught101
я верю grep -R для указания рекурсивного поиска. less -R необходимо для less правильно выплюнуть цвета. grep --color=always [grep cmds] | less -R работает для меня на OS X 10.7.3! - Steven Lu
@ naught101 @Steven Lu Отредактировано, хотя кажется, что некоторым людям может не понадобиться использовать less -R (по словам автора оригинального сообщения, в любом случае). - jtpereyda
Есть ли все-таки, чтобы grep знал, что команда pipe меньше -R, а затем просто окрашивает? Таким образом, нам не нужно ставить --color = всегда и меньше -R все время. - A-letubby
Это, безусловно, самый простой рабочий ответ. Благодаря! - Danny Staple


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

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

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


30
2017-09-24 09:50



Как насчет производительности больших файлов? Подсветка синтаксиса Vim знает, что медленная работа над огромными файлами. - pihentagy
Я не знаю, какова ваша ценность для «большого», но открытие файла с размером 10000 строк происходит мгновенно, поиск внутри включен. - Riccardo Galli
Я поддержал (я не знал о view), но другой недостаток заключается в том, что j / k / up / down не мгновенно прокручивается, так как есть курсор. - Tyler Collier
Обратите внимание, что вам может потребоваться добавить view - когда трубопроводы - user45909
vim является редактором, который загружает полный файл в память, тогда как less это пейджер, который загружает файл только частично в память. Вы узнаете разницу с огромными файлами. - sjas


Использовать VIM в качестве подсветки синтаксиса,


12
2018-03-09 13:25



нет, я попросил больше (или меньше), а не vim, спасибо в любом случае - flow
Очевидно, подсветка синтаксиса по умолчанию не построена более или менее, поэтому обходной путь использует псевдоним для одного из макросов VIM. Он ведет себя более или менее как более или менее. :) - churnd
Если вы предпочитаете использовать vim вместо эмуляции vim меньше, вы можете просто сделать ... | vim - читать с stdin или ... | vim -R - только для чтения (во избежание «Без записи после последнего изменения» при выходе). Псевдоним для быстрого использования: alias r='vim -R -' тогда ... | r - bain


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

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

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

11
2018-03-12 07:17



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


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

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

pygmentize file.cpp | less

или

pygmentize file.cpp | more

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

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

view file.cpp

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


9
2018-03-09 13:30





Чтобы сказать меньше, чтобы показать цвета, вызовите его с помощью -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

7
2017-10-08 10:37





Использовать Исходный источник GNU; вы можете установить его с помощью 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, и он будет установлен вместе с другими двоичными файлами.


3
2018-05-25 19:52





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


3
2018-02-27 22:45



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


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


2
2017-08-22 00:34