Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

Смена визуальных характеристик элементов готового синтаксиса в Sublime Text 3

#sublime_text #sublime_text_3


Не подсвечиваются/выделяются фоном нужные мне элементы кода. 



Сколько цветовых схем не перепробовал — ничего не помогает. Как написать простейший
собственный синтаксис, расписано здесь, но что нужно проделать для изменения уже готовых?
    


Ответы

Ответ 1



Если не устраивает ни одна готовая схема, задаём цвета самостоятельно. Стоит предупредить о трёх обстоятельствах: С момента внесения правки в цветовую схему до отображения нового цвета может пройти несколько минут. Иногда помогает перезагрузка файла или самого Sublime Text 3. Из stack trace и всплывающих окон редактора не всегда понятно, где совершил опечатку в синтаксисе. Рекомендую пользоваться плагином Local History, чтобы оставалась возможность откатиться до предыдущих версий файла. Scopes (см. ниже) меняются с выходом новых билдов Sublime Text 3. После обновления может оказаться, что прописанные вами настройки сбились, и придётся заново вставлять уже новые области видимости. Свойства, отвечающие за цвет и начертание элементов синтаксиса языков разметки, программирования, наборов макропакетов, языков и таблиц стилей и т. д. в Sublime Text 3 называются «scopes». Перевёл как «области видимости», за точность перевода не ручаюсь. Куда что вставлять Открываем файл своей активной цветовой темы (схемы). Если не знаете, как, см. здесь в первых двух абзацах после «Простое решение». Куда-нибудь между тегами нашей цветовой схемы вносим следующий XML-массив: name Scope Name scope scope(s) settings foreground color Параметры: — необязательный. Дабы не забыть, что означает вставленная нами область видимости. name, Scope Name — необязательный. Между тегами задаём любое имя области видимости, которое будет отображаться в TmTheme Editor. scope, scope(s) — между тегами вставляем область (или области) видимости. Как их получить — см. ниже по тексту. Важно не оставлять пространство между пустым, — иначе цветом, что указан у вас вместо color, подсветится и совсем не то, что вы хотели. foreground, color — между тегами указываем цвет в форматах HEX, ARGB или X11. Последний формат не рекомендовал бы ввиду того, что а) как минимум цвета aqua, fuchsia и lime не всегда поддерживаются Sublime Text 3, б) периодически возникают разного рода неисправности, не случающиеся, если вводим цвет в HEX или ARGB. Получаем и вносим область видимости одним из трёх способов, подробно расписанных ниже, вслед за примерами. Вписываем в XML-конструкцию цвет вместо color → сохраняем файл цветовой схемы → смотрим результаты. Примеры Золотой текст: scope text.html.basic source.js.embedded.html source.js meta.group.braces.round meta.group.braces.curly meta.property.object.js settings foreground gold Зелёный фон: scope text.html.basic source.js.embedded.html source.js meta.group.braces.round meta.group.braces.curly meta.function-call.method.without-arguments.js variable.function.js settings background #6BC7548F Наклонный коралловый текст: scope text.html.basic source.js.embedded.html source.js meta.group.braces.round meta.group.braces.curly meta.function-call.method.with-arguments.js variable.function.js settings fontStyle italic foreground lightcoral Ключи foreground, fontStyle (принимает значения bold или italic, значения указывать со строчной буквы) и background можно комбинировать между собой, т. е. допускается одновременное задание цвета элемента, его начертания и цвета фона вокруг: fontStyle italic foreground lightcoral Несколько областей видимости, которые будут иметь одинаковый цвет, вносятся через запятую. Допустим, мы желаем идентичную раскраску у открывающих и закрывающих скобок тега : name Tag script brackets, open and closed scope text.html.basic source.js.embedded.html punctuation.definition.tag.begin.html, text.html.basic source.js.embedded.html punctuation.definition.tag.end.html settings foreground yellow Результат, после того, как мы задали цвета областям видимости всем элементам примера. Было: Стало: Получение областей видимости: Узнать активную, т. е. до или в пределах которой находится каретка, область видимости элемента можно сочетанием клавиш Ctrl + Alt + Shift+ P. Scope отобразится в строке состояния (Status Bar) нижней части окна Sublime Text 3. Однако из строки состояния не скопировать необходимую область видимости, необходимо воспользоваться одним из трёх способов ниже. Плагины от adzenith и ttscoff, также предназначенные для получения scopes в буфер обмена, у меня не заработали, — по всей видимости, они для Sublime Text 2, но не Sublime Text 3. UPD: Начиная с билда 3114 области видимости отображаются уже в отдельном окне, а не строке состояния, и их можно копировать. Плагин от r-stein, о котором идёт речь ниже, уже не особо и нужен. 1. Плагин от r-stein Проделаем следующие операции: а. Копируем в буфер обмена следующий код: sublime.set_clipboard(view.scope_name(view.sel()[0].b)) б. Устанавливаем каретку (упрощённо говоря, кликаем левой кнопкой мыши) до или внутри — но не после — элемента синтаксиса, цвет которого хотим изменить. в. Ctrl + ` (машинописный обратный апостроф, символ расположен на той же клавише, где кириллическая «ё») → вставляем в открывшееся поле ввода код, что мы скопировали на 1-м этапе, → Enter → в нашем буфере обмена содержится необходимая область видимости. Как можно убедиться на практике, это не очень удобно. Для упрощения выполнения операции служит плагин от ув-мого r-stein. Tools → New plugin... → Вставляем в открывшийся файл код на Python: import sublime, sublime_plugin class CopyScopeCommand(sublime_plugin.TextCommand): def run(self, edit): view = self.view sublime.set_clipboard(view.scope_name(view.sel()[0].b)) sublime.status_message("Scope copied") Ctrl + S → сохраняем файл как copy_scope.py. Задаём плагину шорткат: Preferences → Paskage Settings → Mediawiker → Key Bindings - User → между [] вписываем в открывшийся файл: // Копирование областей видимости { "keys": ["ctrl+7", "ctrl+o"], "command": "copy_scope" }, Сохраняем. Чтобы сочетание наверняка оказалось ничем не занятым, я выбираю двухэтапные хоткеи — то есть ввожу Ctrl + 7, затем Ctrl + O, и только после двух нажатий выполняется необходимая команда. Можете назначить одноэтапный, только лучше удостоверьтесь, что шорткат свободен: Preferences → Key Bindings - Default → в открывшемся файле Ctrl+F → временно отключаем кнопку Regular expression, иначе не удастся найти символ +, → вводим в форму поиска сочетание клавиш, которое хотим использовать, → если оно задействовано, выбираем другое, которое, впрочем, также может быть занято каким-то из установленных вами плагинов. (опционально) Добавляем кнопку вызова плагина в контекстное меню, появляющееся при нажатии правой кнопкой мыши в любую область ввода текста: Preferences → Browse Packages... → User → создаём файл Context.sublime-menu, если его нет, → вставляем в файл [ { "command": "copy_scope" }, ] Сохраняем. Если же файл существует, и в нём прописана команда для другого плагина, разделяем объекты запятыми после {фигурных скобок}. Объекты заключены в [квадратные скобки] (JSON-синтаксис). [ { "command": "lat_to_cyr" }, { "command": "copy_scope" }, ] То же замечание по поводу запятых и скобок касается предыдущего и последующего примеров. (опционально) Добавляем кнопку вызова плагина в верхнее меню: Preferences → Browse Packages... → User → создаём файл Main.sublime-menu, если его нет, → вписываем: [ { "id": "edit", "children": [ { "command": "copy_scope" } ] }, ] Сохраняем. Наводим каретку до или внутри элемента, область видимости которого следует узнать, → вызываем команду получения scope любым из методов — Ctrl + 7, затем Ctrl + O; клик правой кнопкой мыши в любую область ввода текста → Copy Scope; Edit → Copy Scope — область видимости находится в нашем буфере обмена. 2. ScopeHunter онлайн Сервис поддерживает только синтаксисы, перечисленные на картинке ниже, тогда как методами 1 и 3 изменяется раскраска у любых элементов всех синтаксисов Sublime Text 3. Например, я написал цветовую схему с поддержкой вики-разметки, для меня вариант со ScopeHunter онлайн частично не подошёл. Переходим на сайт TmTheme Editor → Gallery, если пользуетесь готовой цветовой схемой, Open — собственной (когда файл темы находится среди файлов вашего компьютера, открываете его, как описано здесь, и в title окна Sublime Text 3 высветится путь к локальному файлу) → в правом нижнем углу выбираем необходимый язык разметки/программирования → Customize Preview Code → вставляем тот самый код, где элементы подсвечиваются не так, как вам нужно → Save → Scope Hunter → наводим мышью на элементы → под строкой Current Scope выводится искомая область видимости: Если у выбранной области видимости задан параметр «Name» (под «Matching Rule»), то слева находим Score Name c таким же значением параметра, как у «Name», → меняем цвета в веб-панели. Доступен онлайн-предпросмотр. Когда же напротив Name ничего не указано, придётся создавать XML-массив (см. Куда что вставлять) и вписывать область видимости в него. Save → Download → сохраняем файл туда же, откуда его взяли. К сожалению, работа над сервисом фактически прекращена, результат будет отличаться от того, что вы имеете в Sublime Text 3, иногда разительно. Скриншоты одного скрипта, сделанные 13 июня 2016 в Sublime Text 3 и TmTheme Editor: 3. Плагин ScopeHunter Поддерживаются любые синтаксисы. Устанавливаем плагин через Package Control → Ctrl + Shift + P → в появившееся поле ввода вписываем одну из двух команд: Scope Hunter: Toggle Instant Scoper — (зная о fuzzy поиске, можно ввести shtis) решение, когда необходимо изменить цвета множеству элементов. Внизу появится консоль, где отобразятся области видимости, автоматически сменяющиеся в зависимости от того, до или внутри какого элемента синтаксиса располагается каретка. Чтобы scopes добавлялись в буфер обмена автоматически, задайте значение true параметру clipboard: Preferences → Package Settings → ScopeHunter → Settings - User → вставляем следующий код и сохраняем файл. { "clipboard": true, } Когда вы не собираетесь работать с областями видимости, чтобы они не мешались в буфере обмена, установите значение false или же прекратите действие команды ScopeHunter перезагрузкой Sublime Text 3. Впрочем, иногда она сама по непонятным причинам прекращает функционировать, и приходится заново после Ctrl+Shift+P вводить shtis. Scope Hunter: Show Scope Under Cursor — подходит, когда требуется преобразить колор одному или нескольким элементам. После того, как вы закрываете консоль клавишей Esc, чтобы узнать области видимости ещё раз, придётся вновь набирать данную команду. Если в течение сеанса работы в Sublime Text 3 вы ввели одну из этих команд, то другая не заработает до того, как вы перезагрузите Sublime Text 3. Поддерживаются множественные курсоры. Зажмите клавишу Ctrl и кликайте мышью до или внутри элементов, область видимости которых необходимо узнать. В нижней консоли появятся scopes сразу всех их. Пример: Scope: text.html.basic source.js.embedded.html source.js meta.group.braces.round meta.brace.round.js ------ Scope: text.html.basic source.js.embedded.html source.js meta.group.braces.round meta.group.braces.curly variable.other.readwrite.js ------ Scope: text.html.basic source.js.embedded.html source.js meta.group.braces.round meta.group.braces.curly support.type.object.dom.js ------ Копируем области видимости (то, что справа, без Scope: с чёрточками). Резюме по рассмотренным способам получения областей видимости: Плагин от r-stein: Плюс — наиболее быстрое получение scopes, Минус — нет никаких дополнительных функций. ScopeHunter онлайн: Плюс — быстрый предпросмотр цветов онлайн, Минусы — неактивный разработчик и как следствие отсутствие поддержки новых изменений; ограниченная поддержка синтаксисов. Плагин ScopeHunter: Плюс — работа сразу с множеством областей видимости, Минус — перебои в работе плагина. Когда мне требуется изменить 1—2 области видимости, я пользуюсь плагином от r-stein; нужен быстрый предпросмотр — захожу в TmThemeEditor; ну а если основательно сажусь править цветовых темы, то привожу в действие плагин ScopeHunter.

Комментариев нет:

Отправить комментарий