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

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

В бою:

Я прилагаю снимки для обоих внизу для хорошего сравнения подсветки

Вот pygmentize В бою:Подсветка пигментирования в файле Python

а это highlight:Выделите выделение в файле Python

С конца апреля 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 программа.

  1. Установить Vimpage с git clone git://github.com/rkitover/vimpager cd vimpager sudo make install
  2. Запустите 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, показывает номера строк и, как правило, более удобен для пользователей.

Другие вопросы по тегам