0,0
рейтинг
18 января 2012 в 18:42

Разработка → Пишем простой плагин для Sublime Text 2 из песочницы tutorial

Введение

Странно, но поискав на Хабре упоминания текстового редактора Sublime Text 2 я почти ничего не нашел. Спешу исправить положение и рассказать хабраюзерам об этом прекрасном инструменте. Вначале очень коротко расскажу о том чем же он так хорош, потом напишем простой но полезный плагин.

Почему Sublime Text 2

Не берусь утверждать, что Sublime Text 2 — лучший текстовый редактор, но мне он пришёлся очень по душе, и вот почему:
  • Приятный глазу тёмный интерфейс, визуальные эффекты и Distraction Free Mode
  • Панелька с редактируемым текстом в миниатюре. Интересная и действительно удобная находка!
  • Множественное выделение и редактирование
  • Все фичи свойственные большинству продвинутых редакторов: подсветка синтаксиса, форматирование кода, автодополнение и т.д.
  • То чего нет «в коробке» можно скачать из репозитария! Да-да, после совершения простейших манипуляций в Sublime появляется полноценная система управления пакетами, почти как в убунте или дебиане.
  • Если и этого не достаточно — прямо в главном меню есть пункт «New Plugin». Жмем на него и пишем плагин реализующий необходимый нам функционал на языке Python. Об этом и пойдет речь.
  • Стоит это чудо $59 за одну, либо $500 за 10 лицензий. Однако если не хочется, то можно и не платить. Ограничений никаких в этом случае нет, просто изредка будет всплывать напоминание.

Постановка задачи

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

На этом всё. А о том как упаковать наш плагин в пакет и поделиться им с товарищами, а так же о других интересных возможностях Sublime расскажу в следующий раз, если тема будет кому-нибудь интересна.

Ссылки:



UPD: написал про Dev Builds и стоимость лицензии. Спасибо хаброюзерам Sky4eg, VCoder и vtx
Alexander Efremov @siberianMan
карма
40,0
рейтинг 0,0
System Analyst
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (47)

  • +5
    Согласен, действительно прекрасный редактор. Огромный плюс — кросплатформенность! А поиск файлов/строки/функции… Просто нужно горячие клавиши/команды освоить! Например Ctrl+P : или @Да кстати использую всегда dev версию, порой несколько билдов в день и на глазах видны изменения www.sublimetext.com/dev
    • +2
      Солидарен, прекрасный редактор. Пользуюсь уже полгода.
  • +1
    Ну что… Что мешает людям сделать такой же, только опенсорс??

    Вроде бы и база есть SciTE и на ее базе сделали замечательный, но несколько топорный NPP, а вот что-то клевенькое, кроссплатформенное и бесплатное — нет.

    И приходится пользоваться явовыми IDE, которые ох какие прожорливые
    • +3
      Красивого опенсорса немного, именно красивого, а не функционального. Люблю n++, но вообще он страшненький.

      Так что либо Vim ( например: akitaonrails.com/2009/01/04/rails-on-vim-in-english ), либо прожорливые IDE.
      • 0
        емакс еще
      • 0
        емакс же!
    • +3
      Возьми и сделай. (с)

      Все вам будут благодарны.
      • 0
        Ну я по специализации скорее к cloud9 что нить допишу. кстати вот cloud9 как раз таки красивый и функциональный и опенсорсный и для программистов)
    • 0
      Вам не нравится тот факт, что программисты тоже хотят кушать? Или в принципе за чужой труд не привыкли платить?
    • +1
      Неужели программист не может купить себе инструмент?
      Это как если бы механики жаловались на отсутствие бесплатных ключей.
      • 0
        К сожалению или к счастью я не фрилансер, поэтому ПО покупает компания в которой я работаю. И если есть какой-то купленный стандарт, то приходится пользоваться или им или бесплатной альтернативой.
        Вот и сетую на то что такой альтернативы нет.
        • +1
          Если вы не фрилансер, у вас есть постоянный доход.

          Инструмент, который вы используете, вам не нравится, но заплатить 50-100 долларов за подходящий не хотите.

          Странно.
          • 0
            Чужие деньги считаете;) У меня не московская и даже не киевская ЗП.
            Но я просто не понимаю почему, например, замечательные редакторы Aptana, Flash Develop, Cloud9, NPP и некоторые другие — бесплатны (но не подходят мне по определенным причинам)
            Мне кажется уже достаточно написано оплаченного кода что бы сделать хороший легковесный редактор.
    • 0
      Но ведь IDE таки действительно IDE, а не текстовый редактор. Я к тому что автокомплит методов классов импортированных из библиотек, и дебаг — вещи полезные.
    • 0
      А в SciTE вам чего не хватает, «клевеньких» иконок?

      P.S. NPP сделали не на базе SciTE, он лишь использует Scintilla.
  • +2
    Отличная статья, спасибо! :)
  • 0
    В sublime можно назначать клавиатурные комбо и длинных последовательностей типа Ctrl+W+E?
    • +3
      Про это не знал. Надо наверно написать большую статью про полезные фичи саблайма. Вроде вот этой net.tutsplus.com/tutorials/tools-and-tips/sublime-text-2-tips-and-tricks/ только шире и на русском.
    • +2
      можно, например ctrl+k+b скрывает/показывает side bar
      только нажимать надо не все вместе, а буквы по отдельности, то есть зажали ctrl, затем по-очереди k и b
      { "keys": ["ctrl+k", "ctrl+b"], "command": "toggle_side_bar" }
  • +1
    Немного не в тему, но интересует один вопрос: этот редактор поддерживает Vim-режим?
  • +1
    Плагин от меня и от друга.

    Мой — поиск в django-документации на rtfd выделенного слова. Ссылка: github.com/saippuakauppias/sublime-text-2-Django-DocsSearch

    Димки — создание нового файла при нажатии клавиш, тут главная киллер-фича — это создание всех папок, что указаны в пути и есть режим в котором автоматически создаются и добавляются файлы __init__.py. github.com/xobb1t/Sublime-AdvancedNewFile

    ps: как-то даже отправляли свои плагины умпутуну, когда они проводили что-то вроде конкурса с раздачей лицензий, но так и не получили ответа… Кто слушал Радио-Т и знает в чём там дело — отпишитесь, пожалуйста.
  • +1
    Перешл на прощлой недели с netbeans на sublings. Вот сейчас написал плагин, чотбы переходить на новую строку (Start new line shift+enter в netbeans) мб кому понадобится.

    gist.github.com/1635037
    • 0
      Preferences → Key binding (Default):
      { «keys»: [«super+enter»], «command»: «run_macro_file», «args»: {«file»: «Packages/Default/Add Line.sublime-macro»} },

      Не оно?
      • 0
        Оно. Тока я найти не смог.
  • 0
    А в нем можно как нибудь настроить нативное отображение под Linux Ubuntu ??? А то его цветовые схемы просто не очень воспринимают мои глаза :(
    • 0
      Цветовую схему можно и самому написать. Смотри ~/.config/sublime-text-2/Packages/Color Scheme - Default/ для примеров.
  • +2
    Возможно, стоит упомянуть, что редактор не бесплатный: $59 (или $500 за 10 лицензий)
    • 0
      А разве без лицензии есть какие-то ограничения по фунционалу?
      Лицензия скорее для тех, кто хочет отблагодарить автора и поддержать развитие хорошего продукта.
      • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Licenses are per-user, rather than per-machine, so you can enjoy Sublime Text on as many computers and operating systems as you wish with your license. Licenses are valid for both Sublime Text 1 and 2.


      Плюс лицензии в том, что она предоставляется на пользователя, а не на машину. Можно использовать кросплатформенно на любом количестве компьютеров за 59$. А 10 лицензий это при использовании, в бизнесе. Это прописано в лицензии www.sublimetext.com/eula
  • +1
    Напишу и свой советик. Я привык, при дублировании выделенной части текста (по-умолчанию это super+shift+d) дублируется не ровно то, что выбрано, а все строки, на которых находится выделение.

    Поэтому я поправил файлик duplicate_lines.py. Открываем Preferences → Browser packages → default → duplicate_lines.py.

    Добавляем в метод run параметр force_lines=False, а в строчку if region.empty() добавляем:
    if force_lines or region.empty().

    После этого открываем пользвательский файл горячих клавиш, добавляем туда:
    { «keys»: [«super+d»], «command»: «duplicate_line», «args»: {«force_lines»: true}},

    Готово.
  • +4
    Небольшой советик. Чтобы управлять пакетами (установка, удаление, добавление репов и т.д.) не в ручную а всего парой кликов необходимо войти в консоль Python Ctrl+`, и там вставить строку
    import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp) if not os.path.exists(ipp) else None;open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
    После чего нажать Enter, далее перезапустить редактор. После перезапуска в меню Preferences появятся пункты Package Settings и Package Control.
  • 0
    До появления вашего поста пользовался Notepad++ с необходимыми мне (порой самодельными) скриптами. Теперь начал данный редактор использовать. Спасибо.
  • 0
    Прочитал что к нему можно «плагины» от textmate как — то прикручивать, но так и не понял как.
    Всё хорошо в sublime, но вот среди множества поддержки языков, почему — то нет подсветки pascal, так и не получилось прикрутить модуль от textmate. Может кто осилил?
    • 0
      Просто положите его в папку ~/Library/Application\ Support/Sublime\ Text\ 2/Packages/Pascal
  • +1
    только класс должен называться не
    class DecToHex(sublime_plugin.TextCommand):
    а
    class DecToHexCommand(sublime_plugin.TextCommand):
    • 0
      поправил
  • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Прочитал статью, пересел на этот редактор и забыл про Geany. В Geany была панель с папками, но вместо неё у Sublime есть очень хорошая функция: он хорошо знает, в какой папке открывать и в какой закрывать. Можно работать на клавиатуре и с удобными комбинациями клавиш (Vim/Emacs мне кажутся слишком навороченными и нелогичными).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.