Важное дополнение с префиксом к ответу
В следующем объяснении предполагается, что вы пишете определение синтаксиса в JSON, а затем создаете XML-файл Plist с помощью плагина PackageDev (как описано в неофициальных документах sublime docs, приведенных ниже). Именно из последних файлов ST2 читает инструкции синтаксического разбора синтаксиса.
= = = = *
Я сообщаю вам о своем первом набеге на эту территорию, поэтому я могу ошибиться в одном или двух пунктах в дальнейшем.
Если ваш синтаксический анализатор не определит $
как имеющий собственный селектор области действия, вы не сможете установить цвет для этого одиночного знака в файлах цветовой схемы. Как вы, возможно, уже знаете, вы можете проверить селектор области элемента, выбрав его и нажав option + command + p (alt + super + p на not-macs): он сообщает информацию в строке состояния.
Я только что проверил синтаксический анализатор php в моем собственном программном обеспечении, и нет никакого различия между областью действия $
и строкой, к которой он добавлен. Таким образом, предполагая, что ваши настройки похожи на мои, вам нужно написать собственное определение синтаксиса. Это можно сделать либо в существующем файле синтаксиса php, либо (безусловно, более безопасный вариант) в новом документе определения, который вы будете использовать в качестве основного для редактирования.
Вы можете найти учебник, охватывающий основные этапы написания собственных определений синтаксиса в неофициальных документах с возвышенным текстом. Фактически, в разделе, озаглавленном « Точные настройки соответствия », объясняется, как определить селектор области видимости, особенно для префиксных знаков dolla, с помощью «перехватов». Вы можете обратиться к документации для получения подробных сведений о создании файлов определения синтаксиса и тому подобного, но ради укрепления моего собственного понимания процесса и доступности ответа здесь я сделаю все возможное, чтобы объяснить JSON определение селектора.
Это шаблон регулярного выражения, который вам нужно использовать:
{ "match": "\\$([A-Za-z][A-Za-z0-9_]+)",
"name": "keyword.syntaxTypeAbbreviation",
"captures": {
"1": { "name": "moreSpecific.selectorName.syntaxTypeAbbreviation " }
},
"comment": "Variables like $PARAM1, $TM_SELECTION..."
}
Анализ значения вышеперечисленного:
"match"
дает регулярное выражение, которое идентифицирует шаблон строки, который будет выбран. Если я не ошибаюсь, он гласит: «любая строка, начинающаяся с« $ »([сопровождается одной заглавной или строчной буквой] и [хотя бы одной дополнительной буквой или цифрой] плюс любые дополнительные символы)». (Sublime Text использует спецификации oniguruma regex .)
"name"
предоставляет строку, по которой необходимо выбрать область действия в документе цветовой схемы. На схеме xml это соответствует <key>name</key> <string>specific.selector.syntaxTypeAbbreviation</string>
.
"captures"
(и это критический элемент для вашей цели) задает подмножество шаблона, которому должен быть предоставлен собственный, более конкретный, селектор области действия. Каждый набор терминов регулярных выражений, заключенных в круглые скобки, занимает одно место, а целое число ("1"
, здесь) указывает, какое из мест должно быть «захвачено». В нашем случае, конечно, есть только одна группа, которую можно собрать.
"name"
делает то же, что и раньше, но как подвид предыдущего обозначения, а "comment"
предлагает вам возможность прокомментировать значение определения.
Наконец, важно отметить, что селектор области видимости first устанавливает цвет всей строки, а second переопределяет своего предшественника, чтобы придать другой цвет следующие буквы и цифры . То есть первый селектор позволит вам закрасить $
, а второй будет цветом добавленной строки.
Поэтому мы можем перевести шаблон таким образом:
"Любая строка, начинающаяся с '$' ([сопровождается одной заглавной или
строчная буква] и [хотя бы одна дополнительная буква или цифра] плюс
любые дополнительные символы) должны быть названы NAME , за исключением части, заключенной в первый набор скобок, которая должна быть названа OTHERNAME вместо.
Я надеюсь, что это объяснение будет для вас как минимум вдвое более полезным для чтения, чем для меня. Кроме того, я был бы признателен людям, исправляющим любые ошибки, которые я, безусловно, совершал.
С уважением,
aBath