Sublime Text 3 — пользовательская подсветка синтаксиса / Хабр
Расширяемость Sublime Text не знает границ. Для тех, кому мало стандартных функций, на Хабре уже рассказывали о том, как создать сниппет, как написать простой плагин, как написать сложный плагин и еще много много чего. Про ручную настройку подсветки синтаксиса толком ничего не смог найти: для кого-то слишком очевидно, кому-то просто не нужна, а кому-то и наверняка же пригодится.
Итак, задача: имея какие-нибудь абстрактные логи доступа в wonder-net:
!->14/02 16:44:22 [134.249.51.251:39951>80] (t1 19) >HTTP in:504 out:34 Time:156 GET /516874233**21893/ HTTP/1.1 SCOD=00 !->14/02 16:44:24 [134.249.51.251:49507>80] (t1 20) GET /44058858**409377/ HTTP/1.1 SCOD=00 !->14/02 16:54:11 [195.18.13.107:1721>80] (t2 22) GET /41494377**562173/ HTTP/1.1 SCOD=00 !->14/02 16:54:11 [195.18.13.107:1721>80] (t2 23) >HTTP in:385 out:10138 Time:156 GET /5211537**1172048/ HTTP/1.1 SCOD=00 !->14/02 16:54:24 [195.18.13.107:1727>80] (t1 30) >HTTP in:423 out:1220 Time:187 GET /5211537**6447554/ HTTP/1.1 SCOD=23 !->14/02 18:07:24 [82.145.208.159:43634>80] (t2 52) GET /4149437**8265377/ HTTP/1.1 SCOD=00 !->14/02 18:09:41 [82.145.208.174:41708>80] (t2 61) GET /4149497**5750155 / HTTP/1.1 SCOD=00 !->14/02 18:51:39 [82.145.210.33:55210>80] (t1 66) >HTTP in:543 out:34 Time:0 GET /5168757**9478487/ HTTP/1.1 SCOD=00 !->14/02 18:51:40 [82.145.210.33:55332>80] (t1 68) >HTTP in:544 out:1243 Time:141 GET /4149497**0456701 / HTTP/1.1 SCOD=00 !->14/02 18:51:46 [82.145.210.33:57345>80] (t1 73) >HTTP in:544 out:1243 Time:125 GET /5168742**0521893/ HTTP/1.1 SCOD=00
выделить:
Дату-время — фиолетовым курсивом;
Номер карты — желтым курсивом, если не в черном списке или красным, если иначе;
ip-адрес — темно-зеленым, если не в черном списке или красным, если иначе;
В нашу цветовую схему нужно добавить стили, которыми мы собираемся подсвечивать текст. Насколько я понял, все цветовые схемы аккуратно собраны в файле c:\Program Files\Sublime Text 3\Packages\Color Scheme — Default.sublime-package.
Файл представляет собой zip архив без сжатия. Распаковываем, выбираем любимую схему (по умолчанию Monokai.tmTheme) и копируем ее в…(запускаем Sublime Text: меню Preferences — Browse Packages) папку User.
Открываем свежескопированный Monokai.tmTheme для редактирования. В самом низу перед закрывающимся добавляем блоки стилей. Стиль может содержать три параметра: background, foreground и fontStyle. fontStyle в свою очередь bold, italic и underline.
фиолетовый курсив будет выглядеть так:
<dict> <key>scope</key> <string>violet</string> <!-- По этому имени будем обращаться к стилю --> <key>settings</key> <dict> <key>foreground</key> <string>#EE82EE</string> <key>fontStyle</key> <string>italic</string> </dict> </dict>
жирный желтый(ЖЖ):
<dict> <key>scope</key> <string>yellow</string> <key>settings</key> <dict> <key>foreground</key> <string>#FFD700</string> <key>fontStyle</key> <string>bold</string> </dict> </dict>
темно-зеленый:
<dict> <key>scope</key> <string>green</string> <key>settings</key> <dict> <key>foreground</key> <string>#006400</string> </dict> </dict>
красный:
<dict> <key>scope</key> <string>red</string> <key>settings</key> <dict> <key>foreground</key> <string>#FF0000</string> </dict> </dict>
2.
В той же папке User создаем файл синтаксиса: wonderLog.tmLanguage с содержимым:
<?xml version="1.0" encoding="UTF-8" ?>
<plist version="1.0">
<dict>
<key>patterns</key>
<array>
<dict>
<key>name</key>
<string>red</string> <!-- Имя стиля -->
<key>match</key>
<string>\b(?i)(?:5168742**0521893|414943**01562173|4149497**5750155)\b</string> <!-- Регулярное выражение к-рое надо выделить (номера из черного списка) -->
</dict>
<dict>
<key>name</key>
<string>red</string>
<key>match</key>
<string>\b(?i)(?:134\.249\.51\.251|82\.145\.208\.174)\b</string> <!-- ip из черного списка (точки экранируем) -->
</dict>
<dict>
<key>name</key>
<string>green</string>
<key>match</key>
<string>\b(?i)scod=00\b</string> <!-- scod=00 -->
</dict>
<dict>
<key>name</key>
<string>red</string>
<key>match</key>
<string>\b(?i)scod=\d+\b</string> <!-- scod!=00 -->
</dict>
<dict>
<key>name</key>
<string>green</string>
<key>match</key>
<string>\b\d{1,3}\.
\d{1,3}\.\d{1,3}\.\d{1,3}\b</string> <!-- остальные ip (конечно, надо не так, но...) -->
</dict>
<dict>
<key>name</key>
<string>yellow</string>
<key>match</key>
<string>\b\d{16}\b</string> <!-- остальные номера -->
</dict>
<dict>
<key>name</key>
<string>violet</string>
<key>match</key>
<string>\d{1,2}/\d{1,2}\s\d{2}:\d{2}:\d{2}</string> <!-- дата, время -->
</dict>
</array>
<key>name</key>
<string>wonderLog</string>
<key>scopeName</key>
<string>wonderLog</string>
<key>fileTypes</key>
<array>
<string>log</string> <!-- К этому расширению файла будет автоматически применяться данный синтаксис -->
</array>
</dict>
</plist>
На примере видно, что если несколько регулярных выражений претендуют закрасить цвет по-разному, то приоритет будет у того, которое описано выше (первее).
Сохраняем все.
Выбираем пользовательскую цветовую схему: Preferences — Color Scheme — User — Monokai.
Открываем наш чудо-лог (если расширение файла не совпадает с шаблонным, делаем View — Syntax — wonderLog) и наслаждаемся результатом:
Documentation TOC TOP Key Bindings Версия:
Привязки клавиш в Sublime Text определяются файлами, заканчивающимися в .sublime-keymap. Привязки клавиш используют JSON со структурой верхнего уровня. будучи массивом. Каждая привязка является объектом JSON.
Пример
- Крепления
«ключи» Ключ
Ключ «команда»
Ключ «args»
Ключ «контекст»
Привязки пользователей
Пример
Ниже приведен пример формата файла .sublime-keymap.
[
{
"клавиши": ["супер+ctrl+m"],
"команда": "convert_syntax"
},
{
"клавиши": ["супер+шифт+9"],
"команда": "set_layout",
"аргументы":
{
"столбцы": [0,0, 0,33, 0,66, 1,0],
«строки»: [0,0, 0,33, 0,66, 1,0],
«клетки»:
[
[0, 0, 1, 1], [1, 0, 2, 1], [2, 0, 3, 1],
[0, 1, 1, 2], [1, 1, 2, 2], [2, 1, 3, 2],
[0, 2, 1, 3], [1, 2, 2, 3], [2, 2, 3, 3]
]
}
},
{
"клавиши": ["супер+альт+вверх"],
"команда": "нет",
"контекст":
[
{"ключ": "панель", "операнд": "найти"},
{"ключ": "panel_has_focus"},
]
}
]
Крепления
Для каждой привязки клавиш требуется два ключа: «ключи» и «команда» .
Чтобы передать аргументы
к команде должен быть указан ключ "args" . Чтобы ограничить привязку клавиш
в конкретной ситуации должен быть включен ключ "контекст" .
"Ключи" Ключ Значение "keys" должно быть массивом строк, где каждая строка содержит
нажатие клавиши , состоящее из клавиши и любых модификаторов. При нажатии нескольких клавиш
присутствуют в массиве, команда будет вызвана только в том случае, если нажатия
выполняются последовательно.
Крепление для ключа Escape
{
"ключи": ["экран"],
"команда": "нет"
}
Привязка к клавише А с модификатором Ctrl
{
"клавиши": ["ctrl+a"],
"команда": "нет"
}
Модификаторы
Следующие модификаторы могут быть объединены с именами клавиш для каждого нажатия клавиши .
Ctrlуправлениеальтернативныйопция— Macкоманда— Macsuper— ключ Windows в Windows и Linux или ⌘ в Macосновной— Ctrl в Windows и Linux или ⌘ в Mac
Имена ключей
- Имена ключей задаются либо символом (без сдвига)
, напечатанный на ключе, или имя ключа:
a
b
c
d
e
f
g
h
i
j
k
l
м
n
o
p
q
r
t u v w x y z 0
1
2
3
4
5
6
7
8
9
, 9 .
\
/
; '
`
+
-
=
[
]
up
down
left
right
insert
home
end
pageup
pagedown
backspace
delete
tab
enter
pause
escape
space
keypad0
keypad1
keypad2
keypad3
keypad4
keypad5
keypad6
keypad7
keypad8
клавиатура9
клавиатура_период
клавиатура_разделить
клавиатура_умножить
клавиатура_минус
keypad_plus
keypad_enter
clear
f1
f2
f3
f4
f5
f6
f7
f8
f9
F10
F11
F12
F13
F14
F15
1915199199999999999999999919999919999999999999999999999999999999999999999999999999999999999919999199919999999999999999009н f18
f19
f20 «команда» ключ- Клавиша
"command" указывает имя команды, которая выполняется при обнаружении нажатия клавиши.
Команда может быть
встроенная команда или команда, реализованная плагином.
{
"клавиши": ["ctrl+a"],
"команда": "выбрать_все"
}
В настоящее время нет составленного списка всех встроенных команд. Имена многих
команды можно найти, просмотрев
По умолчанию ({PLATFORM_NAME}).sublime-keymap файлы в
По умолчанию/пакет.
"аргументы" Ключ Аргументы для отправки «командному» ключу могут быть указаны объектом JSON.
под ключом "args" .
{
"ключи": ["основной+shift+b"],
"команда": "строить",
"аргументы": {"выбрать": правда}
}
"контекст" Ключ Чтобы разрешить привязки клавиш, которые реагируют по-разному в зависимости от ситуации, Ключ "контекст" позволяет указать одно или несколько условий, которые должны оцениваться
значение true, чтобы активировать привязку клавиш.
Значение "контекст" представляет собой массив объектов.
Каждый объект должен содержать "ключ" ключ, имеющий строковое значение. Ключ — это один из предопределенных списков
значения, которые можно сравнить с использованием «оператора» и «операнда» .
Если "ключ" поддерживает операторы , "оператор" должен быть одним из: "равно" или "не равно" . Для , совпадающего с , он должен быть одним из: "regex_match" , "not_regex_match" , "regex_contains" или "not_regex_contains" . По умолчанию «оператор» равен «равно» , а
по умолчанию "операнд" равен true .
Для "ключ" значений, которые имеют дело с выборками, дополнительный ключ "match_all" поддерживается. По умолчанию это false , что означает
Условие должно быть оценено как истинное только для одного выбора.
Если "match_all" равно true , тогда условие должно оцениваться как истинное для всех
выбор.
Ниже приведен список допустимых значений контекста «ключ» :
Ключ
Операнд
Операторы
Подобрать все
Описание
"auto_complete_visible"
логический
равенство
нет
Если отображается раскрывающийся список автозаполнения
"eol_selector"
струна
равенство
да
Селектор, соответствующий имени области в конце текущей строки
"следующий_текст"
струна
соответствует
да
Текст после выделения
"has_next_field"
логический
равенство
нет
Если выбрано поле во фрагменте, где существует последующее поле
"has_prev_field"
логический
равенство
нет
Если выбрано поле во фрагменте, где существует предыдущее поле
"is_recording_macro"
логический
равенство
нет
Если пользователь в данный момент записывает макрос
"последняя_команда"
струна
равенство
нет
Имя последней выполненной команды
"последняя_модифицирующая_команда"
струна
равенство
№
Имя последнего запуска команды, которая изменила буфер
"num_selections"
целое число
равенство
нет
Количество выделений в текущем буфере
"всплывающее_видимое"
логический
равенство
нет
Если в данный момент отображается всплывающее окно
"предыдущий_текст"
струна
соответствует
да
Текст перед выделением
"только для чтения"
логический
равенство
нет
Если буфер отмечен только для чтения
"выбор_пусто"
логический
равенство
да
Если текущий выбор не содержит символов
"селектор"
струна
равенство
да
Селектор, соответствующий имени области выделения
"текст"
струна
соответствует
да
Текст выделения
"панель"
струна
равенство
нет
Название текущей панели
"панель_видимая"
логический
равенство
нет
Если панель видна
"panel_has_focus"
логический
равенство
нет
Если панель видна и имеет фокус
"overlay_visible"
логический
равенство
нет
Если панель быстрого доступа видна
Привязки пользователей
Пользователи могут настроить свои привязки клавиш, создав файл
с именем Default.
sublime-keymap в их Packages/User/
каталог.
Например, следующее создаст привязку клавиш для отображения несохраненных изменений, если
любой существует, через Ctrl + Shift + ` .
[
{
"клавиши": ["ctrl+shift+`"],
"команда": "diff_changes"
}
]
sublimetext3 - Sublime Text 3 - привязка клавиш для отмены сборки не работает (Windows)
спросил
Изменено
2 года, 6 месяцев назад
Просмотрено
357 раз
Я получил привязку клавиш для отмены сборки, работающую раньше, используя этот параметр:
"ключи": ["ctrl+alt+c"], "command": "cancel_build",
Но через несколько дней назад я не мог использовать эту привязку ключа для отмены сборки.
Я искал исправление и обнаружил, что предпочтительная привязка клавиш для отмены сборки (из этого поста и этого поста на форуме Sublime Text):
"keys": ["ctrl+alt+c"], "command": "exec", "args": {"kill": true},
Я изменил настройку на это, но все же, это не работает (я пробовал разные комбинации клавиш), и мне приходится вручную отменять сборку в меню Инструменты > Отменить сборку.
Кто-нибудь знает, как решить эту проблему? Любая помощь приветствуется!
Ниже приведены мои текущие настройки привязки клавиш (первая не работает, как описано в этом посте, вторая работает нормально).
[
{
// "клавиши": ["ctrl+alt+c"], "команда": "cancel_build",
"клавиши": ["ctrl+alt+c"], "команда": "exec", "аргументы": {"kill": true},
"keys": ["ctrl+alt+b"], "command": "run_existing_window_command", "args":
{
"id": "repl_python_run",
"файл": "config/Python/Main.sublime-меню"
}
}
]
Спасибо.

1 SCOD=00
!->14/02 16:54:24 [195.18.13.107:1727>80] (t1 30) >HTTP in:423 out:1220 Time:187
GET /5211537**6447554/ HTTP/1.1 SCOD=23
!->14/02 18:07:24 [82.145.208.159:43634>80] (t2 52)
GET /4149437**8265377/ HTTP/1.1 SCOD=00
!->14/02 18:09:41 [82.145.208.174:41708>80] (t2 61)
GET /4149497**5750155 / HTTP/1.1 SCOD=00
!->14/02 18:51:39 [82.145.210.33:55210>80] (t1 66) >HTTP in:543 out:34 Time:0
GET /5168757**9478487/ HTTP/1.1 SCOD=00
!->14/02 18:51:40 [82.145.210.33:55332>80] (t1 68) >HTTP in:544 out:1243 Time:141
GET /4149497**0456701 / HTTP/1.1 SCOD=00
!->14/02 18:51:46 [82.145.210.33:57345>80] (t1 73) >HTTP in:544 out:1243 Time:125
GET /5168742**0521893/ HTTP/1.1 SCOD=00

Команда может быть
встроенная команда или команда, реализованная плагином.
Каждый объект должен содержать
Если
sublime-keymap в их Packages/User/
каталог.
Я искал исправление и обнаружил, что предпочтительная привязка клавиш для отмены сборки (из этого поста и этого поста на форуме Sublime Text):