Пишем плагин для саблайма

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

И такой редактор есть. Как вы уже догадались, Sublime поддерживает скрипты на python!

sublime

А так выглядит сам редактор с MarkdownEditing

Базовый плагин Sublime

Модули sublime и sublime_plugin встроенные, сохраняем наш плагин:
В любой момент мы можем вызвать консоль по сочетанию ctrl+` и протестировать его работу:

Имя команды должно идти в названии класса –  до слова Command !

При вызове оно пишется в нижнем регистре.

Sublime api

Почитать родную документацию можно здесь.

sublime2

Как видно, у нас есть полный доступ к управлению редактором. Перед написанием своих плагинов, будет не лишним взглянуть на стандартные.

Как и ожидалось, сие обычный zip-архив, зачем изобретать велосипед?

Sublime keymap

Чтобы назначить интересующий нас скрипт на горячую клавишу, открываем:

Например, сделаем копирование текущей строки по ctrl+d – это стандартный плагин “duplicate_line”:

Разбор плагина

Из-за мульти-выделения, при перечислении объекта Selection (отданного view.sel()) мы получаем объекты Region. Как легко заметить, мы наследуем класс TextCommand, поэтому к view мы обращаемся через self:

Узнать как работают базовые классы можно из документации или заглянув в их исходный код:

sublime4

Вся работа с редактором происходит через функции модуля sublime_api, которые, по всей видимости, экспортируются во время исполнения.

Пишем свой плагин

Чтобы пример был полезным, попробуем узнать из логов, кто атаковал сервер. Наш плагин будет принимать на вход строчку и отсекать из файла все строки, в которых она не встречается. Разумеется, серьёзный анализ логов выполняют другие инструменты.

Запускаем плагин и вводим интересующую нас подстроку, например ip адрес или код ответа сервера и получаем фильтрованный список в новом окне! =)

Есть один нюанс, edit_token работает только во время исполнения run и редактировать текст своего окна в callback on_done не выйдет! Однако всегда можно сделать run_command, даже для старого view.

Напоследок

Sublime поддерживает EventListener – можно регистрировать callback на события, вроде сохранения документа. Или взять стандартный urllib и делать запросы к сервисам перевода. Или настраивать сложную поэтапную сборку. =)

Использование python расширяет потенциал редактора до бесконечности!

Добавить комментарий