special

This webpage has been robot translated, sorry for typos if any. To view the original content of the page, simply replace the translation subdomain with www in the address bar or use this link.

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


Created/Updated: 25.05.2018

';>