Подсветка синтаксиса в nano.
В nano подсветка синтаксиса выполняется с помощью регулярных выражений, из-за чего она не всегда корректна, усугубляет проблему и то, что регулярные выражения — POSIX ERE, они не очень хорошо подходят для данной задачи, но даже при таких проблемах, для многих синтаксисов можно сделать достаточно сносную подсветку.
В nano имеются предустановленные файлы с определениями синтаксиса, они находятся в каталоге «/usr/share/nano/», а в «/usr/share/nano/extra/» могут находиться специфичные для некоторых дистрибутивов определения, их можно подключить командой «include» в одном из конфигурационных файлов: «/etc/nanorc», «~/.config/nano/nanorc» или «~/.nanorc».
# Подключение предустановленных файлов с расширением .nanorc
include "/usr/share/nano/*.nanorc"
include "/usr/share/nano/extra/*.nanorc"
Эти файлы доступны для чтения всем пользователям, но изменять их может только «root», т. е. подсветка синтаксиса будет работать у всех пользователей, но настроить её возможно только получив права root. Пользователи имеют возможность создать свои файлы, в которых могут переопределить существующие определения или создать новые, подключив их командой «include» в одном из пользовательских конфигурационных файлов («~/.config/nano/nanorc» или «~/.nanorc»).
# Подключение файла с названием html
include "~/.config/nano/html"
# Подключение всех файлов с расширением .nanorc
include "~/.config/nano/*.nanorc"
# Подключение всех файлов в каталоге ~/.config/nano/syntax/
include "~/.config/nano/syntax/*"
Каждое определение синтаксиса должно начинаться с команды «syntax» и содержать хотя бы одну команду «color» или «icolor», остальные команды могут быть добавлены по мере необходимости, все регулярные выражения в nano — POSIX ERE. Ниже приведены все команды для подсветки синтаксиса.
- syntax название "регулярное выражение"
- Обозначает начало определения синтаксиса, все последующие команды будут относиться к этому синтаксису до следующей команды «syntax». Название обязательно, синтаксис можно активировать с помощью параметров командной строки -Y или --syntax за которыми через пробел следует название. Регулярное выражение указывать не обязательно, но оно нужно для активации подсветки при соответствии названия файла регулярному выражению. Примеры регулярных выражений: для файлов с расширением .html и .htm — "\.html?$", для .css — "\.css$", для .js — "\.js$". Данная команда переопределит синтаксис, если синтаксис с таким названием существовал ранее.
- header "регулярное выражение"
- Активирует подсветку при соответствии первой строки файла регулярному выражению, если не сработала ни одна команда «syntax». Регулярных выражений может быть несколько.
- magic "регулярное выражение"
- Активирует подсветку, при соответствии результата запроса в magic регулярному выражению, если не сработала ни одна команда «syntax» и «header». Требуется библиотека «libmagic», включённая опция «set magic», а так же, nano должен быть собран с поддержкой magic.
- formatter программа аргументы ...
- Запускает программу для форматирования кода. После команды «formatter» нужно указать программу так же, как она указывается в терминале, в том числе и аргументы. Текущий буфер записывается во временный файл, этот файл форматируется программой-форматером, после чего, содержимое буфера заменяется содержимым временного файла.
- linter программа аргументы ...
- Запускает программу для проверки синтаксиса, аналогично команде «formatter».
- comment "строка"
- По умолчанию при комментировании строк (клавиши M-3), в начале строки ставится символ #, команда изменяет символы комментирования на указанные в строке. Если в параметре не указана вертикальная черта (символ «|»), то строка комментируется только в начале, если указан, то часть находящаяся до «|», ставится в начале строки, а часть после — в конце. Если указать «""» комментирование, будет отключено.
- tabgives "строка"
- Вставляет сроку, указанную в параметре при нажатии клавиши «Tab». Команда переопределяет настройку параметра tabstospaces.
- color bold,italic,цвет_текста,цвет_фона условия
- Закрашивает фрагменты текста, соответствующие какому-либо условию (их может быть несколько). Все параметры указываются через запятую, а условия через пробел. «bold» — устанавливает жирное начертание текста, это необязательный параметр, но если указан, то должен быть первым. «italic» — устанавливает курсивное начертание, это необязательный параметр, но если указан, то после «bold» (если «bold» указан), либо первым. «цвет текста» — устанавливает цвет текста в элементе, это обязательный параметр, должен быть указан либо после параметров начертания (если они указаны), либо первым. «цвет фона» — устанавливает цвет фона элемента, это необязательный параметр, но если указан, то должен быть последним. В качестве параметров цветов должны быть указаны поддерживаемые nano названия цветов (список поддерживаемых цветов). Условием может являться регулярное выражение (указывается в двойных кавычках) и/или start="выражение" end="выражение", данное условие закрашивает фрагмент текста начиная с подстроки соответствующей регулярному выражению в start, до и включая подстроку, соответствующей выражению в end. Все команды раскраски применяются в порядке следования, это приводит к тому, что более поздние команды могут перекрашивать ранее закрашенный текст.
- icolor bold,italic,цвет_текста,цвет_фона условия
- То же что и «color bold,italic,цвет_текста,цвет_фона условия», только не чувствительна к регистру.
- extendsyntax название директива аргументы
- Добавляет команду в существующий синтаксис. В названии необходимо указать название синтаксиса, а затем указать добавляемую команду с необходимыми аргументами. Данная директива может быть указана только в конфигурационных файлах и не может быть применена в подключаемых файлах. Пример для добавления команды в существующий синтаксис с названием «html»: extendsyntax html icolor green "<(!|/)?[a-z][^>]*>".