Когда я читаю файл с &007 или &007, как я могу получить содержимое в цветах?
Когда я читаю файл в Linux с помощью команды less
или more
, как я могу получить содержимое в цветах?
Когда я читаю файл в Linux с помощью команды less
или more
, как я могу получить содержимое в цветах?
Попробуйте следующее:
less -R
из man less
:
-r
или--raw-control-chars
вызывает отображение “сырых” управляющих символов. (…)
-R
или--RAW-CONTROL-CHARS
Like
-r
, но только “цветные” экранирующие последовательности ANSI выводятся в “сыром” виде. (…)
(обновление до 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 , но оригинального сообщения больше не существует.
Я получил ответ в другом посте: Меньше и Греп: Получение цветных результатов при использовании трубы от grep до less
Когда вы просто запускаете
grep --color
, это подразумеваетgrep --color=auto
, который определяет, является ли вывод терминалом, и если да, то включает ли он цвета. Однако, когда она обнаруживает трубу, она отключает цветопередачу. Следующая команда:grep --color=always "search string" * | less -R
Будет всегда включать раскраску и отменять автоматическое определение, и вы получите подсветку цвета меньше.
Предупреждение: Не ставьте --color=always
в качестве псевдонима, он иногда ломает вещи. Вот почему есть опция --color=auto
.
Используйте view
вместо less
. Он открывает файл с vim
в режиме только для чтения.
Это практически цветной less
: пейджер, на котором можно осуществлять поиск с помощью / (и более). Единственным недостатком является то, что вы не можете выйти с помощью q, но вам нужна :q
Также, вы получаете ту же раскраску, что и vim
(так как на самом деле вы используете vim
).
Чтобы не показывать цвета, называйте его -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
```.
pygmentize
поддерживает опцию -g
для автоматического угадывания лексера, который полезен для файлов, читаемых из STDIN
без проверки любого типа расширения.
Используя это, вам нужно только установить следующие 2 экспорта в вашем .bashrc
без каких-либо дополнительных скриптов:
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
Вы не сказали, что этот цвет должен означать, например, какие цвета должны быть для текстового файла?
Если вам нужна подсветка синтаксиса для исходного кода, вам нужен подсветка исходного кода. Я иногда использую pygmentize как этот
pygmentize file.cpp | less
или
Есть и другие подсветки вокруг.
Это довольно быстро. Если вы не возражаете против запуска vim
, есть режим только для чтения, который может дать вам подсветку синтаксиса, если у вас есть в vim
.
pygmentize file.cpp | more
или, в качестве альтернативы, посмотреть ответ churnd.
Это еще один ответ, основанный на пигментах , с несколькими основными улучшениями:
lesspipe
или lessfile
фильтров less
sudo apt-get install python-pygments python3-pygments gawk
Проверяет, включена ли уже 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
Используйте 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 и будет установлен вместе с другими исполняемыми файлами.
Я получил подтверждение из моего полного поста в блоге об уменьшении опыта: 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
Чтобы расширить ответ на другой вопрос, вы можете заставить его работать для большинства, если не для всех ваших сценариев, которые не имеют расширений, изменив файл .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-”.
Я нашел это простое элегантное решение. Вам не нужно устанавливать ничего лишнего, так как оно уже есть по умолчанию на большинстве машин. Так как 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
Я получил большую часть информации здесь
Самым интуитивным и простым решением для меня было использование pygmentize
путем добавления строк ниже в .bashrc
export LESS='-R'
export LESSOPEN='|pygmentize -g %s'
В случае, если вы не смогли позвонить pygmentize
, просто установите как
pip install pygments
ps. Исполняемый двоичный файл pygmentize
будет располагаться в /usr/local/bin/
или в вашей /home/username/.virtualenv/venvname/bin/
или где-то еще.
Альтернативой меньше/больше, которая работает с цветами вне коробки, является летучая мышь. Вы можете установить его с большинством менеджеров пакетов, использующих его в качестве пейджера, а также как замену кошке. https://github.com/sharkdp/bat
До тех пор, пока выходной текст имеет цветные символы управления, less -R
будет делать.