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

Date October 30th, 2013 Author Vitaly Agapov

Мудрость – это, в частности, умение пропускать мимо ушей глупые или неискренние советы.

Анджей Сапковский «Меч Предназначения»

source-higlight

Подсветка синтаксиса в том же Vim'е – дело привычное и полезное. Но ещё было бы полезно получить такую же раскраску и в обычном стандартном выводе в консоли. Её можно было смотреть прямо так или подать на вход less'у, не важно. И таких способов существует несколько.

 

 

source-highlight

Во-первых, в репозиториях есть пакет source-highlight, работа которого продемонстирована на картинке сверху. В man source-highlight есть исчерпывающая информация. В частности там рассказывается, что он умеет работать как с файлами (принимая входной и выходной файл ключами -i и -o), так и со стандартным вводом и выводом.

Самый обычный способ применения команды:

cat <file> | source-highlight -s sh -f esc

Или, скажем:

cat <file> | source-highlight -s sh -f esc | less -R

Ключом -s задаётся формат входного файла. Поддерживаемых форматов довольно много, тут и xml, и perl, и ruby, и css. Их полный список можно посмотреть командой:

source-highlight –lang-list

Ключом -f задаётся формат выходного файла. Можно получить и html-вёртску (даже с css-стилями), и LaTeX, и даже mediawiki-разметку. Полный список командой:

source-highlight –outlang-list

Хороший инструмент, умеет ещё много всего. Можно, например, создавать свои собственные language definition files и использовать их для расцветки. Если не использовать stdin, а указывать входной файл ключом -i, то source-highlight может сам догадаться, какой тип файла он открывает, если в первой строке файла присутствует указание на интерпретатор вида #!/bin/bash или при наличии расширения в имени файла. В этом случае ключ -s становится необязательным.

pygmentize

Ещё один проект – это Python Syntax Highlighter. Он же Pygments. Присутствует в репозиторях в пакете python-pygments. Он точно так же может принимать файл через аргумент:

pygmentize -l sh <file>

, а может и раскрашивать поток через stdin:

cat <file> | pygmentize -l sh

Определять язык по интерпретатору pygmentize не умеет, но вполне может определить его по расширению файла:

pygmentize <filename.xml>

Проверить поддерживаемые входные файлы можно командой:

pygmentize -L lexers

Здесь тоже список весьма впечатляющ. Есть даже json, lua и brainfuck.

Список форматов выходного файла для ключа -f (сам выходной файл задаётся ключом -o, иначе всё выдаётся на stdout) можно получить так:

pygmentize -L formatter

И здесь мы узнаем, что кроме обычных вариантов вроде html и LaTeX мы можем получить на выходе даже картинку jpeg, gif, svg и даже bmp.

Подсветска синтаксиса в less

В комплекте с source-highlight идёт скрипт src-hilite-lesspipe.sh, предназначенный как раз для сабжа. Для выдачи ему на вход данных при запуске less нужно установить переменные окружения:

export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=' -R '

В случае с Pygments всё похоже, но ещё проще:

export LESSOPEN="| pygmentize %s"
export LESS=' -R '

Tags:
Category: Linux | No comments »

Comments

Leave a comment

 Comment Form