Пишем простой плагин для Sublime Text 2

По теме:


Sublime Text 2 FAQSublime Text 2 FAQ

Пример реальный, из инженерной практики. Перевод выделенного числа в тексте из десятичной в шестнадцатеричную систему счисления. Фича должна быть доступна из главного и контекстного меню а так же по сочетанию клавиш 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/ — Статья на ту же тему на английском языке