Синтаксическая подсветка/раскрашивание кота
Есть ли способ раскрасить вывод cat
, как это делает grep
.
Для grep
в большинстве консолей отображается цветной вывод, выделяющий искомые ключевые слова. В противном случае вы можете принудительно вызвать его, вызвав grep --color
Есть ли общий способ для цветной печати любой программы в соответствии с вашим личным выбором.
Из того, что я понимаю, сама программа не несет ответственности за цвета. Это оболочка.
Я использую оболочку по умолчанию в FreeBSD 5.2.1, которая выглядит так, как никогда не видел цветов с эпохи.
Ответы
Ответ 1
cat
с подсветкой синтаксиса просто выходит за рамки. cat
для этого не предназначен.
Если вы просто хотите, чтобы весь контент какого-либо файла был окрашен каким-то образом (с тем же цветом для всего файла), вы можете использовать escape-последовательности терминала для управления цветом.
Здесь образец script, который выберет цвет на основе типа файла (вы можете использовать что-то вроде этого вместо прямого вызова 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
для печати двоичных файлов, и вы можете улучшить логику, чтобы она соответствовала вашим потребностям.
Ответ 2
Я бы рекомендовал pygmentize
из пакета python python-pygments
. Вы можете определить следующий удобный псевдоним (если вы не используете ccat
из пакета ccrypt).
alias ccat='pygmentize -g'
И если вы хотите номера строк:
alias ccat='pygmentize -g -O style=colorful,linenos=1'
Ответ 3
Опции:
Пигментирование это хорошо. У меня есть псевдоним:
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
В бою:
Я прилагаю снимки для обоих внизу для хорошего сравнения подсветки
Вот pygmentize
в действии:
и это highlight
:
Ответ 4
Инструмент, который вы ищете, вероятно, supercat (здесь быстрое введение, опубликованное журналом Linux).
Я понимаю, что этот ответ запоздал и что он не полностью соответствует требованиям OP. Поэтому я добавляю его только для справки (это может быть полезно для других людей, желающих раскрасить вывод текстового файла).
Ответ 5
vimcat
является однофайльным (shell script) и работает хорошо:
http://www.vim.org/scripts/script.php?script_id=4325
Последнее обновление с декабря 2013 года. Подсказка: вы можете принудительно распознать тип файла с помощью vimcat -c "set ft=<type>"
.
Ответ 6
С конца апреля 2018 года:
Bat - клон cat (1) с подсветкой синтаксиса и интеграцией Git.
Проект представляет собой клон кошки с поддержкой цветов и настроек, написанных на Rust. Он предлагает не только подсветку синтаксиса несколькими темами, но и интеграцию с Git. Как описано в документации:
Летучая мышь пытается достичь следующих целей:
- Обеспечить красивую, расширенную подсветку синтаксиса
- Интеграция с Git, чтобы показать изменения файла
- Быть заменой (POSIX) кошки
- Предложите удобный интерфейс командной строки
Излишне говорить, что это намного быстрее, чем пигментирование и не задыхается при работе с большими файлами.
Исходный код и бинарные выпуски + инструкции по установке можно найти в репозитории Github, а также для сравнения с альтернативными программами.
Ответ 7
Есть раскрашенная версия cat - ccat. Получите его с https://github.com/jingweno/ccat/.
Установка на Linux/Windows/macOS
Это отдельный исполняемый файл, поэтому для его установки вы можете распаковать бинарную версию для своей ОС с https://github.com/jingweno/ccat/releases и скопировать бинарный файл ccat, например, в /usr/local/bin
.
Если вы хотите избежать двоичных файлов или если для вашей платформы нет двоичных файлов (например, raspberry pi и т.д.), apt install golang
вы можете поочередно скомпилировать из исходного кода, если у вас есть рабочая среда разработки go
(apt install golang
на основе Debian или brew install golang
на mac)
go get -u github.com/jingweno/ccat
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
.
Ответ 8
source-highlight
Возможно, можно найти интересный source-highlight
выпущенный под GNU: пакет отличается от highlight
.
Выдержка из apt-cache show source-highlight
:
Описание-ru: конвертировать исходный код в выделенный синтаксис документ.
Эта программа, заданная исходным файлом, создает документ с синтаксисом подсветка.
Поддерживает подсветку синтаксиса для более чем 100 форматов файлов.... Для вывода поддерживаются следующие форматы: HTML, XHTML, LaTeX, Texinfo, цветовых экранов 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 для получения полного списка). Если не указано, исходный язык будет угадан из расширения файла.
- Ланг-лист перечислить весь поддерживаемый язык и файл определения связанного языка
Ответ 9
Лучший способ и самый простой способ сделать это, если у вас есть vim на вашем компьютере, - это использовать vimcat
, который поставляется с программой vimpager
.
- Установите vimpage с
git clone git://github.com/rkitover/vimpager
cd vimpager
sudo make install
-
Запустите vimcat:
vimcat index.html
Ответ 10
Из того, что я понимаю, сам бинар не несет ответственности за цвета. Это оболочка.
Неправильно. Терминал просто интерпретирует цветовые коды, которые выводятся на терминал. В зависимости от его возможностей он может игнорировать некоторые коды форматирования/окраски.
Из man-страницы это не похоже, что кошка поддерживает окраску своего вывода. Даже если бы он поддерживал раскраску, такую как grep, что она должна цветная в текстовом файле? Синтаксис подчеркивает необходимость знания базового языка, который не входит в сферу применения простой утилиты, такой как cat.
Вы можете попробовать более мощные редакторы, такие как vim, emacs, gedit и т.д. на платформе unix, если посмотреть, что выделенный код является вашей целью.
Ответ 11
В OSX просто выполните brew install ccat
.
https://github.com/jingweno/ccat. Подобно cat, но отображает контент с подсветкой синтаксиса. Встроенный Go.
Ответ 12
Старый вопрос, просто отвечающий за запись, чтобы предоставить решение, которое я использовал. Возможно, это немного хаки (возможно, не оригинальное намерение параметра), но:
alias cgrep = 'grep -C 9000'
кошка все | cgrep 'snozzberries'
Забастовкa >
.. grep -C N
предоставит N строк контекста выше и ниже найденного элемента. Если он больше, чем вход, весь вход включен. В этом случае мы просто убеждаемся, что это больше, чем любой типичный вывод терминала, который мы хотим просмотреть вручную, что обычно является тем, что вы хотите сделать, если выделяете.
РЕДАКТИРОВАТЬ: Однако это решение, предложенное Бени Чернявским-Паскиным, является превосходным - оно соответствует (и подчеркивает) либо слово, которое вы ищете, либо начало строки (не выделяется). Конечный результат - именно то, что вы хотите.
cat whatever | egrep 'snozzberries|$'
Это новое лучшее решение, которое я видел для этой проблемы, благодаря Бени.
Ответ 13
В этом вопросе инструмент 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 - чтение со стандартного ввода, его цвет и запись на стандартный вывод
Ответ 14
bat точно это делает и может быть псевдонимом cat alias cat='bat'
Ответ 15
Я написал небольшой скрипт для выполнения раскрашивания с использованием pygmentize
.
colorize_via_pygmentize() {
if [ ! -x "$(which pygmentize)" ]; then
echo "package \'Pygments\' is not installed!"
return -1
fi
if [ $# -eq 0 ]; then
pygmentize -g [email protected]
fi
for FNAME in [email protected]
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.
Ответ 16
Если вы просто хотите, чтобы один лайнер установил вывод cat
на заданный цвет, вы можете добавить
alias cat="echo -en 'code' | cat - "
на ваш ~/.$(basename $SHELL)rc
Вот суть с цветовыми кодами: https://gist.github.com/chrisopedia/8754917
Мне нравится '\e[1;93m'
, который является высокоинтенсивным желтым. Это выглядит так:
Ответ 17
просто используйте 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>' "[email protected]"
nano -v
также может быть альтернативой.