Помощник веб-разработчикаИнструментыИнструкции

Подсветка синтаксиса в 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][^>]*>".