Подсветка синтаксиса в командной строке
Date October 30th, 2013 Author Vitaly Agapov
Подсветка синтаксиса в том же 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: Linux
Category:
Linux |
No comments »