Настройка подсветки синтаксиса в коде Visual Studio
В настоящее время я пытаюсь написать расширение для нового типа файлов (ANTLR) и задаюсь вопросом, как изменить цвета, используемые для подсветки синтаксиса в коде Visual Studio. Для меня это выглядит так, как будто это не определено в расширении, но где-то еще. Там нет записи настроек для цветов, и я не нашел файл CSS, который определяет это (что я ожидаю, так как vscode использует Electron). Я также просмотрел файл настроек, сгенерированный vscode, и файлы, которые пришли с ним, но также не имел никакого понятия. Не помог ни поиск по сети. Итак, я сейчас немного потерян.
Может ли кто-нибудь дать мне несколько советов или указать мне соответствующие документы?
2 ответа
Немного опоздал на вечеринку, но я добавлю это сюда, чтобы сэкономить следующему парню несколько часов поиска.
Здесь действуют две концепции:
- языковые грамматики, которые превращают текстовый файл в токены с различными областями действия, и
- темы, которые окрашивают эти области (надеюсь) приятным для глаз способом.
Если вы пишете свою собственную грамматику или конвертируете из TextMate и т. Д., Есть вероятность, что вы используете области, отличные от определенных в теме. В этом случае не будет четкого различия между токенами, которые вы определяете, даже если они действительно определены.
Есть два выхода из этого. Во-первых, расширьте тему с помощью пользовательских областей и раскрасьте их по своему желанию. Не очень хороший путь, если только всем, кто использует ваш язык, также не нравится ваша цветовая схема. Другой - использовать (ограниченный набор) областей, уже определенных и раскрашенных VSCode и авторами темы. Скорее всего, ваш язык будет хорошо выглядеть в выбранной вами теме и достаточно хорош в других.
Чтобы дать вам пример, вот comment
область действия определена темной темой VSCode по умолчанию.
"name": "Dark Visual Studio",
"settings": [
{
"scope": "comment",
"settings": {
"foreground": "#608b4e"
}
},
и вот эквивалентный фрагмент языка из грамматики C++:
"comments": {
"patterns": [
{
"captures": {
"0": {
"name": "punctuation.definition.comment.java"
}
},
"match": "/\\*\\*/",
"name": "comment.block.empty.java"
},
По сути, язык определяет несколько токенов под comment
по мере необходимости, и так как тема говорит, что comment.*
будет зеленым, все они будут окрашены одинаково.
Нет необходимости патчить тему, из официальной документации:
Чтобы настроить цвета подсветки синтаксиса редактора, используйте editor.tokenColorCustomizations в файле настроек пользователя settings.json
Помимо простой настройки токена, вы можете полностью переопределить правила TextMate с помощью немного более сложной настройки, например:
"editor.tokenColorCustomizations": {"textMateRules": [{
"scope": "keyword.control.ref.latex",
"settings": {
"foreground": "#FF0000"
}
}]}
Правила подсветки синтаксиса хранятся в .plist
файлы (или в качестве альтернативы в .tmLanguage
файлы). В этих файлах объявлены разные типы токенов для подсветки синтаксиса:
- Что такое ключевое слово?
- Что такое строковый литерал?
- Что такое комментарий?
- и т.п.
Посмотрите здесь, чтобы получить больше информации об этом: https://code.visualstudio.com/Docs/customization/colorizer
Вы не определяете цвета в .plist
файлы!
Связь между типами токенов и цветами осуществляется в объявлениях цветовой темы.
Узнайте больше об этом здесь https://code.visualstudio.com/Docs/customization/themes и здесь Как добавить тему в код Visual Studio?
В целом этот документ также полезен при попытке расширить VSCode: https://code.visualstudio.com/docs/extensionAPI/overview
Вы можете рассмотреть возможность использования цветовой темы
Начиная с VSCode 1.44 (март 2020 г.) у вас теперь есть
Поддержка тем для семантических токенов
Цветовые темы теперь могут писать правила для цветных семантических маркеров, сообщаемых языковыми расширениями, такими как TypeScript.
"semanticHighlighting": true, "semanticTokenColors": { "variable.declaration.readonly:java": { "foreground": "#00ff00" "fontStyle": "bold" } }
Приведенное выше правило определяет, что все объявления переменных только для чтения в Java должны быть окрашены в жадный и полужирный цвета.
См. Дополнительную информацию на странице Wiki Semantic Highlighting.