Подсветка синтаксиса / раскраска кота - PullRequest
176 голосов
/ 21 октября 2011

Есть ли способ окрасить вывод cat, как это делает grep.

Для grep, в большинстве консолей он отображает цветной вывод, выделяющий искомые ключевые слова.В противном случае вы можете принудительно вызвать его, позвонив по номеру grep --color. Существует ли общий способ окрасить вывод любой программы в соответствии с вашим личным выбором.

Исходя из того, что я понимаю, сама программа не отвечает за цвета.Это оболочка.

Я использую оболочку по умолчанию во FreeBSD 5.2.1, которая выглядит так, как будто никогда не видела цветов с эпохи.

Ответы [ 17 ]

372 голосов
/ 10 февраля 2013

Я бы порекомендовал pygmentize из пакета python python-pygments.Вы можете определить следующий удобный псевдоним (если только вы не используете ccat из пакета ccrypt).

alias ccat='pygmentize -g'

Syntax highlighted cat output using pygmentize

И если вам нужны номера строк:

alias ccat='pygmentize -g -O style=colorful,linenos=1'
104 голосов
/ 16 декабря 2014

Параметры:

пигментирует это хорошо. У меня есть псевдоним:

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 в действии: Pygmentize highlighting on python file

а это highlight: Highlight highlighting on python file

31 голосов
/ 06 апреля 2012

Инструмент, который вы ищете, вероятно, supercat (вот краткое введение , опубликованное в Linux Journal).

Я понимаю, что этот ответ запоздал и что он не полностью соответствует требованиям ОП.Поэтому я добавляю это только для справки (это может быть полезно для других людей, ищущих, как раскрасить вывод текстового файла).

29 голосов
/ 07 мая 2018

С конца апреля 2018 года:

Bat - Клон cat (1) с подсветкой синтаксиса и интеграцией Git.

Проект представляет собой клон кошки с поддержкой цветов и настроек, написанных на Rust. Он предлагает не только подсветку синтаксиса несколькими темами, но и интеграцию с Git. Как описано в документации:

летучая мышь пытается достичь следующих целей :

  • Обеспечивает красивую, расширенную подсветку синтаксиса
  • Интеграция с Git для отображения изменений файла
  • Быть заменой (POSIX) cat
  • Предлагает удобный интерфейс командной строки

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

Исходный код и бинарные выпуски + Инструкции по установке можно найти в репозитории Github, а также сравнение с альтернативными программами .

29 голосов
/ 29 декабря 2013

vimcat является однофайловым (сценарий оболочки) и работает хорошо:

http://www.vim.org/scripts/script.php?script_id=4325

Последнее обновление с декабря 2013 г. Подсказка: вы можете принудительно распознать тип файла с помощью vimcat -c "set ft=<type>".

23 голосов
/ 22 октября 2011

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

20 голосов
/ 06 мая 2015

Есть раскрашенная версия 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 в Linux на основе Debian или 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.

11 голосов
/ 12 августа 2015

Лучший и самый простой способ сделать это, если у вас есть vim на вашем компьютере, это использовать vimcat, который поставляется с программой vimpager.

  1. Установить Vimpage с git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
  2. Запустите vimcat:

    vimcat index.html

11 голосов
/ 08 мая 2015

source-highlight

Возможно, можно найти интересную source-highlight , выпущенную под GNU : пакет, отличный от highlight.

Выдержка из apt-cache show source-highlight:

Description-ru: преобразовать исходный код в выделенный синтаксис документа.
Эта программа, учитывая исходный файл, создает документ с синтаксисом подсветка.
Поддерживает подсветку синтаксиса для более чем 100 форматов файлов ...
Для вывода поддерживаются следующие форматы: HTML, XHTML, LaTeX, Texinfo, последовательности выхода цвета ANSI и DocBook

Я сделал несколько псевдонимов (Cat и PCat, см. Ниже), и это их вывод

Screen Example

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

- Ланг-лист список всех поддерживаемых языков и связанных файлов определения языка

8 голосов
/ 22 октября 2011

Насколько я понимаю, сам двоичный файл не отвечает за цвета.Это оболочка.

Это не правильно.Терминал просто интерпретирует цветовые коды, которые выводятся на терминал.В зависимости от его возможностей он может игнорировать определенные коды форматирования / раскраски.

С man-страницы кажется, что cat не поддерживает раскраску своего вывода.Даже если он должен поддерживать раскраску, например, grep, какой должен быть цвет в текстовом файле?Подсветка синтаксиса требует знания базового языка, который не входит в сферу простых утилит, таких как cat.

Вы можете попробовать более мощные редакторы, такие как vim, emacs, gedit и т. Д. На платформе Unix, если ваша цель - увидеть выделенный код.

...