Синтаксическая подсветка/раскрашивание кота

Есть ли способ раскрасить вывод 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'

Syntax highlighted cat output using pygmentize

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

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

и это highlight: Highlight highlighting on python file

Ответ 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, см. ниже), и это их вывод

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

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

Ответ 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', который является высокоинтенсивным желтым. Это выглядит так: enter image description here

Ответ 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 также может быть альтернативой.