Яндекс.Метрика

    Песочница

    Настройка emacs для разработки на python или поиск «идеального» редактора

    Цель статьи рассказать о своем поиске «идеального» редактора для python кода, о том почему выбрал emacs и кратко о том как я его (emacs) настроил для работы с python.

    Небольшая предистория: Разработкой на python я занимаюсь уже более двух лет и все это время пытался подобрать оптимальный редактор. Что я только не использовал за это время — mcedit, nano, gedit, netbeans, eclipse, а также некоторые другие платные варианты (демо версии). Но всегда чего то нехватало, где то автокомплита, где то подсветки, где то банально неудобно. Какой то период (около 10 месяцев) использовал Eclipse, но его прожорливость в ресурсах, зависания доводили до белого каления. Когда ошибки eclipse мне окончательно надоели, я начал поиски такого редактора который стал бы отличным помошником в работе.
    Вооружившись google начал искать «идеальный» редактор.
    Note! Далее в тексте сугубо личное мнение автора.
    «Идеальный» редактор должен быть:
    • Легким — не требовать для свой работы более 500Mb оперативной памяти;
    • Настраиваемым — дать возможность настроить под себя (внешний вид, key binding);
    • Надежным — дать возможность восстановить предыдущие данные в случае краха;

    Хотелось также отметить желаемый функционал и особенности использования:
    • Автокомплит — облегчает работу, делаем меньше нажатий;
    • Интроспекция по коду — уменьшаем время на поиск необходимого класса и/или метода в нем;
    • Подсветка синтаксиса — улучшаем читаемость кода, уменьшаем нагрузку на зрение;
    • Минимальное использование мыши — не отрываем руки от клавиатуры;
    • Добавление сниппетов — уменьшаем рутинные действия по созданию новых структур;
    • Поддержка cvs/vcs — svn, git, mercurial;
    • Поддержка управления проектами;

    Python-специфичный функционал:
    • Поддержка python-shell;
    • Проверка pep8, pylint;
    • Окончание, переносы строк, отступы;
    • Отладка;


    Кандидат №1Gedit:
    Штатный редактор графической оболочки Gnome.
    Чем хорош:
    • Легкий;
    • Настраиваемый;
    • Есть поддержка python;
    • Легко расширяется дополнительными плагинами;

    Чем плох:
    • Низкая надежность (иногда все же зависает, после чего восстановить предыдущее состояние проблематично);
    • Нет поддержки управления проектами;
    • Нет интеграции с git (есть несколько плагинов но как с ними правильно работать так и не разобрался);

    Итог: Для редактирования небольших скриптов вполне пригоден, для более крупных проектов практически непригоден.

    Кандидат №2Eric:
    The Eric Python IDE
    Чем хорош:
    • Полноценная IDE;
    • Гибкие настройки;
    • Поддержка python;
    • Есть возможность расширять функционал плагинами;

    Чем плох:
    • Для установки нужен QT;
    • Громоздкий;
    • Как и любая IDE требует периода привыкания (не осилил);

    Итог: На первый взгляд полноценная IDE. С продуманным интерфейсом. Если привыкнуть наверное будет удобно.

    Кандидат №3Emacs
    Аскетичный редактор с массой настраиваемых возможностей
    Чем хорош:
    • Легкий;
    • Настраиваемый;
    • Есть поддержка python и многих других языков;
    • Легко расширяется;

    Чем плох:
    • Можно настраивать до бесконечности и так никогда и не настроить окончательно;
    • Много key-binding;
    • Высокий уровень вхождения в использование;

    Итог: Данный редактор использую в данное время. Сложно настроить, нелегко привыкнуть использовать, очень тяжело потом использовать другой редактор (даже кратковременно)

    Почему выбрал emacs? Довольно давно присматривался, но как и многие разработчики старался использовать готовое решение без сложных телодвижений. Да и наверное не хотелось долго возится с настройкой. Вот только тогда, когда надоели всякие рюшики и кнопочки захотелось просто работать и ни на что не отвлекаться. В общем установив emacs и потратив несколько бессоных суток на настройку, и проработав в нем некоторое время понял что этот редактор задержиться со мной надолго.

    Как настраивал. Многие начинающие пользователи emacs, раздувают свой "~/.emacs" неструктуированными плагинами и hook'ами. В начале я поступил также, но посмотрев на организацию настроек у gabrielelanaro, сделал следующую структуру.
    Используемая конфигурация:
    .
    .. dist — дистрибутивы расширений
    ... autocomplete — автодополнение в emacs, использована версия из репозитория gabrielelanaro, оригинальная версия
    ... python-mode — поддержка python в emacs от python сообщества версия <a рref=«launchpad.net/python-mode/»>6.0.2
    ... yasnippet — поддержка сниппетов в emacs, использована версия из репозитория gabrielelanaro, оригинальная версия
    ... pymacs — python binding к emacs, сайт проекта
    .. doc — документация расширений
    .. exten — расширения которые будут инициализированы
    ... autocomplete
    ... color-theme.el — подключение дополнительных тем оформления
    ... highlight-indentation.el — подсветка отступов
    ... open-next-line.el
    ... python-mode.el — собственно python-mode
    ... python-pylint.el — поддержка pylint (pylint должен быть установлен в системе)
    ... snippet-helpers.el — дополнение к yasnippet
    ... yasnippet
    ... autopair.el — закрытие парных символов
    ... fill-column-indicator.el — индикатор линии
    ... lambda-mode.el — замена lambda на символ отображения
    ... pymacs.el
    ... python-pep8.el — поддержка pep8 (pep8 должен быть установлен в системе)
    ... smart-operator.el
    ... themes — дополнительные темы
    .. init — файлы инициализации компонентов
    .. init.el — непосредственно инициализация конфигурации
    .. python-dist — дистрибутивы python пакетов необходимые для работы
    ... Pymacs
    ... rope
    ... ropemacs
    ... ropemode
    Полностью конфигурацию можно забрать из моего репозитория на GitHub, конфигурация не окончательная. В планах на будущее интегрировать ECB. В wiki репозитория добавить описание какие key-binding используются.

    Интересные дополнения интегрированные в данную конфигурацию:
    Переключение между буферами:
    \С +. — next buffer
    \C +, — prev buffer

    Переключения между окнами:
    \M + up
    \M + down
    \M + left
    \M + right

    Автодополнение по нажатию \TAB

    Что бы правильно работало дополнение классов и методов python необходимо активировать проект rope:
    По умолчанию если проект не создан, rope предлагает его создать.

    Несколько скриншотов:


    Подсвека синтаксиса, вертикальная синяя черта индикатор 80го символа


    Автодополнение в работе


    iBuffer — показан список всех открытых буфферов


    Интегрирован ido с поддержкой fuzzy search

    Хотелось бы услышать мнение опытных пользователей emacs о подобном приеме организации конфигурации emacs и о данной конфигурации в частности. Примеры и пожелания для улучшения данной конфигурации всячески приветствуются.

    Платформа на которой работает данная конфигурация:
    Linux ppc 3.1.5-gentooppc #1 SMP Wed Jan 4 00:01:44 EET 2012 i686 Intel® Pentium® CPU P6200 @ 2.13GHz GenuineIntel GNU/Linux