Подсветка синтаксиса / раскраска кота
Есть ли способ раскрасить вывод cat
, путь grep
делает.
За grep
, в большинстве консолей отображает цветной вывод, выделяющий искомые ключевые слова. В противном случае вы можете вызвать его, позвонив grep --color
Существует ли универсальный способ покрасить вывод любой программы по вашему личному выбору.
Из того, что я понимаю, сама программа не отвечает за цвета. Это оболочка.
Я использую оболочку по умолчанию во FreeBSD 5.2.1, которая выглядит так, как будто никогда не видела цветов с эпохи.
20 ответов
cat
с подсветкой синтаксиса просто выходит за рамки. cat
не предназначен для этого. Если вы просто хотите, чтобы все содержимое какого-либо файла было каким-то образом окрашено (с тем же цветом для всего файла), вы можете использовать управляющие последовательности терминала для управления цветом.
Вот пример сценария, который будет выбирать цвет в зависимости от типа файла (вы можете использовать что-то вроде этого вместо вызова cat
непосредственно):
#!/bin/bash
fileType="$(file "$1" | grep -o 'text')"
if [ "$fileType" == 'text' ]; then
echo -en "\033[1m"
else
echo -en "\033[31m"
fi
cat $1
echo -en "\033[0m"
Выше (на терминале, который поддерживает эти escape-последовательности), любой текстовый файл будет напечатан как "жирный", а любой двоичный файл - красным. Ты можешь использовать strings
вместо cat
для печати бинарных файлов, и вы можете улучшить логику, чтобы сделать его в соответствии с вашими потребностями.
Я бы порекомендовал pygmentize
из пакета python python-pygments
, Вы можете определить следующий удобный псевдоним (если вы не используете ccat
из пакета ccrypt).
alias ccat='pygmentize -g'
И если вы хотите номера строк:
alias ccat='pygmentize -g -O style=colorful,linenos=1'
Опции:
Пигментирование это хорошо. У меня есть псевдоним:
alias c='pygmentize -g'
но выделить еще одну широко доступную альтернативу
alias cats='highlight -O ansi --force'
Монтаж:
Возможно, вам придется установить pygments
с помощью:
sudo pip install pygments
sudo easy_install Pygments #for Mac user
и для highlight
пакет, который легко доступен во всех дистрибутивах
sudo apt-get install highlight
sudo yum install highlight
- Репозиторий Bitbucket: https://bitbucket.org/birkenfeld/pygments-main
- Зеркало GitHub: https://github.com/sglyon/pygments
В бою:
Я прилагаю снимки для обоих внизу для хорошего сравнения подсветки
Вот pygmentize
В бою:
а это highlight
:
С конца апреля 2018 года:
Bat - Cat(1) клон с подсветкой синтаксиса и интеграцией Git.
Проект представляет собой клон кошки с поддержкой цветов и настроек, написанных на Rust. Он предлагает не только подсветку синтаксиса несколькими темами, но и интеграцию с Git. Как описано в документации:
Летучая мышь пытается достичь следующих целей:
- Обеспечить красивую, расширенную подсветку синтаксиса
- Интеграция с Git, чтобы показать изменения файла
- Быть заменой (POSIX) кошки
- Предложите удобный интерфейс командной строки
Излишне говорить, что он намного быстрее, чем пигментирует, и не задыхается при работе с большими файлами.
Исходный код и бинарные выпуски + инструкции по установке можно найти в репозитории Github, а также для сравнения с альтернативными программами.
Есть раскрашенная версия cat - ccat. Получите его с https://github.com/jingweno/ccat/.
Установка на Linux/Windows/macOS
Это отдельный автономный исполняемый файл, поэтому для его установки вы можете распаковать бинарную версию для своей ОС с https://github.com/jingweno/ccat/releases и скопировать бинарный файл ccat, например, в /usr/local/bin
,
Если вы хотите избежать двоичных файлов или если для вашей платформы нет бинарных файлов (например, raspberry pi и т. Д.), То вы можете поочередно скомпилировать из исходного кода, если у вас есть работающий go
среда разработки (apt install golang
на основанных на Debian Linux или brew install golang
на Mac):
go get -u github.com/jingweno/ccat
ccat
двоичный файл будет создан под вашим$GOPATH/bin
,
Установка на Mac с помощью homebrew
brew install ccat
Псевдоним для cat
Заменить штатный cat
с ccat
добавить в ~/.bashrc
:
alias cat="ccat $*"
alias cat0="/bin/cat $*" # for cases when you need plain `cat`
ccat
реализован в Go, так что это собственный двоичный файл, который работает намного быстрее, чем решения на основе Python, такие как pygments, модуль, стоящий за pygmentize
; Я не видел заметной разницы в скорости cat
а также ccat
,
vimcat
является однофайловым (shell-скрипт) и работает хорошо:
http://www.vim.org/scripts/script.php?script_id=4325
Последнее обновление от декабря 2013 года. Подсказка: вы можете принудительно распознать тип файла vimcat -c "set ft=<type>"
,
Инструмент, который вы ищете, вероятно, суперкат (вот краткое введение, опубликованное Linux Journal).
Я понимаю, что этот ответ запоздал и что он не полностью отвечает требованиям ОП. Поэтому я добавляю его только для справки (это может быть полезно для других людей, ищущих, как раскрасить вывод текстового файла).
Лучший способ и самый простой способ сделать это, если у вас есть Vim на вашем компьютере, это использовать vimcat
который идет с vimpager
программа.
- Установить Vimpage с
git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
Запустите vimcat:
vimcat index.html
source-highlight
Может быть, можно найти интересное source-highlight
выпущен под GNU: пакет, отличный от highlight
,
Выдержка из apt-cache show source-highlight
:
Description-ru: преобразовать исходный код в выделенный синтаксис документа.
Эта программа, учитывая исходный файл, создает документ с подсветкой синтаксиса.
Он поддерживает подсветку синтаксиса для более чем 100 форматов файлов...
Для вывода поддерживаются следующие форматы: HTML, XHTML, LaTeX, Texinfo, цветовые escape-последовательности ANSI и DocBook
Я сделал несколько псевдонимов (Cat и PCat, см. Ниже), и это их вывод
Вы можете установить на Debian на основе
sudo apt-get install source-highlight
и добавьте его как псевдоним, например, в вашем .bash_aliases
с чем-то вроде строки ниже.
alias Cat='source-highlight --out-format=esc -o STDOUT -i'
Cat myfile.c # or myfile.xml ...
Или вы можете сделать аналогичный псевдоним (без -i
в конце, чтобы иметь возможность трубу в)
alias PCat='source-highlight --out-format=esc -o STDOUT '
tail myfile.sh | PCat # Note the absence of the `-i`
Среди вариантов, которые можно прочитать man source-highlight
-s
подчеркивает, что можно выделить или принудительно выделить подсветку из командной строки или оставить программе эту обязанность:
-s, --src-lang = STRING исходный язык (используйте --lang-list, чтобы получить полный список). Если не указан, исходный язык будет угадан по расширению файла.
--lang-list список всех поддерживаемых языков и связанных файлов определения языка
летучая мышь точно делает это и может быть псевдоним кошке alias cat='bat'
Из того, что я понимаю, сам двоичный файл не отвечает за цвета. Это оболочка.
Это не правильно. Терминал просто интерпретирует цветовые коды, которые выводятся на терминал. В зависимости от его возможностей он может игнорировать определенные коды форматирования / раскраски.
С man-страницы не похоже, что кошка поддерживает раскраску своего вывода. Даже если бы он поддерживал раскраску, например, grep, какой должен быть цвет в текстовом файле? Подсветка синтаксиса требует знания базового языка, который не входит в простую утилиту, такую как cat.
Вы можете попробовать более мощные редакторы, такие как vim, emacs, gedit и т. Д. На платформе Unix, если ваша цель - увидеть выделенный код.
На OSX просто делай brew install ccat
,
https://github.com/jingweno/ccat. Как кошка, но отображает содержимое с подсветкой синтаксиса. Встроенный в Go.
В этом вопросе https://superuser.com/questions/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordin grcat
/ grc
инструмент был рекомендован в качестве альтернативы supercat
,
Человек из GRC и из grcat
; это часть пакета grc ( источники):
grc - интерфейс для универсального колоризатора grcat (1)
grcat - читать из стандартного ввода, раскрашивать его и записывать в стандартный вывод
Старый вопрос, просто отвечаю за запись, чтобы найти решение, которое я в итоге использовал. Возможно, это немного странно (возможно, не оригинальное назначение параметра), но:
псевдоним cgrep='grep -C 9000'
кот что угодно | cgrep 'snozzberries'
..grep -C N
предоставит N строк контекста выше и ниже найденного элемента. Если он больше, чем вход, весь вход включается. В этом случае мы просто убедимся, что он больше, чем любой типичный вывод терминала, который мы хотим рассмотреть вручную, что обычно и требуется при выделении.
РЕДАКТИРОВАТЬ: Однако, это решение, предложенное ниже Бени Чернявский-Паскин, является превосходным - оно соответствует (и выделяет) либо слово, которое вы ищете, или начало строки (не выделяется цветом). Чистый результат - именно то, что вы хотите.
cat whatever | egrep 'snozzberries|$'
Это новое лучшее решение, которое я видел для этой проблемы, спасибо Бени.
Именно для этого я написал небольшую программу на основе Rust. Он названhighlighter
и можно найти в следующем репо:
https://codeberg.org/mehrad/хайлайтер
По сути, вы просто передаете в нее вывод предыдущей команды и говорите ей раскрасить ее в соответствии с вашими предпочтениями. Например:
locale | highlighter --blue="=" --red="_U.*" --yellow "NAME" --green="_ME.*"
Я предлагаю создать для него псевдоним, если вы считаете, что имя слишком длинное. Я бы предпочел более длинное, но описательное имя, чем короткое двусмысленное.
Я написал небольшой скрипт для выполнения колоризации с использованием pygmentize
,
colorize_via_pygmentize() {
if [ ! -x "$(which pygmentize)" ]; then
echo "package \'Pygments\' is not installed!"
return -1
fi
if [ $# -eq 0 ]; then
pygmentize -g $@
fi
for FNAME in $@
do
filename=$(basename "$FNAME")
lexer=`pygmentize -N \"$filename\"`
if [ "Z$lexer" != "Ztext" ]; then
pygmentize -l $lexer "$FNAME"
else
pygmentize -g "$FNAME"
fi
done
}
А затем сделайте псевдоним для сценария. alias cat=colorize_via_pygmentize
, Также не забудьте сохранить это в ~ /.bashrc.
Просто используйте vim и этот файл vimrc.
один лайнер:
vim -c '1' -c 'set cmdheight=1' -c 'set readonly' -c 'set nomodifiable' -c 'syntax enable' -c 'set guioptions=aiMr' -c 'nmap q :q!<CR>' -c 'nmap <Up> <C-Y>' -c 'nmap <Down> <C-E>' -c 'nmap ^V <C-F><C-G>' "$@"
nano -v
также может быть альтернативой.
Поместите в свой ~/.bashrc
function ccat() { docker run -it -v "$(pwd)":/workdir -w /workdir whalebrew/pygmentize $1; }
тогда
ccat filename
Whalebrew создает псевдонимы для образов Docker, чтобы вы могли запускать их, как если бы они были собственными командами. Это как Homebrew, но с образами Docker.
Если вы просто хотите установить один вкладыш cat
вывод на данный цвет, вы можете добавить
alias cat="echo -en 'code' | cat - "
на ваш ~/.$(basename $SHELL)rc
Вот суть с цветовыми кодами: https://gist.github.com/chrisopedia/8754917
мне нравится '\e[1;93m'
, который имеет высокую интенсивность желтого цвета. Это выглядит так:
Это очень старый вопрос, но я все равно на него наткнулся. Для полноты картины задается вопрос "есть ли способ получить
cat
чтобы раскрасить его вывод? ". Да, для вывода с кодировкой ansi вы можете добавить эти экспорты в свой .bashrc:
# colorful less output
export LESS_TERMCAP_mb=$'\e[1;32m'
export LESS_TERMCAP_md=$'\e[1;32m'
export LESS_TERMCAP_me=$'\e[0m'
export LESS_TERMCAP_se=$'\e[0m'
export LESS_TERMCAP_so=$'\e[01;33m'
export LESS_TERMCAP_ue=$'\e[0m'
export LESS_TERMCAP_us=$'\e[1;4;31m'
Это раскрасит вывод текста с кодировкой ansi, например, terraform plan:
Однако это не то же самое, что
bat
, который может лучше анализировать json, показывает номера строк и, как правило, более удобен для пользователей.