Страницы

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

Показаны сообщения с ярлыком sublime-text. Показать все сообщения
Показаны сообщения с ярлыком sublime-text. Показать все сообщения

четверг, 9 апреля 2020 г.

После установки emmet не работает shift+alt+стрелка

#sublime_text #emmet

                    
Sublime text 3. Linux Mint Cinnamon 17.3.

Emmet установлен штатно через Package control.

Очень нужная для меня функция ввода множественных курсоров по shift+alt+стрелка перестала
работать. Не заместилась на другую, а просто ничего не происходит.

Пришлось пока отключить Emmet в настройках, а жаль. 

Как разрешить конфликт?
    


Ответы

Ответ 1



В примере рассмотрим, что делать, если больше не функционирует сочетание Alt+Shift+↑, хотя Emmet занимает и Alt+Shift+↓. Что делать, если перестали работать горячие клавиши Либо вы хотите испробовать какое-то новое сочетание, но результата нет или он совсем не такой, какой по идее должен быть. В нередко используемых и находящихся в автозагрузке программах я дезактивирую горячие клавиши, если не планирую ими пользоваться. Некоторые программы регистрируют шорткаты глобально, и есть шанс нарваться на конфликт горячих клавиш. Ну а нужные мне комбинации сохраняются в голове, при необходимости они вспоминаются. Если убедились, что проблема не в стороннем софте, значит, скорее всего, она возникает из-за несогласованности сочетаний между плагинами в Sublime Text 3. Также они имеют нехорошее на мой взгляд свойство изменять дефолтные сочетания. Раз уж Emmet этим злоупотребляет, то что говорить о малоиспользуемых плагинах. Ещё вариант — после обновлений Sublime Text до новых билдов, некоторые сочетания могут быть заменены/удалены разработчиками. Порядок действий, впрочем, остаётся тем же. 1. Плохое решение Поудаляй плагины по одному — узнаешь в каком дело. Это может быть долго, потребовать переустановки множества плагинов, вы не узнаете причин, вызвавших конфликт в проблемном плагине; и неясно, что делать, если нужны как плагин, так и занятый им шорткат. 2. Не самое удачное решение Проделывать только: Preferences → Key Bindings - Default (если перестали работать горячие клавиши по умолчанию)/ → Package Settings → <имя плагина, в котором начали отказывать хоткеи> → Settings - Default (когда перестали функционировать горячие клавиши в одном из плагинов) → поиском ищем отказавшее сочетание → копируем содержащую его строку → вставляем её в файл, открывающийся после Preferences → Key Bindings - Default. Для Alt+Shift+↑ строка следующая: { "keys": ["alt+shift+up"], "command": "select_lines", "args": {"forward": false} }, В этом файле с расширением sublime-keymap используется синтаксис JSON, если не знаете его, и у Вас будет выскакивать окно с ошибками, читаем тут (ищем по тексту JSON-синтаксис) и здесь. Хоткей заработает, но вы не узнаете, в каком плагине и тем более, какой из его команд проблема. 3. Хорошее решение Плагин Keymaps. После установки Tools → Keymaps → Cheat Sheet. Откроется полный список горячих клавиш Sublime Text 3: по умолчанию, занятых плагинами и пользовательских. Находим поиском по открывшемуся файлу, какая команда какого плагина занимает наш шорткат, определяем, нужна она нам или нет, если нет, то проделываем действия, описанные в предыдущем разделе. У метода есть один недостаток. У меня не работало сочетание Ctrl+L — выделение строки. В Cheat Sheat мне не удалось найти ничего, что занимало это сочетание. Оказалось, в одном из плагинов использовалось сочетание Ctrl+K, Ctrl+L, а хоткеем Ctrl+L вызывалась та же самая команда, что и Ctrl+K, Ctrl+L. 4. Способ наверняка Ctrl+' (машинописный обратный апостроф, символ расположен на той же клавише, где кириллическая «ё») → вводим в открывшееся поле sublime.log_commands(True), затем sublime.log_input(True). sublime.log_input(True) — встроенный в Sublime Text 3 кейлоггер, вывод осуществляется в ту же консоль, которую мы открыли сочетанием Ctrl+`. sublime.log_commands(True) — вывод лога команд в эту консоль. Нажимаем в любом месте открытого файла проблемный хоткей, в примере это Alt+Shift+↑, смотрим вывод: key evt: shift+alt+up command: run_emmet_action {"action": "increment_number_by_10"} По командам в Sublime Text 3 обычно становится ясным, что за плагин их использует, в данном случае Emmet. Для подробностей, что означает команда, можно погуглить или же пройтись по пути Preferences → Package Settings → Emmet → Key Bindings - Default . Для себя я решил: мне не нужно, чтобы Emmet занимал это сочетание, и проделал действия, описанные в разделе 2. Раз в Emmet, установленном почти 2 миллиона раз, таки решили перекрыть Alt+Shift+↑, обращение к его разработчикам, полагаю, имеет небольшие шансы на благоприятный исход. Для полной уверенности по моему мнению эффективнее уметь обращаться с горячими клавишами самостоятельно.

Автодополнение для Си

#c #sublime_text #sublime_text_3

                    
Меня интересует автодополнение кода для Си в Sublime Text 3. Мне нужно, чтобы после
подключения заголовка какой-то плагин давал подсказки, подобно intellisense из Visual
Studio. Я "нагуглил" какие-то Clang autocomplete и тому подобное, но они нормально
не работают. 

Все мои плагины:



Из автодополнений у меня есть ключевые слова а-ля struct, typedef, типы переменных
etc. Но нет автодополнения (или, можно сказать, подсказок) по подключаемым файлам.
Например, тот же stdio.h — у меня автоподолнение только ОДНОЙ функции printf.
    


Ответы

Ответ 1



Попробуйте вот это. Он, технически, должен выбирать все функции, из заголовков, что у вас подключены. Подробнее про установку на Хабре. Если у вас линукс, то можно заставить его работать под ST3, но вроде бы и под виндой можно.

суббота, 4 апреля 2020 г.

Автоматическое изменение цвета у заданных слов в Sublime Text

#sublime_text #sublime_text_3

                    
Необходимо, чтобы, например, набор символов тест в документах, открытых Sublime Text
3, всегда был оранжевого цвета; <пример> — красного, @stackoverflow — синего и т. п.
. Не подсветка, а именно другой цвет. Особо не имеет значения, сразу во всех цветовых
схемах или же только в той, которой пользуюсь.

Цель — хочется простенький ToDo-менеджер прямо в Sublime Text, где разноцветные слова
выполняли бы роль тегов, по которым легко ориентироваться. ToDo-плагин PlainTasks не
устраивает.

Возможно ли так сделать?
    


Ответы

Ответ 1



Решение проверено в Windows XP и новейшей (на март 2016) версии редактора — Sublime Text 3 Build 3103. Если установлена более старая версия Sublime Text 3, скачиваем Build 3103 с официального сайта, для 64-битной Windows и других операционных систем ссылки тут. В верхнем меню Sublime Text 3 открываем Preferences ► Browse Packages... , в папке User создаём файл ToDo Manager.sublime-settings, куда копируем следующее содержимое: %YAML 1.2 --- # http://www.sublimetext.com/docs/3/syntax.html name: ToDo Manager file_extensions: - task scope: text.task contexts: main: - match: (?i)@Работа scope: meta.work - match: (?i)@Проект1 scope: meta.project1 - match: (?i)@Срочно scope: meta.avral Где ToDo Manager — имя файла подсветки, которое должно совпадать с именем до расширения .sublime-settings только что созданного нами в папке User файла; task — расширение файлов, при открытии которых программой Sublime Text 3 будет функционировать наша подсветка, должно совпадать со словом после scope: text. в следующей строке (не поставил расширение todo, поскольку оно уже зарезервировано плагином ). Если теги нашего ToDo-менеджера будут иметь вид @'Название тега', вписываем их, как в примере выше, желаете по-другому — используйте вместо @ свой вариант. Взамен work, project1 и avral можно вписать любые значения, лишь бы они совпадали с дальнейшей вставкой. Как лучше всего подобрать цветовую схему для Sublime Text 3. Переходим на страницу онлайн-сервиса TmTheme Editor, в левом меню выбираем предпочтительную цветовую схему, настраиваем её в зависимости от наших пожеланий. Доступен предпросмотр цветов и подсветки для различных языков разметки/программирования: TmTheme Editor http://pokit.org/get/img/4ba225a894915a99fbc8dacf4367e80b.jpg Save ► Download — сохраняем файл в папку, где хранятся цветовые схемы: Preferences ► Browse Packages... ► User. Переключение на схему осуществляется посредством Preferences ► Color Scheme ► User. Перед следующими строками в конце файла цветовой схемы uuid 6B90703E-4E4B-43C8-9D32-921BEDF6D725 colorSpaceName sRGB semanticClass theme.dark.espresso_libre вставляем текст: name work scope meta.work settings background fontStyle foreground Yellow name project1 scope meta.project1 settings background fontStyle foreground #00FF00 name avral scope meta.avral settings background fontStyle foreground Red Значения должны совпадать с теми, что мы вписывали в файл ToDo Manager.sublime-settings. Между тегами вводим цвета. Лучше прописывать их в HEX, а не X11 colors, поскольку в Sublime Text 3 могут некорректно отображаться как минимум цвета aqua, fuchsia и lime. Для подсветки цветов в форматах HEX и RGB служит плагин ColorHighlighter. Самый простой способ установки — через Package Control: в Sublime Text 3 нажимаем Ctrl+Shift+P ► в открывшуюся строку вводим Package Control: Install Package ► среди всплывающих вариантов выбираем соответствующий пункт ► теперь вводим в ту же строку Color Highlighter ► среди всплывающих вариантов выбираем соответствующий пункт ► плагин установлен. Создаём файл с расширением .task . Открываем его нашим Sublime Text 3, выполняем: View ► Syntax ► Open all with current extension as... ► User ► ToDo Manager. Пробуем в этом же файле, что у нас получилось: Всё, раскрашиваем содержимое task-файлов, как душе угодно. Спасибо за подробное объяснение ув-мому Мэтту Моррисону.

воскресенье, 29 марта 2020 г.

Регулярное выражение для многострочного файла

#регулярные_выражения #sublime_text #notepad++


Необходимо составить регулярное выражение для замены в Sublime или Notepad++, которое
разобьет текст на блоки подобным образом:

Исходный текст:

Котики/
Отсутствует

Котик/
123вап
456пррп
M4501лолд
Mкуе2смив
5646пва1
Г34выаыв42

Котики/
Отсутствует


Результат:

Котики/\tОтсутствует

Котик/\t123вап\t456пррп\tM4501лолд\tMкуе2смив\t5646пва1\Г34выаыв42

Котики/\tОтсутствует


Пример текста, который необходимо обработать за один проход:

Котики/
Отсутствует

Отсутствует

Котики

Котики/
Отсутствует

Котики/
Отсутствует

Котики/
Отсутствует

Котики/
Отсутствует

Отсутствует

Котики/
Отсутствует

Котики/
Отсутствует

Котики/
Отсутствует

Котик/
123вап
456пррп
M4501лолд
Mкуе2смив
5646пва1
Г34выаыв42

Котики/
Отсутствует


Если кто-то может помочь, был бы благодарен.
    


Ответы

Ответ 1



Для того, чтобы объединить строки, разделённые одним переносом строки, можно воспользоваться Найти: (.)\R(?!\R) Заменить на: $1\t Вместо \R можно использовать \r?\n, \r, \n в зависимости от того, какие символы в каждом конкретном файле используются для переноса строки. Подробности (.) - Подмаска №1: любой символ, отличный от знака переноса строки \R - любой символ (последовательность символов) переноса строки, (?!\R) - за которым нет ещё одного переноса строки.

вторник, 17 марта 2020 г.

В терминале не выводится строка перед длительной операцией

#terminal #cpp #sublime_text


Работаю в Ubuntu 14.04 x86, Sublime Text 2 + терминал 

Странность высветилась во время вывода строки перед длительной операцией. Я использовал
выделение большого кол-ва памяти:

MyType* type;
long int MyNumber = 3000000;

cout << "Initialization... ";
MyType* type = new MyType[MyNumber];
cout << "Done! << endl;


По всей логике вывод терминала должен быть следующим:

Initialization...*пауза* Done!


Но по какой-то причине пауза проходит вначале, а две строки выводятся одновременно.

*пауза* Initialization... Done!


После добавления к выводу первой строки команды endl первая надпись срабатывает так,
как нужно.

Initialization...
*пауза*
Done!


Что за особенность работы терминала такая?
    


Ответы

Ответ 1



Это не особенность терминала, а свойство всех буферизированных потоков вывода. Пока не будет вызван метод flush(), или в поток не попадёт \n - данные из буфера не будут переданы на устройство.

воскресенье, 8 марта 2020 г.

Не работает русская клавиатурная раскладка в сочетаниях горячих клавиш Sublime Text 3

#sublime_text #sublime_text_3


Установил плагин Markdown Editing, синтаксис Markdown GFM. Хочу обернуть текст в
код или квадратные скобки. Когда нахожусь в английской клавиатурной раскладке, проблем
не возникает:



Но когда раскладка русская, я уже не могу обернуть текст:



Это неудобно, раздражает. Причём такое сразу с несколькими плагинами: в английской
раскладке горячие клавиши работают, а в русской нет.

Подскажите, что делать?
    


Ответы

Ответ 1



1. Суть проблемы Откроем консоль: Ctrl+` (машинописный обратный апостроф, символ расположен на той же клавише, где кириллическая «ё») → вводим в открывшееся поле sublime.log_input(True). Нажмём сначала Ctrl+k в английской раскладке, затем Ctrl+л в русской. Посмотрим, что выведется в консоли: key evt: control+k key evt: control+k Если с системой нет проблем, результат должен быть аналогичным. А теперь нажмём k в английской, потом л в русской. chr evt: k (0x6b) chr evt: л (0x43b) Sublime Text воспринимает k и л как разные символы, если они нажимаются не вместе со служебными клавишами. Если используется двойное нажатие хоткеев, Ctrl+k,k и Ctrl+л,л Sublime Text также видит по-разному. Т.е. когда в качестве шортката используется одинарный символ, чтобы результат в русской раскладке был таким же, как в английской, придётся раскладку переключать. Так что если будете сами задавать сочетание для команды, без использования служебных клавиш, продублируйте запись и для русской раскладки, пример: // Предпросмотр вики-страницы в плагине Mediawiker { "keys": ["ctrl+7", "p"], "command": "mediawiker_preview" }, { "keys": ["ctrl+7", "з"], "command": "mediawiker_preview" }, 2. Попытки урегулирования проблемы с разработчиками Заявка в issue tracker Sublime Text висит долгое время, её приоритет обозначен как «minor». Есть предложение использовать в качестве идентификатора клавиши keycode вместо keysym, но по состоянию на сентябрь 2016 оно не реализовано на практике. Разработчик плагинов отказался принимать мой pull request, добавляющий хоткеи для русской раскладки. Значит, придётся настраивать Sublime Text для русской раскладки самостоятельно. 3. Решение На примере плагина BetterFindBuffer. Устанавливаем плагин PackageResourceViewer: Ctrl+Shift+P → PackageResourseViewer:Open Resourse (благодаря fuzzy поиску достаточно набрать просто prvor) → MarkdownEditing → Default.sublime-keymap (иногда Default(ваша операционная система).sublime-keymap) → в открывшемся файле ищем шорткаты, состоящие из одного символа, которого в русской раскладке нет или же он расположен на другой клавише. Пример: { "keys": ["o"], "command": "find_in_files_open_file", "context": [ { "key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, Заменяем o на соответствующую ей в русской раскладке букву, это щ: { "keys": ["щ"], "command": "find_in_files_open_file", "context": [ { "key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, Preferences → Key Bindings - User → вставляем в открывшийся файл код с буквой щ. Проделываем данное действие со всеми шорткатами без служебных клавиш, где это необходимо. После того, как произвели действия, проверьте, всё ли работает нормально. Пример: в Preferences → Key Bindings - Default есть такой код: { "keys": ["\""], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true }, { "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true }, { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true } ] }, (\" — символ "кавычки-ёлочки". Для использования кавычки как литерала в JSON-файлах требуется её экранировать.) Вы вставили в свой кеймап: { "keys": ["э"], "command": "insert_snippet", "args": {"contents": "\"$0\""}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|\\}|>|$)", "match_all": true }, { "key": "preceding_text", "operator": "not_regex_contains", "operand": "[\"a-zA-Z0-9_]$", "match_all": true }, { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true } ] }, Но теперь когда вы просто вводите букву э, вводятся двойные кавычки. Код с буквой э не нужен, удаляем его из нашего файла. Проверяем — буква э пишется теперь нормально. Если после ваших действий с назначением команд клавишам русской раскладки символы русской раскладки заработают неправильно, значит, скорее всего, вы вставили лишнее, подлежащее удалению. 4. Поддержка русской раскладки для дефолтных хоткеев без служебных клавиш Можно добавлять строки ниже в файл, открывающийся после Preferences → Key Bindings - User, сразу после установки Sublime Text, чтобы не приходилось переключаться при оборачивании текста в различные виды кавычек и скобок, а также при использовании Vintage Mode. Проверял, ошибок возникнуть не должно. Обёртка текста в скобки и кавычки // // // Дефолтные сочетания в русской раскладке клавиатуры // // // Выделение {фигурными скобками} { "keys": ["Х"], "command": "wrap_block", "args": {"begin": "{", "end": "}"}, "context": [ { "key": "indented_block", "match_all": true }, { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, { "key": "following_text", "operator": "regex_match", "operand": "^$", "match_all": true }, ] }, { "keys": ["Х"], "command": "insert_snippet", "args": {"contents": "{${0:$SELECTION}}"}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true } ] }, { "keys": ["Ъ"], "command": "move", "args": {"by": "characters", "forward": true}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "^\\}", "match_all": true } ] }, // Выделение "кавычками-ёлочками" { "keys": ["Э"], "command": "insert_snippet", "args": {"contents": "\"${0:$SELECTION}\""}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true } ] }, { "keys": ["Э"], "command": "move", "args": {"by": "characters", "forward": true}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "^\"", "match_all": true }, { "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true }, { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.double - punctuation.definition.string.end", "match_all": true }, ] }, // Выделение 'одинарными кавычками' { "keys": ["э"], "command": "insert_snippet", "args": {"contents": "'${0:$SELECTION}'"}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true } ] }, { "keys": ["э"], "command": "move", "args": {"by": "characters", "forward": true}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "^'", "match_all": true }, { "key": "selector", "operator": "not_equal", "operand": "punctuation.definition.string.begin", "match_all": true }, { "key": "eol_selector", "operator": "not_equal", "operand": "string.quoted.single - punctuation.definition.string.end", "match_all": true }, ] }, // Выделение [квадратными скобками] { "keys": ["х"], "command": "insert_snippet", "args": {"contents": "[$SELECTION]$0"}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true } ] }, { "keys": ["х"], "command": "insert_snippet", "args": {"contents": "[${0:$SELECTION}]"}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true } ] }, { "keys": ["ъ"], "command": "move", "args": {"by": "characters", "forward": true}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "^\\]", "match_all": true } ] }, Vintage Mode Вставляем отсюда, (на всякий случай архивная копия, также см. ответ. 5. Поддержка русской раскладки в некоторых плагинах Чтобы не мучились настраивать русскую раскладку для этих плагинов самостоятельно, готовый код: BetterFindBuffer // BetterFindBuffer, русская раскладка { "keys": ["щ"], "command": "find_in_files_open_file", "context": [ { "key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, { "keys": ["ф"], "command": "find_in_files_open_all_files", "context": [ { "key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, { "keys": ["т"], "command": "find_in_files_jump_file", "context": [ { "key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, { "keys": ["з"], "command": "find_in_files_jump_file", "args": { "forward": false }, "context": [ { "key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, { "keys": ["о"], "command": "find_in_files_jump_match", "context": [ { "key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, { "keys": ["л"], "command": "find_in_files_jump_match", "args": { "forward": false }, "context": [ { "key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, { "keys": ["а"], "command": "bfb_fold_and_move_to_next_file", "context": [ {"key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, { "keys": [","], "command": "bfb_toggle_popup_help", "context": [ {"key": "selector", "operator": "equal", "operand": "text.find-in-files" } ] }, Markmon // Markmon, русская раскладка { "keys": ["ctrl+k", "ь"], "command": "markmon_toggle", "args": { "enable": true } }, MarkdownEditing // MarkdownEditing, русская раскладка { "keys": ["ё"], "command": "insert_snippet", "args": {"contents": "`${0:$SELECTION}`"}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true } ] }, { "keys": ["ё"], "command": "run_macro_file", "args": {"file": "Packages/MarkdownEditing/macros/Skip Closing Character.sublime-macro"}, "context": [ { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "^`", "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true } ] }, { "keys": ["Ё"], "command": "insert_snippet", "args": {"contents": "~~${0:$SELECTION}~~"}, "context": [ { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true }, { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true }, { "key": "selector", "operator": "not_equal", "operand": "markup.raw", "match_all": true } ] }, { "keys": ["№"], "command": "insert_snippet", "args": {"contents": "#${0: ${SELECTION/(^ | $)//g} }#"}, "context": [ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true }, { "key": "preceding_text", "operator": "not_regex_contains", "operand": "#{6}", "match_all": true }, { "key": "setting.mde.match_header_hashes", "operator": "equal", "operand": true }, { "key": "selector", "operator": "not_equal", "operand": "markup.raw", "match_all": true } ] }, { "keys": ["№"], "command": "insert_snippet", "args": {"contents": "#${0: ${SELECTION/(^ | $)//g}}"}, "context": [ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true }, { "key": "preceding_text", "operator": "not_regex_contains", "operand": "#{6}", "match_all": true }, { "key": "setting.mde.match_header_hashes", "operator": "equal", "operand": false }, { "key": "selector", "operator": "not_equal", "operand": "markup.raw", "match_all": true } ] }, { "keys": ["№"], "command": "run_macro_file", "args": {"file": "Packages/MarkdownEditing/macros/Padded Headline.sublime-macro"}, "context": [ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true }, { "key": "preceding_text", "operator": "regex_contains", "operand": "#{6}", "match_all": true }, { "key": "following_text", "operator": "regex_contains", "operand": "#+", "match_all": true }, { "key": "setting.mde.match_header_hashes", "operator": "equal", "operand": true }, { "key": "selector", "operator": "not_equal", "operand": "markup.raw", "match_all": true } ] }, { "keys": ["№"], "command": "run_macro_file", "args": {"file": "Packages/MarkdownEditing/macros/Padded Headline.sublime-macro"}, "context": [ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true }, { "key": "preceding_text", "operator": "regex_contains", "operand": "#{6}", "match_all": true }, { "key": "setting.mde.match_header_hashes", "operator": "equal", "operand": false }, { "key": "selector", "operator": "not_equal", "operand": "markup.raw", "match_all": true } ] }, { "keys": ["Ю"], "command": "run_macro_file", "args": {"file": "Packages/MarkdownEditing/macros/Convert to Blockquote.sublime-macro"}, "context": [ { "key": "selection_empty", "operator": "equal", "operand": false, "match_all": true }, { "key": "selector", "operator": "equal", "operand": "text.html.markdown", "match_all": true }, { "key": "selector", "operator": "not_equal", "operand": "markup.raw", "match_all": true } ]

четверг, 13 февраля 2020 г.

Несколько вопросов по редактору Sublime Text

#вёрстка #ide #редактор #sublime_text


Поставил Sublime Text 2, пытаюсь привыкнуть.


Вопрос про кодировку. Во многих редакторах можно узнать кодировку файла и даже увидеть
её в строке состояния (UTF-8/ANSI). 

В Sublime можно только "сохранить в кодировке.." или "открыть в кодировке.." но изначальную
кодировку узнать невозможно. 

Собственно вопрос: как вывести информацию о кодировке в строку состояния. Или хотя
бы добавить пункт в меню "file->encoding".
У меня часть файлов с php-скриптами сохранены с расширением .inc 
Как заставить Sublime понимать их как пхп-шные? По умолчанию он принимает файл с
расширением .inc как HTML файл (пишет в строке состояния "HTML")

Вроде бы есть плагин DetectSyntax, но мне кажется это должно решаться проще, в настройках.


// что-то типа:
// ассоциировать расширения файлов
"associate_extension" : "inc,tpl,wtf - php"


Вопрос про закладки (Bookmarks): 
можно ли делать нумерованные закладки (или может "именные")? 

Например, в PHP ExpertEdit - можно закладки alt+n и соответственно переходить по
закладкам ctrl+n

Сейчас в Sublime устроено так, что добраться до нужной закладки можно только перебором.


//Можно было бы сделать по аналогии с поиском методов: 
ctrl+shit+p -> @ -> method name
ctrl+r -> @ -> method  name

//а для закладок сделать так (бы):
ctrl+shit+p -> # -> bookmark number or name




Соответственно, при установке закладок предлагать вводить номер или титл.
    


Ответы

Ответ 1



Решение для Sublime Text 3: Preferences → Settings - User. В открывшемся файле между {} добавить параметр show_encoding со значением true: "show_encoding": true, // Показывать в Status Bar кодировку файла В правом углу Status Bar появится новая кнопка, где высвечивается кодировка открытого файла: Параметром default_encoding задаётся кодировка, используемая для открытия файлов с неопределённой кодировкой и сохранения новых. Значение по умолчанию — "UTF-8", в большинстве случаев здесь лучше ничего не трогать. А вот строку "fallback_encoding": "Cyrillic (Windows 1251)", // Используемая кодировка, когда кодировка не определяется автоматически необходимо добавить в открывающийся после Preferences → Settings - User файл сразу же после установки Sublime Text 3, иначе кириллические тексты отобразятся кракозябрами, да если ещё их сохранить, то обратная раскодировка декодером может и не получиться. Открываем любой документ с расширением .inc . View → Syntax → Open all with current extention as... → PHP. После этого ко всем файлам с расширением .inc будет применена php-подсветка. Плагин Sublime Bookmarks: Спасибо.

Ответ 2



package control:install package > status bar extension выбор подсветки в правом нижнем углу statusbar-а. ctrl+p - переход по закладкам

Как в Sublime Text сделать множественную замену?

#регулярные_выражения #sublime_text


Русскую букву о мне нужно заменить на {о|o}, русскую букву а на {a|a} и так далее,
список большой. Возможно ли это средствами Sublime Text? 
    


Ответы

Ответ 1



Делаю в Notepad++. Включена замена с регулярными выражениями, новые строки отключены. Отмечен флажок Учитывать регистр. Начальный текст БЭМ в том числе ориентировался на максимизацию производительности. Один класс - это очень быстро. Один тег - тоже. А вот атрибуты - это уже гораздо медленее. А так, по самой идеологии проблем не вижу. Ещё по поводу валидности разметки - кастомные теги должны содержать дефис. Замена 1 Добавляем в конец всех строк посторонние символы, которые мы собираемся вставить в замене в зависимости от найденных: $ aeocrAEOCM БЭМ в том числе ориентировался на максимизацию производительности.aeocrAEOCM Один класс - это очень быстро. Один тег - тоже.aeocrAEOCM А вот атрибуты - это уже гораздо медленее.aeocrAEOCM aeocrAEOCM А так, по самой идеологии проблем не вижу.aeocrAEOCM aeocrAEOCM Ещё по поводу валидности разметки - кастомные теги должны содержать дефис.aeocrAEOCM Упрощающий шаг Создаём новый документ со следующим содержимым: аеосгАЕОСМaeocrAEOCM В нём выполняем замену (.)(?=.{9}(.)) $1\(?=.*\($2\)\)| Результат: а(?=.*(a))|е(?=.*(e))|о(?=.*(o))|с(?=.*(c))|г(?=.*(r))|А(?=.*(A))|Е(?=.*(E))|О(?=.*(O))|С(?=.*(C))|М(?=.*(M))|aeocrAEOCM Замена 2 Собственно выполняем нужную замену: (?=а(?=.*(a))|е(?=.*(e))|о(?=.*(o))|с(?=.*(c))|г(?=.*(r))|А(?=.*(A))|Е(?=.*(E))|О(?=.*(O))|С(?=.*(C))|М(?=.*(M)))(.) {$11|$1$2$3$4$5$6$7$8$9$10} БЭ{М|M} в т{о|o}м чи{с|c}л{е|e} {о|o}ри{е|e}нтир{о|o}в{а|a}л{с|c}я н{а|a} м{а|a}к{с|c}имиз{а|a}цию пр{о|o}изв{о|o}дит{е|e}льн{о|o}{с|c}ти.aeocrAEOCM {О|O}дин кл{а|a}{с|c}{с|c} - эт{о|o} {о|o}ч{е|e}нь бы{с|c}тр{о|o}. {О|O}дин т{е|e}{г|r} - т{о|o}ж{е|e}.aeocrAEOCM {А|A} в{о|o}т {а|a}трибуты - эт{о|o} уж{е|e} {г|r}{о|o}р{а|a}зд{о|o} м{е|e}дл{е|e}н{е|e}{е|e}.aeocrAEOCM aeocrAEOCM {А|A} т{а|a}к, п{о|o} {с|c}{а|a}м{о|o}й ид{е|e}{о|o}л{о|o}{г|r}ии пр{о|o}бл{е|e}м н{е|e} вижу.aeocrAEOCM aeocrAEOCM {Е|E}щё п{о|o} п{о|o}в{о|o}ду в{а|a}лидн{о|o}{с|c}ти р{а|a}зм{е|e}тки - к{а|a}{с|c}т{о|o}мны{е|e} т{е|e}{г|r}и д{о|o}лжны {с|c}{о|o}д{е|e}рж{а|a}ть д{е|e}фи{с|c}.aeocrAEOCM Замена 3 Удаляем хвосты с мусором, а именно, заменяем aeocrAEOCM$ на пустоту. Не потерять знак $ в конце. Готово: БЭ{М|M} в т{о|o}м чи{с|c}л{е|e} {о|o}ри{е|e}нтир{о|o}в{а|a}л{с|c}я н{а|a} м{а|a}к{с|c}имиз{а|a}цию пр{о|o}изв{о|o}дит{е|e}льн{о|o}{с|c}ти. {О|O}дин кл{а|a}{с|c}{с|c} - эт{о|o} {о|o}ч{е|e}нь бы{с|c}тр{о|o}. {О|O}дин т{е|e}{г|r} - т{о|o}ж{е|e}. {А|A} в{о|o}т {а|a}трибуты - эт{о|o} уж{е|e} {г|r}{о|o}р{а|a}зд{о|o} м{е|e}дл{е|e}н{е|e}{е|e}. {А|A} т{а|a}к, п{о|o} {с|c}{а|a}м{о|o}й ид{е|e}{о|o}л{о|o}{г|r}ии пр{о|o}бл{е|e}м н{е|e} вижу. {Е|E}щё п{о|o} п{о|o}в{о|o}ду в{а|a}лидн{о|o}{с|c}ти р{а|a}зм{е|e}тки - к{а|a}{с|c}т{о|o}мны{е|e} т{е|e}{г|r}и д{о|o}лжны {с|c}{о|o}д{е|e}рж{а|a}ть д{е|e}фи{с|c}.

Ответ 2



Есть подозрение, что данная задача является дубликатом. Регулярное выражение для замены ровно то же как и в этом ответе: https://ru.stackoverflow.com/a/512787/481 но строка замены: {$1|$2} В ссылке выше подробно расписано как сделать подобную замену одним регулярным выражением в один проход.

Выделение текущего выбранного файла в папках проекта в sublime?

#sublime_text


Как настроить, чтобы при клике на дерево файлов и каталогов проекта (слева), текущий
выбранный файл как либо выделялся в дереве? 


    


Ответы

Ответ 1



Нажмите правой кнопкой мыши в основной области, и в контекстном меню выберите пункт Reveal in Side Bar, текущий файл будет подсвечен в дереве файлов и каталогов.

Ответ 2



Preferences → Browse Paskages → User, создаём файл Default.sublime-theme, если он ещё не создан, и между [] вставляем в него следующий код: // Свойства имени открытого на данную минуту файла в сайдбаре { "class": "sidebar_label", "parents": [{"class": "tree_row", "attributes": ["selected"]}], "color": [128, 0, 128, 255], "font.bold": true, }, Где color — цвет открытого на данную минуту файла в RGBA, а свойство font.bold — применять или нет выделение жирным шрифтом, по умолчанию false. Допустим, если я открыл в моём проекте файл examples.html, соответствующая часть сайдбара будет выглядеть следующим образом: Спасибо.

пятница, 31 января 2020 г.

Подсветка закрывающихся тегов (Highlighting matching tags Sublime Text)

#sublime_text


Возможно ли кастомизировать подстветку закрывающихся тегов в Sublime Text 3 подобно
тому, как на скриншоте ниже(Так реализовано в Brackets)?.
Есть плагин для этих целей BracketHighlighter (https://github.com/facelessuser/BracketHighlighter),
но перебрав имеющиеся конфиги, не 


    


Ответы

Ответ 1



Подчерк, а не подсветка тегов и скобок в Sublime Text 3 реализовывается без плагинов. Для начала на всякий случай кликаем на Preferences → Settings - User , в открывшийся файл между {} добавляем следующие строки: "match_brackets": true, "match_brackets_angle": true, "match_brackets_square": true, "match_brackets_braces": true, "match_brackets_content":true, "match_tags": true, Сохраняем. В Sublime Text 3 всем этим параметрам кроме match_brackets_angle присвоено значение true, но мало ли, в последующих сборках могут и поменять на false. match_brackets — подчёркивание различных разновидностей скобок, match_tags — подчерк тегов. Далее открываем файл привычной цветовой схемы с расширением tm.Theme. В самом его начале находим примерно следующие строки ( значения цветов могут отличаться от приведённых в примере): lineHighlight lightslategray foreground #ffdab9 invisibles #BFBFBF selection dimgray Где-нибудь между ними до закрывающих тегов вставляем следующие теги: bracketContentsForeground yellow bracketContentsOptions underline bracketsForeground cyan bracketsOptions squiggly_underline tagsForeground lawngreen tagsOptions underline Пояснения: bracketContentsForeground — цвет подчёркивания любых скобок, между которыми расположена каретка. Между тегами вписывается цвет, лучше в формате HEX, чем X11, поскольку в Sublime Text могут возникнуть проблемы как минимум с отображением цветов aqua, fuchsia и lime. bracketContentsOptions — стиль подчёркивания скобок, между которыми расположена каретка. Значения: underline — подчерк прямой линией, stippled_underline — пунктирной, squiggly_underline — волнистой. По умолчанию underline. bracketsForeground — цвет подчёркивания скобок, когда рядом со скобками расположена каретка. Между тегами вписывается цвет. bracketsOptions — стиль подчёркивания скобок, рядом с которыми расположена каретка. Значения: underline — подчерк прямой линией, stippled_underline — пунктирной, squiggly_underline — волнистой. По умолчанию underline. tagsForeground — цвет подчёркивания тегов. Когда каретка находится внутри тега, подчёркивается как он сам, так и соответствующий ему открывающий/закрывающий тег. tagsOptions — стиль подчёркивания тегов. Значения: underline — подчерк прямой линией, stippled_underline — пунктирной, squiggly_underline — волнистой. По умолчанию stippled_underline . Мне этого вполне хватает. Спасибо.

Ответ 2



Лучше, чем так, воспользоваться плагином BracketHighlighter. Частая проблема — скобки и кавычки как в коде, так и gutter (полоса, где номера строк) подсвечиваются тем же цветом, что и текст. Чтобы её исправить, необходимо: Preferences → Package Settings → BracketHighlighter → Bracket Settings - User → в открывшийся файл вставляем следующий код → сохраняем файл. { "bracket_styles": { // This particular style is used to highlight // unmatched bracket pairs. It is a special // style. "unmatched": { "icon": "question", "color": "brackethighlighter.unmatched", "style": "highlight" }, // User defined region styles "curly": { "icon": "curly_bracket", "color": "brackethighlighter.curly", "style": "highlight" }, "round": { "icon": "round_bracket", "color": "brackethighlighter.round", "style": "outline" }, "square": { "icon": "square_bracket", "color": "brackethighlighter.square", "style": "outline" }, "angle": { "icon": "angle_bracket", "color": "brackethighlighter.angle", "style": "outline" }, "tag": { "icon": "tag", "color": "brackethighlighter.tag", "style": "outline" }, "single_quote": { "icon": "single_quote", "color": "brackethighlighter.quote", "style": "outline" }, "double_quote": { "icon": "double_quote", "color": "brackethighlighter.quote", "style": "outline" }, "regex": { "icon": "regex", "color": "brackethighlighter.quote", "style": "outline" } } } В файл своей цветовой схемы с расширением tmTheme (если не знаете, как его открыть, см. здесь в самом начале) где-нибудь между тегами вставляем следующие строки: name Unmatched scope brackethighlighter.unmatched settings foreground #FD971F name BracketHighlighter: Curly scope brackethighlighter.curly settings foreground #FF0000 name BracketHighlighter: Round scope brackethighlighter.round settings foreground lightblue name BracketHighlighter: Square scope brackethighlighter.square settings foreground pink name BracketHighlighter: Angle scope brackethighlighter.angle settings foreground #FEFE22 name BracketHighlighter: Bracket Tag scope brackethighlighter.tag settings foreground violet name BracketHighlighter: Single Quote | Double Quote | Regex scope brackethighlighter.quote settings foreground palegreen Между тегами под foreground меняем цвета, как душе угодно. Лучше прописывать их в HEX, а не X11 colors, поскольку в Sublime Text 3 могут некорректно отображаться как минимум цвета aqua, fuchsia и lime. Скобки, кавычки и их выделения в тексте должны получиться разноцветными:

Иконки файлов в сайдбаре Sublime Text 3

#sublime_text #sublime_text_3


Установил новую тему для Sublime Text 3 только ради иконок файлов в Sidebar. Но на
деле оказалось всё не так радужно.
Как должно быть:

  

Как у меня:  

 

Да и иконка .sass не та:

   

То есть Sublime Text не понимает эти типы файлов. И во всех темах есть этот косяк.
Главный трабл в том что я специально скачал чистую portable версию, и даже в ней не
работает. Да и вообще есть несоответствия с многими иконками. В чём может быть проблема?
    


Ответы

Ответ 1



Во-первых, скачаем выбранную Вами Material Theme, перейдём в папку icons и посмотрим, какая иконка соответствует JavaScript. Такая, как на Вашем скриншоте. В истории коммитов копаться неохота, однако предположу, что девелоперы сменили иконку, забыв отразить это в скриншотах на заглавной. Если Вам не нравятся предлагаемые разработчиками тем, можете установить вручную в качестве иконки для используемых Вами языков программирования/разметки и прочих файлов любое изображение. Для начала переместим требуемые изображения в какую-нибудь папку. Ссылки на некоторые наборы иконок выложены в данном треде на форуме Sublime Text, мы воспользуемся файлами из Material Theme, пусть для Sass там выбрана на мой взгляд неудачная иконка. Preferences → Browse Paskages... → User. Создаём папку Theme - Default, если она ещё не создана. Название для папки не я придумал, оно обычно используется. Копируем туда всё — или только изображения, которые пригодятся, — из папки icons Material Theme. Preferences → Browse Paskages... → User → Theme - Default → создаём папку Preferences, в которой будут располагаться файлы, о которых зайдёт речь ниже. В один всё у меня вместить не получается, придётся с каждой иконкой связывать отдельный файл с расширением tmPreferences. Ruby В новый файл Ruby.tmPreferences вставляем XML-конструкцию ниже, и сохраняем его: scope source.ruby settings icon Theme - Default/file_type_ruby Между вторыми тегами указывается путь к файлу иконки и его имя без расширения. Sass Предположу, что Вы получили неудовлетворительные результаты, поскольку не подключили отсутствующий по умолчанию в сборке Sublime Text 3 синтаксис Sass. Через Package Control устанавливаем плагин, который в Package Control (имена плагинов в репозиториях, на сайте Package Control и самом Package Control могут отличаться) называется просто Sass. Теперь можно связывать sass-файлы с иконками. Создаём файл Sass.tmPreferences и вставляем в него код. scope source.sass settings icon Theme - Default/file_type_sass Markdown Здесь между первыми тегами недостаточно по аналогии вписать source.markdown или source.md, и такое может случиться для других языков разметки/программирования. Потребуется вставить «область видимости», scope. Как её получить, я очень подробно расписал в данном ответе. Итак, достаём область видимости: Сколько бы записей в ней не содержалось, нас интересует только первая, text.html.markdown.gfm, которую мы и вставляем в файл Markdown.tmPreferences: scope text.html.markdown.gfm settings icon Theme - Default/file_type_markdown Чтобы не вставлять код каждый раз вручную, рекомендую скачать набор из 70 tm.Preferences файлов для распространённых компьютерных языков. Изображения К примеру, у бинарных, исполняемых файлов или картинок области видимости посмотреть не получится. Чтобы изменить им иконки, необходимо добавить файлы со следующими названиями в папку, где лежит файл активной темы с расширением tmTheme, у меня он располагается по пути Preferences → Browse Paskages... → User. file_type_binary.png file_type_default.png file_type_image.png file_type_markup.png file_type_source.png file_type_text.png Из названий понятно для чего они предназначены. Напротив наших изображений теперь будет стоять иконка с названием file_type_image.png Если сделали всё по данной инструкции, у файлов с соответствующими расширениями в сайдбаре должны появиться вот такие иконки. Буквально во всех темах, которые мне доводилось увидеть, за редким исключением используются одни и те же иконки. В светлых темах многие из них плохо видны, допустим, тот же оранжевый значок JS на жёлтом фоне. А иконки, взятые со сторонних сайтов, выглядят не очень красиво. Легко сменить цвета самому можно, например, в GIMP при помощи функции Hue-Saturation. Открываем в этом графическом редакторе файл иконки → Tools → Color Tools → Hue-Saturation, и двигаем слайдеры, — изменение цвета достигается перемещением ползунка Hue: После того, как подобрали колор, яркость и насыщенность, File → Overwrite file_type_%Ваш тип файла%.png. Примеры изменённых мной таким образом иконок: file_type_js.png file_type_markdown.png file_type_source.png file_type_yaml.png Возможные баги Если вы скачали новую тему или схему, вне зависимости от того, будете ли использовать её или нет, иконки в сайдбаре могут пропасть. В консоли при этом выдаётся примерно следующая ошибка: Errors parsing theme: Rule is missing a class name Unable to decode Packages/User/Theme - Default/arrow_down_over.png pre session restore time: 0.3078 Устраняется проблема в 2 шага: Ctrl+Shift+P → Package Control: Remove Package → выбираем нашу тему/цветовую схему и удаляем её. Можно сообщить о проблеме разработчику темы/схемы. У меня портились файлы с расширением tm.Preferences, о которых говорилось выше. Вместо icons/file_type_ruby появлялись кракозябры. Откройте любой tm.Preferences файл, посмотрите, есть ли там какие-то кракозябры, и если да, то сделайте массовую замену кракозябр на корректные символы в папке, где хранятся tm.Preferences файлы, с помощью поиска Ctrl+Shift+F. После данных действий иконки вновь появлялись в моём сайдбаре.

Ответ 2



На момент написания ответа проблема решается следующим образом: запускаем Package Control: Install package (комбинация клавиш Ctrl+Shift+P) вводим A File Icon в поисковую строку и устанавливаем перезапускаем Sublime Text 3 и иконки автоматически подтягиваются Исходники лежат по ссылке: A File Icon

вторник, 28 января 2020 г.

Кодировка в Sublime Text 2

#sublime_text


Раньше был на Notepad++, сейчас решил осваивать новый для меня текстовый редактор.
Возник вопрос по поводу кодировки: где её задавать/изменять?
В Notepad++ у файла была кодировка UTF-8 (без BOM): открываю его в Sublime Text и
вижу, что кириллица отображается некорректно.
    


Ответы

Ответ 1



У меня в меню File есть пункт Reopen With Encoding... Однако, я использую Mac-версию, но думаю, что и на остальных есть такая.

Ответ 2



для Sublime 3 preferences -> settings User -> "default_encoding": "UTF-8 with BOM"

Ответ 3



Про кодировки Sublime Text 3 я расписал в пункте 1 данного ответа. Также помимо функции Reopen With Encoding, упомянутой в ответе VioLet, мы можем и сохранять файлы в нужной нам кодировке: File → Save with Encoding. Спасибо.

воскресенье, 12 января 2020 г.

Не подсвечивается sass синтаксис в Sublime Text

#css #sublime_text #sass


Установил Ruby, потом делал по инструкции через командную строку:


gem install sass
gem install compass
d:
cd FrontEnd - папка моего проекта
compass init

Все эти операции проделал, появились папки, файлы в моем проекте. Зашел в папку sass/screen.scss
и тут возникли проблемы, Sublime видит его как обычный блокнотовский документ, то есть
расширение scss открыто через "All Files" - искал расширение .scss - не нашел. Что
я только не пробовал делать, не получается исправить эту проблему.
Вышлю для наглядности скрин



    


Ответы

Ответ 1



для подстветки нужен плагин Sass для сублайма https://packagecontrol.io/packages/Sass

суббота, 11 января 2020 г.

Компиляция скрипта на Java SE7 в Sublime Text 2

#java #компиляция #sublime_text


Как скомпилировать скрипт на Java SE7 в Sublime Text 2?

Как там настроить компилятор под Java?
    


Ответы

Ответ 1



Я все таки рекомендую использовать eclipse/idea/emacs/vim. Но если сильно-сильно хочется... В принципе ничего не нужно настраивать - все уже есть. После того, как откроете свой жава файл, просто зайдите в меню Tools-> Build System и убедитесь, что там выбрано JavaC. Если нет - выбирайте. Все, теперь можно жать Ctrl+B и саблим запустит javac для компиляции. Установить жаву конечно же нужно. И настроить, что бы она была в путях. На моем ноуте под Fedora все завелось сразу.

Ответ 2



В меню выберите Tools-> Build System -> New Build System, после чего откроется новая вкладка, куда нужно вставить следующий текст: { "cmd": ["javac", "$file_name","&&","java", "$file_base_name"], "shell": true, "path": "c:/Program Files/Java/jdk1.8.0_60/bin", "file_regex": "^(...*?):([0-9]*):?([0-9]*)", "selector": "source.java" } Параметр "path" указывает путь к JDK, если он у вас отличается, измените на свой. Либо можете удалить всю строку, если у вас путь прописан в системной переменной. Теперь нажмите комбинацию "ctrl + s" и сохраните файл настроек выполнения под любым именем, к примеру "JavaCompileRun". Последним шагом выбираем в меню пункт Tools-> Build System -> JavaCompileRun и дальше, при нажатии "ctrl + b" открытый файл c java-кодом будет выполнятся.

пятница, 10 января 2020 г.

Завис Sublime Text 3 при работе с внушительным php файлом при сохранении

#sublime_text #sublime_text_3


Собственно, вопрос, что делать? Кто виноват — понятно. Есть ли возможность спасти
скрипт? Может, у Сублайма есть местечко, куда он сохраняет временные файлы? Или другие
варианты? ОС — Ubuntu 14.04.
    


Ответы

Ответ 1



Вопрос решился. Сперва полез смотреть где бы subl мог хранить сессии. Обнаружил их в домашней папке пользователя в каталоге /home/user/.config/sublime-text-3/local. В файле *.sublime_session. Открываю и вижу JSON массив. И, о чудо, вижу знакомый код. Правда идет он одной строкой и символы конца строки проставлены как /n. Отлично, скопировав, решил уйти в ребут, т.к. субл намертво завис и закрываться не хотел даже через htop. После ребута открыл subl и случилось самое величайшее во всей этой истории - последний экземпляр кода висел как несохраненная вкладка. Спасибо команде Sublime! Обновление Ах и еще вот что https://github.com/akalongman/sublimetext-autobackups. Замечательный антисединный плагин.

вторник, 31 декабря 2019 г.

Тонкая настройка LiveReload под sublime Text3

#sublime_text #sublime_text_3


Нужно, чтобы LiveReload отслеживал определенные типы файлов, а не все.
Сейчас в настройках пользователя такой код:

{
  "enabled_plugins": [
      "SimpleReloadPlugin",
      "SimpleRefresh"
  ]
}

    


Ответы

Ответ 1



Одним из решений может быть выкинуть сервер LiveReload, который поддерживает пакет для Sublime Text. Это не единственная реализация LiveReload-сервера. Есть также guard-livereload: плагин для системы Guard для выполнения действий при изменении файлов. Он написан на Ruby и потому для работы требует установленного Ruby. Порядок установки минимально отличается от других плагинов для Guard, вроде guard-haml, об установке и запуске которого я уже писал ранее. В Guardfile можно задать шаблоны путей, изменение файлов по которым даст сигнал клиенту LiveReload для обновления. В README есть пример: guard 'livereload' do watch(%r{app/views/.+\.(erb|haml|slim)}) watch(%r{app/helpers/.+\.rb}) watch(%r{public/.+\.(css|js|html)}) watch(%r{config/locales/.+\.yml}) end Код выше, разумеется, на Ruby. Каждая строчка watch добавляет на отслеживание пути, подходящие под регулярное выражение, относительно корня проекта (рабочей директории, где запущен guard). Регулярка записывается /так/, %r{так}, или другими способами. Само выражение можно проверить на Rubular или просто в Interactive Ruby (IRB). Guard можно загрузить и другими задачами, связанными с реакцией на изменение файлов. См. список плагинов Guard.

Ответ 2



Так как у "LiveReload" нет такой опции, которая могла бы решить мою проблему, я обратился за помощью к другим инструментам. Конкретно "Browsersync". Считаю хорошей альтернативой. Исполняет самую главную функцию "LiveReload", но дополняет её многими полезными инструментами и позволяет действительно тонкую настройку. А самое главное преимущество перед тем же "LiveReload" - это возможность синхронизации на разных устройствах в одной сети (ноут, смартфон, ПК и тд.). Так что хоть ответ выше напрямую связан с темой моего вопроса - я решил свою проблему другим методом, который решил не саму суть вопроса, но поставленную задачу - тонкая настройка при автообновлении! Удалил плагин LiveReload; Установил Node.js; Поставил Browsersync (npm install -g browser-sync);

Ответ 3



Еще есть браузер для вебдевелоперов Blisk на основе Chromium, умеет мониторить директории на изменения в файлах.

Скрытие ответов в тестах

#регулярные_выражения #sublime_text #sublime_text_3 #pcre


Здравствуйте, имеются готовые текстовые документы с тестовыми заданиями. Их содержимое:

Тема 1: Стихийные бедствия.
Автор: Булат Фаттахов
10. Таким женским именем звали ураган, сильно повредивший Новый Орлеан.
Ответ: Катрина.
20. "Дождь лил четыре года, одиннадцать месяцев и два дня" именно там.
Ответ: в Макондо.
30. В 1883 году было извержение вулкана именно на этом острове.
Ответ: Кракатау (Остров назывался так же как и вулкан).
40. Армянские города Гюмри и Ванадзор, сильно пострадавшие во время землетрясения
1988 года, в советское время носили такие названия.
Ответ: Ленинакан и Кировокан.
50. Крупнейшее за всю историю человечества это стихийное бедствие произошло в 1875
году в США, а не в Египте двумя тысячами годами ранее.
Ответ: Нашествие саранчи.

Тема 2: Города России.
Автор: Булат Фаттахов
10. Это крупнейший город России после Москвы.
Ответ: Санкт-Петербург.
20. Москва крупнейший город России, а Тольятти тоже крупнейший город в России среди
таких.
Ответ: Не являющийся столицей региона.
30. Это - крупнейший город самого большого острова России.
Ответ: Южно-Сахалинск.
40. Именно в этом городе происходит действие сериала "Счастливы вместе".
Ответ: Екатеринбург.
50. А именно этот город является самым западным городом России.
Ответ: Балтийск.


И так на протяжении всех файлов. я не хочу сразу видеть то, что содержится после
«Ответ». Нужно, чтобы ответы изначально были скрыты, становясь видимыми только тогда,
когда пользователь выполняет какое-то действие, например, нажимает на «Развернуть ответ».

Методы не имеют значения. Да, можно заключить ответы под спойлеры — в HTML, например,
проще всего в тэг  — Ответ:
Текст ответа
(что он не поддерживается IE и Firefox, ничего страшного) . Но как выполнить множественные замены (учитывая, что ответы могут быть в несколько строк), например, при помощи программы Sublime Text, поддерживающей регулярные выражения PCRE? Ответ: 'Текст ответа' 20. → Ответ:
'Текст ответа'
20. Ответ: 'Текст ответа' Тема → Ответ:
'Текст ответа'
Тема Спасибо.


Ответы

Ответ 1



Если в конце ответа обязательно цифра следующего вопроса или пустая строка, за которые можно зацепиться, то в Sublime можно так: Find What: ^Ответ: ((.|\n)+?)\n([0-9\n]) Replace With: Ответ:
\1
\n\3 (где \1 и \3 означают содержимое первой и третьей пар скобок в регулярке) (Немного пояснений: (.|\n)+ — берём один или больше любых символов, даже перенос строки, а +? — включаем ленивый режим работы вместо жадного, чтобы регулярка не считала одним ответом всё с начала первого ответа до конца последнего)

Ответ 2



В Notepad++ замена регулярные выражения с отмеченным флажком И новые строки. Исходный текст Тема 1: Стихийные бедствия. Автор: Булат Фаттахов 10. Таким женским именем звали ураган, сильно повредивший Новый Орлеан. Ответ: Катрина. 20. "Дождь лил четыре года, одиннадцать месяцев и два дня" именно там. Ответ: в Макондо. 30. В 1883 году было извержение вулкана именно на этом острове. Ответ: Кракатау (Остров назывался так же как и вулкан). 40. Армянские города Гюмри и Ванадзор, сильно пострадавшие во время землетрясения 1988 года, в советское время носили такие названия. Ответ: Ленинакан и Кировокан. 50. Крупнейшее за всю историю человечества это стихийное бедствие произошло в 1875 году в США, а не в Египте двумя тысячами годами ранее. Ответ: Нашествие саранчи. Тема 2: Города России. Автор: Булат Фаттахов 10. Это крупнейший город России после Москвы. Ответ: Санкт-Петербург. 20. Москва крупнейший город России, а Тольятти тоже крупнейший город в России среди таких. Ответ: Не являющийся столицей региона. 30. Это - крупнейший город самого большого острова России. Ответ: Южно-Сахалинск. 40. Именно в этом городе происходит действие сериала "Счастливы вместе". Ответ: Екатеринбург. 50. А именно этот город является самым западным городом России. Ответ: Балтийск. Замена 1: ((\d+)\. ((?!\r\nОтвет:).)+) Результат: Тема 1: Стихийные бедствия. Автор: Булат Фаттахов Ответ: Катрина. Ответ: в Макондо. Ответ: Кракатау (Остров назывался так же как и вулкан). Ответ: Ленинакан и Кировокан. Ответ: Нашествие саранчи. Тема 2: Города России. Автор: Булат Фаттахов Ответ: Санкт-Петербург. Ответ: Не являющийся столицей региона. Ответ: Южно-Сахалинск. Ответ: Екатеринбург. Ответ: Балтийск. Замена 2: (\r\n)(Ответ: ((?!\r\n(Тема:|\2
Результат: Тема 1: Стихийные бедствия. Автор: Булат Фаттахов
Ответ: Катрина.
Ответ: в Макондо.
Ответ: Кракатау (Остров назывался так же как и вулкан).
Ответ: Ленинакан и Кировокан.
Ответ: Нашествие саранчи. Тема 2: Города России. Автор: Булат Фаттахов
Ответ: Санкт-Петербург.
Ответ: Не являющийся столицей региона.
Ответ: Южно-Сахалинск.
Ответ: Екатеринбург.
Ответ: Балтийск.
Замена 3: (Тема (\d+).*?)(\r\n\1\3 Результат:

Тема 1: Стихийные бедствия. Автор: Булат Фаттахов

Ответ: Катрина.
Ответ: в Макондо.
Ответ: Кракатау (Остров назывался так же как и вулкан).
Ответ: Ленинакан и Кировокан.
Ответ: Нашествие саранчи.

Тема 2: Города России. Автор: Булат Фаттахов

Ответ: Санкт-Петербург.
Ответ: Не являющийся столицей региона.
Ответ: Южно-Сахалинск.
Ответ: Екатеринбург.
Ответ: Балтийск.
Замена 4: (id=sec-(\d+).*?)(id|for)(=chk)(\d+) \1\3\4-\2-\5 Нажимать Заменить все до тех пор, пока количество замен не станет равным нулю. Это будет в 2 раза больше нажатий, чем вопросов в самой большой теме. В принципе, можно уменьшить число нажатий вдвое. Результат:

Тема 1: Стихийные бедствия. Автор: Булат Фаттахов

Ответ: Катрина.
Ответ: в Макондо.
Ответ: Кракатау (Остров назывался так же как и вулкан).
Ответ: Ленинакан и Кировокан.
Ответ: Нашествие саранчи.

Тема 2: Города России. Автор: Булат Фаттахов

Ответ: Санкт-Петербург.
Ответ: Не являющийся столицей региона.
Ответ: Южно-Сахалинск.
Ответ: Екатеринбург.
Ответ: Балтийск.
Замена 5 (исправляем косяк, сделанный раньше) (\s*)() \2\1\3 Добавляем немного css: input { display: none; } input + label + div { display: none; } input:checked + label + div { display: block; } label { display: block; cursor: pointer; margin-top: 1em; } label:hover { color: blue; } label, div, h1 { white-space: pre-wrap; }

Тема 1: Стихийные бедствия. Автор: Булат Фаттахов

Ответ: Катрина.
Ответ: в Макондо.
Ответ: Кракатау (Остров назывался так же как и вулкан).
Ответ: Ленинакан и Кировокан.
Ответ: Нашествие саранчи.

Тема 2: Города России. Автор: Булат Фаттахов

Ответ: Санкт-Петербург.
Ответ: Не являющийся столицей региона.
Ответ: Южно-Сахалинск.
Ответ: Екатеринбург.
Ответ: Балтийск.


Ответ 3



Т. к. вопрос практический, позволю себе дополнить ответ ув-мого andreymal. Сначала желательно заменить слово или фразу, при нажатии на которое выводится спойлер, — например, в Chrome это «Подробнее», — при помощи тега . Если хотим кликать сразу на «Ответ», замена выйдет следующей: Find What: ^Ответ: ((.|\n)+?)\n([0-9\n]) Replace With:
Ответ:\1
\n\3 Затем, чтобы тэги отображись в Firefox, Edge и Opera Mini, требуется подключить скрипт Details-Polyfill. Для Эксплорера, к сожалению, и этот метод не работает, проверял на IE NetRenderer. Принцип действия скрипта: если браузер поддерживает
и , то ничего не происходит; не поддерживает — задействуется. Когда спойлеров множество, то, увы, достаточно продолжительное время, почему от просмотра в Firefox лучше всё же воздержаться. Итог см. в коде. /* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php */ (function (doc) { 'use strict'; var i, j, textWrapper, idCount = 0, rootNode = doc.documentElement, headElem = doc.getElementsByTagName('head')[0] || rootNode, bodyElem = doc.getElementsByTagName('body')[0] || rootNode, detailStyleTag = doc.createElement('style'), rules = 'details { display: block; overflow:hidden; } \n' + 'details[open] { height: auto; } \n' + 'summary { display:inline-block; } \n' + 'details * { visibility: hidden; } \n' + 'summary:first-child { visibility: visible; cursor: pointer; } \n' + 'details[open] * { visibility: visible } \n' + 'details[open] summary { margin-bottom: 0; }', /* Technically, a summary element has a "Phrasing content" model and should be displayed inline. * see http://dev.w3.org/html5/spec/Overview.html#the-summary-element, * http://dev.w3.org/html5/spec/Overview.html#phrasing-content * * FYI: Chrome currently and incorrectly treats the element as block level. */ addRule = function (styleTag, rule) { if (styleTag.nodeName.toLowerCase() === 'style') { if (!!styleTag['styleSheet'] && styleTag.styleSheet['cssText'] !== undefined) { //for MSIE styleTag.styleSheet.cssText += '\n' + rule; } else { styleTag.appendChild(doc.createTextNode('\n' + rule)); } } }, addEvent = function (el, eventName, f) { //W3C event biding if (el.addEventListener) { el.addEventListener(eventName, f); //IE event binding } else if (el.attachEvent) { el.attachEvent('on' + eventName, f); // Fallback, but don't overwrite a preexisting "onclick" attribute. } else if (el['on' + eventName] === null) { el['on' + eventName] = f; } }, toggle = function (e) { /* When a element is clicked the parent
element's "open" * attribute needs to be toggled to maintain the attribute's reflective nature. * see http://dev.w3.org/html5/spec/Overview.html#attr-details-open */ var detailsElmnt, target = e.target || e.srcElement; if (target.nodeName.toLowerCase() === 'summary') { detailsElmnt = target; while (detailsElmnt.nodeName.toLowerCase() !== 'details') { detailsElmnt = detailsElmnt.parentNode; //Break if we get to the root node without finding a details element. if (detailsElmnt === bodyElem) { detailsElmnt = null; break; } } if (detailsElmnt) { if (detailsElmnt.getAttribute('open')) { detailsElmnt.removeAttribute('open'); } else { detailsElmnt.setAttribute('open', 'open'); } bodyElem.className = bodyElem.className; } } }, init = function () { var detailsID, detailsElem, summaryElem, height, //height of the summary element detailsElems = doc.getElementsByTagName('details'); for (i = 0; i < detailsElems.length; i++) { detailsElem = detailsElems[i]; if (!detailsElem.getAttribute('data-detailsid')) { detailsID = 'd' + (idCount++); detailsElem.className += (' ' + detailsID); detailsElem.setAttribute('data-detailsID', detailsID); /* The spec expects the functional element to be the first child node of a *
element. In practice, it appears the first child element of a * element is enlisted as the functional element and displayed as * though it were the first child. For our purposes, we will do that explicitly. * Additionaly, If a element does not exist, a default toggle is provided. */ summaryElem = detailsElem.getElementsByTagName('summary')[0]; if (!summaryElem) { summaryElem = doc.createElement('summary'); summaryElem.appendChild(doc.createTextNode('Details')); detailsElem.insertBefore(summaryElem, detailsElem.firstChild); } else if ( summaryElem !== detailsElem.firstChild) { detailsElem.removeChild(summaryElem); detailsElem.insertBefore(summaryElem, detailsElem.firstChild); } height = summaryElem.offsetHeight; addRule(detailStyleTag, 'details.' + detailsID + ' { height: ' + height + 'px; }\n' + 'details.' + detailsID + '[open] { height: auto; }'); //Text nodes are killing me here. Thanks to @Remy for the solve. // Weighing the pros and cons of using a standard element like or vs a non-standard // but more semantically meaninfull element, I think wins, though not without some // regret. for (j = 0; j < detailsElem.childNodes.length; j++ ) { if (detailsElem.childNodes[j].nodeName === '#text' && (detailsElem.childNodes[j].nodeValue||'').replace(/\s/g, '').length) { textWrapper = document.createElement('text'); textWrapper.appendChild(detailsElem.childNodes[j]); detailsElem.insertBefore(textWrapper, detailsElem.childNodes[j]); } } } } }; /* * The inserted stylesheet needs to be first so as to have a minimal cascading coeffecient. * It also needs to be added to the DOM before IE can access it's properties. * The polyfill only adds default or necessary styling and should not interfere with other style rules. */ headElem.insertBefore(detailStyleTag, headElem.firstChild); init(); addRule(detailStyleTag, rules); addEvent(bodyElem, 'click', toggle); addEvent(bodyElem, 'DOMSubtreeModified', init); }(document, undefined)); details Тема 1: Стихийные бедствия. Автор: Булат Фаттахов 10. Таким женским именем звали ураган, сильно повредивший Новый Орлеан.
Ответ:Катрина.
20. "Дождь лил четыре года, одиннадцать месяцев и два дня" именно там.
Ответ:в Макондо.
30. В 1883 году было извержение вулкана именно на этом острове.
Ответ:Кракатау (Остров назывался так же как и вулкан).
40. Армянские города Гюмри и Ванадзор, сильно пострадавшие во время землетрясения 1988 года, в советское время носили такие названия.
Ответ:Ленинакан и Кировокан.
50. Крупнейшее за всю историю человечества это стихийное бедствие произошло в 1875 году в США, а не в Египте двумя тысячами годами ранее.
Ответ:Нашествие саранчи.
Тема 2: Города России. Автор: Булат Фаттахов 10. Это крупнейший город России после Москвы.
Ответ:Санкт-Петербург.
20. Москва крупнейший город России, а Тольятти тоже крупнейший город в России среди таких.
Ответ:Не являющийся столицей региона.
30. Это - крупнейший город самого большого острова России.
Ответ:Южно-Сахалинск.
40. Именно в этом городе происходит действие сериала "Счастливы вместе".
Ответ:Екатеринбург.
50. А именно этот город является самым западным городом России.
Ответ:Балтийск.
UPD: начиная с 47-й версии Firefox поддерживает теги и
. Чтобы увидеть в Firefox действие тегов, пользователю необходимо ввести в адресную строку этого браузера about:config → Я обещаю, что буду осторожен → в строке поиска найти параметр dom.details_element.enabled → установить ему значение true.

среда, 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.