Ответ 1
Ваш собственный PHP.tmlanguage
в каталоге пользователя не работает, потому что редактирование файла .tmlanguage
- это способ описания языка и настройки областей, а не способ выделения терминов. Поэтому вам нужно выполнить дополнительные действия, чтобы выделить эти вещи в окне редактора.
Выделение выполняется в файле .tmTheme
. В файле вы можете использовать области видимости от .tmlanguage
, чтобы применить цвет для текста, подходящего для области.
1. PHP.tmLanguage
Как я знаю, возможно, я ошибаюсь, невозможно создать файл "patch" для определения синтаксиса. Вы не можете создать небольшой файл патча, который расширит синтаксис PHP. Синтаксис описан в одном файле, поэтому все области для PHP должны быть описаны в одном файле. Если вы хотите добавить, удалить или изменить что-то для языка PHP, вам необходимо отредактировать соответствующий файл, который должен содержать определение синтаксиса для всего PHP. Хорошо, можно скопировать файл .tmlanguage
в каталог User
и сохранить собственный файл в безопасности.
Скопируйте PHP.tmlanguage
в папку User
и немного измените ее. Вы можете найти эти строки внутри:
<dict>
<key>match</key>
<string>(?i)\b(TRUE|FALSE|NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\b</string>
<key>name</key>
<string>constant.language.php</string>
</dict>
Как вы можете видеть, в настоящее время оба true
и false
находятся внутри одной области, constant.language.php
. Вы можете изменить его, удалив их из области действия и добавив для них две отдельные области.
<dict>
<key>match</key>
<string>(?i)\b(NULL|__(FILE|DIR|FUNCTION|CLASS|METHOD|LINE|NAMESPACE)__|ON|OFF|YES|NO|NL|BR|TAB)\b</string>
<key>name</key>
<string>constant.language.php</string>
</dict>
<dict>
<key>match</key>
<string>(?i)\b(TRUE)\b</string>
<key>name</key>
<string>true.constant.language.php</string>
</dict>
<dict>
<key>match</key>
<string>(?i)\b(FALSE)\b</string>
<key>name</key>
<string>false.constant.language.php</string>
</dict>
2. Изменение темы
Невозможно настроить цвета в файле tmLanguage
, поскольку его целью является определение областей - элементов языка. Вся подсветка синтаксиса выполняется в файлах .tmTheme
. Так что лучше всего я могу представить, копируя текущий файл темы в каталог User
и редактируя его.
Например, если ваша текущая тема Slush & Poppies
, вы скопируете ее из ST3/Packages/Color Scheme - Default.sublime-package\Slush & Poppies.tmTheme
в директорию ST3/User/Data/Packages/User
и отредактируете.
Найдите строку, constant.language
. Это часть этого блока:
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict/>
</dict>
Похоже, Slush & Poppies
не имеет настроек для констант окраски. Но это не проблема. В приведенном ниже коде я написал образец, который помогает понять, как применять настройки цвета. Итак, измените выше блок на этот:
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict/>
</dict>
<dict>
<key>name</key>
<string>TRUE</string>
<key>scope</key>
<string>true.constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#008900</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>FALSE</string>
<key>scope</key>
<string>false.constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#890000</string>
</dict>
</dict>
Перезагрузите ST3 (похоже, что ST3 не полностью обновляет список областей из файла .tmlanguage
во время выполнения, поэтому лучше перезапустите его) и выберите меню "Настройки" → "Цветовая схема" → "Пользователь" → "Слякоть и маки", В этой теме выделено зеленым цветом true
, а false
- красным. Конечно, вы можете отредактировать любую цветовую схему, которую вы хотите, а не только эту.
Еще одна вещь, в файле .tmTheme
вы можете использовать не все имя области, а ее часть. Например, можно использовать false.constant.language
вместо false.constant.language.php
. Когда вы используете false.constant.language
, настройки будут применены ко всем областям, имя которых начинается с false.constant.language
. Например, если вы определили false.constant.language.php
в PHP.tmLanguage и false.constant.language.js
в JavaScript.tmLanguage, вы можете использовать false.constant.language
в .tmTheme
файле, и его параметр будет применяться как к JS, так и к PHP false
.