Пишем простой плагин для Sublime Text 2
Пример реальный, из инженерной практики. Перевод выделенного числа в тексте из десятичной в шестнадцатеричную систему счисления. Фича должна быть доступна из главного и контекстного меню а так же по сочетанию клавиш Ctrl+Shift+H. Результат выполнения: число в хексе записанное с использованием цифр и букв верхнего регистра без каких-либо ведущих символов вроде «0x». Если выделенный текст не является числом — ругаемся об этом с статусбаре. Обращаю внимание, что пример намерено упрощен до максимума, чтоб за деталями не потерялась суть: простота создания плагинов для Sublime.
Пишем плагин
Жмём Tools -> New Plugin... и видим заготовку. Меняем название класса и пишем функционал в методе run. У меня получилось следующее:
import sublime, sublime_plugin class DecToHexCommand(sublime_plugin.TextCommand): MAX_STR_LEN = 10 def run(self, edit): v = self.view # Получаем значение первого выделенного блока dec = v.substr(v.sel()[0]) # Заменяем десятичное число шестнадцатеричным или выводим сообщение об ошибке if dec.isdigit(): v.replace(edit, v.sel()[0], hex(int(dec))[2:].upper()) else: # Обрезаем слишком длинные строки, которые не поместятся в статусбар if len(dec) > self.MAX_STR_LEN: logMsg = dec[0:self.MAX_STR_LEN]+ "..." else: logMsg = dec sublime.status_message("\"" + logMsg + "\" isn't a decimal number!")
Сохраняем туда куда предложит редактор с именем dec_to_hex.py
Добавляем пункты меню. Прописываем клавиатурное сочетание.
Начнем с «горячих клавиш».
В меню жмём Preferences -> Key Bindings-User. Открывается файл с настройками в формате JSON. Скорее всего пустой. Добавляем в него строчку.
{ "keys": ["ctrl+shift+h"], "command": "dec_to_hex" }
Сохраняем. Всё. Впринципе уже можно пользоваться. Если не работает стоит посмотреть что по этому поводу написано в консольке (Ctrl+`).
Для того чтоб добавить пункт в контекстное меню создаём файл Context.sublime-menu следующего содержания:
[ { "command": "dec_to_hex" } ]
Думаю, что как и в предыдущем случае всё понятно без комментариев.
Сохраняем в тот же каталог, в который сохранили плагин.
Т.е. %USERPROFILE%\AppData\Roaming\Sublime Text 2\Packages\User, для пользователей Windows. Там же создаём файл Main.sublime-menu. Я посчитал, что этот пункт будет уместнее всего в меню Edit, поэтому в файле Main.sublime-menu написал следующее:
[ { "id": "edit", "children": [ { "command": "dec_to_hex" } ] } ]
Проверяем. В главном и контекстом меню должны появиться пункты с названием Dec To Hex
Ссылки:
www.sublimetext.com/docs/api-reference — Plugin API Reference
www.sublimetext.com/download — Download
www.sublimetext.com/dev — Dev Builds. Использую dev версии, багов пока не ловил.
net.tutsplus.com/tutorials/python-tutorials/how-to-create-a-sublime-text-2-plugin/ — Статья на ту же тему на английском языке
Created/Updated: 25.05.2018