Изменение цвета конкретных слов в возвышенном тексте 3

Я ищу на этом сайте, как изменить цвет некоторых конкретных слов в Sublime Text 3, но не могу найти его без замены файла tmlanguage.

Мне нужно изменить цвет для true (сделайте его зеленым) и false (сделайте его красным) или что-то вроде $this.

Меня особенно интересуют области PHP и JS, поскольку я действительно не использую какой-либо другой язык. Я пробовал PersistentRegexHighlight плагин, но я не совсем удовлетворен результатом. Слова не окрашены при открытии файла, и он использует подсветку, поэтому я не могу просто изменить цвет текста.

Я прочитал несколько ответов об изменении файла PHP.tmlanguage, но, делая это, я потеряю любые изменения в будущих версиях, не так ли? Я думал, что создание другого файла PHP.tml в пользовательском каталоге будет "добавлять его" к основному, например, к файлу привязки ключей, но нет.

Есть ли у вас идеи, как это сделать?

Спасибо.

Ответ 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.