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

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

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

Ответы (17)

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

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

less -R

из man less:

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

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

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

Like -r, но только “цветные” экранирующие последовательности ANSI выводятся в “сыром” виде. (…)

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

(обновление до 2020 года)

Быстрее использовать less -R ссылка. https://superuser.com/a/117842/34893

  • *

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

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

    *)
        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

Tested на Debian.

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

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы не показывать цвета, называйте его -R:

less -R

К сожалению, некоторые программы обнаруживают, что их stdout не является терминалом, и отключают цвета - например, pacman (Arch Linux package manager). В этих случаях можно использовать 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
```.
15
15
15
2013-03-12 07:17:20 +0000

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

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

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

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

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

pygmentize file.cpp | less

или

Есть и другие подсветки вокруг.

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

pygmentize file.cpp | more

или, в качестве альтернативы, посмотреть ответ churnd.

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

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

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

Install Pygments and Gawk

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

Set Environment Variables

Проверяет, включена ли уже lesspipe или lessfile:

echo $LESSOPEN

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

~/.bashrc:

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

# 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'

Создайте ~/.lessfilter

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

&00001

4
4
4
2014-05-25 19:52:43 +0000

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

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

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

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

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

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

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

Для подсветки синтаксиса, используя существующую мощную .bashrc для работы с ней, вместо того, чтобы писать свою собственную, добавьте следующее к вашей .zshrc или lesspipe.sh:

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

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

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

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

And you’ll still need to make .lessfilter executable:

$ chmod 700 ~/.lessfilter

Также я хотел добавить, что в debian пакет pygments называется python-pygments. Поначалу мне было трудно найти его, потому что очевидная ошибка в написании “pigменты” как “pygments” не была достаточным намеком для меня, что это пакет, который может быть префиксован менеджером пакетов с помощью “python-”.

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

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

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

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

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

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

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

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

В случае, если вы не смогли позвонить pygmentize, просто установите как

pip install pygments

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

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

Альтернативой меньше/больше, которая работает с цветами вне коробки, является летучая мышь. Вы можете установить его с большинством менеджеров пакетов, использующих его в качестве пейджера, а также как замену кошке. https://github.com/sharkdp/bat

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

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

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

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

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

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

6
10
5
37
2