Делаем из Sublime Text 3 IDE для Python и Django

Немного о редакторе.

Sublime Text очень мощный текстовый редактор с богатым набором расширений. Редактор является условно бесплатным, но ограничений без покупки лицензии нет.

Я уже перешел на 3-ю версию редактора, сразу после того как он стал публичной бетой, поэтому в этой статье я буду рассматривать именно Sublime Text 3. Из киллер-фич, доступных в 3 версии можно назвать Go To Definition, который позволяет с легкостью бегать по определениям функций и переменных в рамках текущего проекта, и скорость работы редактора. Теперь плагины изолированны от основного приложения. Кстати, диалоговое окно с просьбой купить лицензию в редакторе без лицензии теперь выходит очень редко.

Предисловие.

Я долгое время кочевал между редакторами Vim и Emacs. В Vim мне нравился гибкий редактор, возможность практические все что угодно делать с текстом без использования мыши. Так случилось что у меня возникла некая неприязнь при использовании IDE. Пока что я знаю две самые лучшие IDE для питона: PyCharm, которая является коммерческой и PyDev в виде плагина на Eclipse. Эти обе IDE написаны на Java и не могут похвастаться скоростью работы. Наконец я нашел Sublime, немного его настроив и расширив плагинами, о которых мы поговорим в этой статье. Я начну с описания самых простых расширений и закончу настройкой редактора для работы с Python и Django.

Package Control

Package Control это неофициальное расширение, которое позволит вам легко устанавливать и обновлять ваши плагины. На данном сайте я уже описывал процесс его установки и настройки, поэтому что бы не загромождать данную статью я просто поделюсь ссылками:

Официальный сайт и инструкция по установки
Тут полное описание редактора и данного расширения, процесс его установки

Rsub/Rmate

Утилита rmate пришла в Sublime из редактора TextMate. Бывает так, что мне приходится часто бегать по клиентским ssh и править файлы конфигураций. Команда rmate запускается на удаленном ssh сервере, и в качестве параметра ей передается редактируемый файл. Данный файл сразу открывается в вашем редакторе и вы можете его редактировать как локальный, при этом все изменения сохраняются на сервере. Подробно прочитать об установки rmate вы можете тут

Emmet

Emmet это способ для ускоренного написания CSS и HTML кода. Ранее плагин назывался Zen Coding, но потом проект был переименован в emmet. Я думаю что установка данного расширения через Package Control не должна вызывать сложностей, поэтому описывать ее тут не буду.

Bracket Highligheter

Bracket Highligheter позволяет красиво подсвечивать парные скобки. Плагин работает из коробки и результат его работы выглядит так:

SublimePythonIDE

Я кратко описал основные расширения, которые упрощают редактирование текста. Давайте перейдем к расширениям, которые сделают из редактора почти полноценную IDE.

SublimePythonIDE ранее назывался SublimeRope (для Sublime Text 2). Без данного расширения вы можете бегать по объявлениям функций, методов и переменных только в рамках текущего проекта, но после установки SublimePythonIDE вы можете переходить по объявлениям всех модулей, указанных в переменной окружения PYTHONPATH. Достаточно только выбрать метод (переменную, функцию) правым кликом мыши и выбрать пункт меню Go To Definition:

Каждый раз выбирать пункт из контекстного меню неудобно, поэтому присвоим команде Go To Definition определенную комбинацию клавиатуры. Откройте Preferences -> Key Bindings User и добавьте туда следующие строки:

[
    { "keys": ["super+l"], "command": "python_goto_definition" },
]

Теперь во время нажатия cmd-l (в Linux ctrl+l, когда курсор стоит над переменной или функцией откроется ее объявление.

В стандартную поставку SublimePythonIDE входит PyLint, который может подсвечивать ошибки и предупреждения PEP8.

Настраиваем Build System для тестирования Django кода

Мне неудобно каждый раз идти в консоль и запускать команду python manage.py test, что бы запускать автоматические тесты, поэтому давайте создадим новый Build System. Перейдите в меню Tools -> Build System -> New Build System. Редактор создаст новый файл. Добавьте в него следующие строки:

{
    "cmd": ["python", "manage.py", "test", "--noinput"],
    "working_dir": "[mathjax:inline {project_path:]{folder}}",
    "selector": "source.python",
    "env": {"PYTHONPATH":"/Users/aliev/env/lib/python2.7/site-packages"},
}

В строке env я указал стандартную переменную окружения питона - PYTHONPATH и путь к пакетам virtualenv проекта, с которым я работаю (вы можете указать свой путь либо вообще удалить строку env). Сохранить файл и дайте ему название (например Django-test). В меню Tools->Build System выберите Django-test. Теперь после нажатия комбинации cmd->b (в Linux ctrl+b) у вас будут запускаться тесты для текущего Django проекта:

Плагин SublimeREPL и Django консоль

SublimeREPL это отличный плагин, который позволяет запускать REPL консоль практически любого языка программирования (Python не исключение). Мне захотелось что бы в редакторе запускалась консоль Django (которая запускается командой python manage.py shell). К счастью, SublimeREPL настраиваемый плагин. Если вы хотите быстро запускать консоль Django прямо в Sublime Text 3 установите SublimeREPL и добавьте следующие строки куда нибудь в середину файла:

Sublime Text 3/Packages/SublimeREPL/config/Python/Main.sublime-menu

{"command": "repl_open",
"caption": "Django",
"id": "repl_python_run",
"mnemonic": "d",
"args": {
"type": "subprocess",
"encoding": "utf8",
"cmd": ["python", "-u", "manage.py", "shell"],
"cwd": "[mathjax:inline {project_path:]{folder}}",
"syntax": "Packages/Python/Python.tmLanguage",
"external_id": "python"
}
},

Теперь мы можем в текущем Django проекте открыть консоль перейдя в пункт меню: Tools->SublimeREPL->Python->Django. В редакторе должна открыться Django консоль: