it-swarm.com.ru

Подсветка синтаксиса/раскраска кота

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

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

Из того, что я понимаю, сама программа не отвечает за цвета. Это Shell. 

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

162
Lelouch Lamperouge

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

23
Costi Ciudatu

Я бы порекомендовал 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'
362
buergi

Опции:

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

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

100
Shubham Chaudhary

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

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

31
mfriedman

vimcat однофайловый (скрипт Shell) и хорошо работает:

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

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

29
Soergener

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

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

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

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

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

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

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

20
dangom

Существует цветная версия 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.

19
ccpizza

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

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

    vimcat index.html

11
Amaynut

source-highlight

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

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

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

alias PCat='source-highlight --out-format=esc -o STDOUT '
tail myfile.sh | PCat     # Note the absence of the `-i`

Среди параметров, которые можно прочитать из man source-highlight, -s подчеркивает, что можно выбрать или force подсветку из командной строки или оставить программе эту обязанность: 

-s, --src-lang = STRING исходный язык (используйте --lang-list для получения полного списка). Если не указан, исходный язык будет угадан по расширению файла.

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

11
Hastur

Из того, что я понимаю, сам двоичный файл не отвечает за цвета. Это Shell.

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

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

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

8
Ashwinee K Jha

На OSX просто сделайте brew install ccat.

https://github.com/jingweno/ccat . Как кошка, но отображает содержимое с подсветкой синтаксиса. Встроенный в Go.

7
joost

Старый вопрос, просто отвечаю за запись, чтобы найти решение, которое я в итоге использовал. Возможно, это немного странно (возможно, не оригинальное намерение параметра), но:

alias cgrep = 'grep -C 9000'

кот что угодно | cgrep 'snozzberries' </ strike>

..grep -C N предоставит N строк контекста выше и ниже найденного элемента. Если он больше, чем вход, весь вход включается. В этом случае мы просто убедимся, что он больше, чем любой типичный вывод терминала, который мы хотим рассмотреть вручную, что обычно и требуется при выделении.

Правка: Однако, это решение, предложенное ниже Бени Чернявским-Паскиным, является превосходным - оно соответствует (и выделяет) либо искомому Слову, либо началу строки (не выделяется цветом). Чистый результат - именно то, что вы хотите.

cat whatever | egrep 'snozzberries|$'

Это новое лучшее решение, которое я видел для этой проблемы, спасибо Бени.

3
Mr. B

bat точно делает это и может быть псевдоним cat alias cat='bat'

2
Sailendra Pinupolu

В этом вопросе был рекомендован инструмент https://superuser.com/questions/602294/is-there-colorizer-utility-that-can-take-command-output-and-colorize-it-accordingrcat/grc как альтернатива supercat .

Человек из grc и из grcat ; это часть пакета grc ( sources ):

grc - интерфейс для универсального колоризатора grcat (1)

grcat - читать из стандартного ввода, раскрашивать его и записывать в стандартный вывод

2
osgx

Я написал небольшой скрипт для выполнения раскрашивания с использованием 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 .

1
Rohit Sehgal

Если вы просто хотите, чтобы один вкладыш установил вывод cat для данного цвета, вы можете добавить

alias cat="echo -en 'code' | cat - "

на ваше ~/.$(basename $Shell)rc

Вот Gist с цветовыми кодами: https://Gist.github.com/chrisopedia/8754917

Мне нравится '\e[1;93m', который является высокоинтенсивным желтым. Это выглядит так:  enter image description here

0
okovko