Есть ли варианты, чтобы кошка выводила цвета?

19

Если я хочу вывести файл исходного кода C с подсветкой синтаксиса, могу ли я использовать cat?

Jichao
источник
вы могли бы просто использовать bat ostechnix.com/...
Ridderhoff

Ответы:

18

Пакет GNU, source-highlight , похоже, делает свое дело (хотя и не использует cat - как указывает Джон Т, это не возможно для cat специально). Он доступен через apt-get в Ubuntu и требует библиотеки регулярных выражений Boost. Проверьте менеджер пакетов, чтобы увидеть, доступны ли оба, иначе вы можете получить их из Интернета. Я думаю, что на странице GNU, на которую вы ссылались ранее, есть ссылка на Boost.

После установки я создал новый скрипт в моем пути с именем ccat . Сценарий выглядит так:

#!/bin/bash
src-hilite-lesspipe.sh $1

Ничего особенного, просто упрощение меньшего количества скриптов, которые они включают в источник-подсветка. Он действует так же, как кошка, когда вызывается таким образом.

Тем не менее, включенный скрипт less - хороший скрипт для использования. Я только что добавил следующее .bashrc :

export LESSOPEN="| /path/to/src-hilite-lesspipe.sh %s"
export LESS=' -R '

Этот сценарий также включен в онлайн-руководство для источника.

Я полагаю, что вы могли бы использовать псевдоним cat для вызова src-hilite-lesspipe.sh $ 1, если вы хотели полностью игнорировать cat, но это может быть нежелательно.

RGM
источник
4
Лично я предпочитаю псевдоним однострочным bash-скриптам, заканчивающимся $1:).
мгалгс
Да, mitch_feaster, вы на месте. :]
RGM
2
Работает на Mac тоже с brew install source-highlight. Невозможно покрасить yaml :(
Сайрам
9

Чтобы вывести синтаксис выделенного кода с чем-то вроде cat, я создал ccatкоманду, следуя инструкциям на http://scott.sherrillmix.com/blog/programmer/syntax-highlighting-in-terminal/ .

#!/bin/bash
if [ ! -t 0 ];then
  file=/dev/stdin
elif [ -f $1 ];then
  file=$1
else
  echo "Usage: $0 code.c"
  echo "or e.g. head code.c|$0"
  exit 1
fi
pygmentize -f terminal -g $file

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

alias less='/usr/share/vim/vim72/macros/less.sh'
michaelvobrien
источник
Как установить pygmentize: easy_install --install-dir $ SOMEDIR Фрагменты
psihodelia
Мне нравится этот тип портативных решений. Я добавил этот скрипт как функцию в мой bash .functionsascolorize(){...}
guneysus
3

Чтобы решить эту проблему, я использовал выделение . Я сделал функцию, которая пытается распечатать файл с подсветкой синтаксиса, и если он не работает, он просто использует cat для печати файла. Вы можете изменить тему подсветки синтаксиса на любую, какую захотите.

function hl { # Overrides the cat command to use syntax highlighting
    # Highlight with 'moria' theme to terminal, and suppress errors
    highlight $1 -s moria -O xterm256 2> /dev/null

    if (($? != 0)); then # If the command had errors
        cat $1 # Just cat the file out instead
    fi
}

Если вы работаете на Mac и используете Homebrew (очень рекомендуется!), Вы можете установить выделение, запустив brew install highlight. В противном случае он должен быть доступен на большинстве других менеджеров пакетов и может быть загружен здесь .

Я также сделал функцию для распечатки файла с подсветкой синтаксиса как html и открытия его в браузере для печати (опирается на openкоманду в OS X):

function hlprint {
    # Print with line numbers and 'moria' theme
    highlight $1 -l -o print.html -s moria
    open print.html # Open in browser
    sleep 5 # Give the browser time to open
    rm print.html highlight.css # Remove output files
}

Наслаждайтесь!

Kevin
источник
1

Нет, у кота нет возможностей подсветки синтаксиса. Если вы хотите просмотреть исходный код с подсветкой синтаксиса, вставьте его в vim или в свой редактор (с подсветкой синтаксиса). Таким образом, вы можете даже пролистать вывод, если это длинный файл, используя Ctrl+ F(вперед) и Ctrl+ B(назад).

Джон Т
источник