Настройка 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
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 58

    +3
    К Geany не присматривались?
      0
      Ранее устанавливал, не могу сказать ничего плохого, просто не стал использовать.
      0
      Насколько я понял — это не классический GNU Emacs, а XEmacs. По этому сразу вопрос, работает ли это все в консольной версии?
      А еще вопрос, но пожалуй не к ТС. Как настроить это все в Ubuntu, не разводя такой бардак в .emacs.d, ведь большинство из названых в посте скриптов и расширений для Emacs есть в репах?
        0
        там прямым текстом написано, что это GNU Emacs.

        Причин, почему что-то не может работать в консольной версии, не вижу в связи с этим :-) Разве только автодополнение вопросы вызывает.
          0
          Тупанул, почему то подумал что все что раз запущено в графическом режиме — XEmacs. Автодополнение работает.
            0
            Просто для справки XEmacs — это форк одной из старых версий GNU Emacs в своё время соперничавший в популярности с оригиналом. По-моему последние года три активность разработки XEmacs снизилась, а в новых версиях GNU Emacs добавили фич — различия во многом стёрлись.
          0
          В обычном терминале все успешно работает. Конфигурация делалась «все в одном» для того, что бы особо сильно не привязываться к установленным пакетам.
            0
            Не уверен, что подойдет именно для питона, но я с 24 веср на маке использую package.el и доволен.
            tromey.com/elpa/
            marmalade-repo.org/
            0
            Недавно для себя, хотя бы для наглядности контекста, начал юзать tabbar-mode. Для него пришлось избавиться от другой полезной вещи — semantic-sticky-func-mode, конфликтовали дюже.
              +7
              vim
                0
                на хабре даже статья была habrahabr.ru/blogs/python/74128/
                  0
                  Одного плюса к комментарию couatl мне будет недостаточно — я еще свой напишу :)
                  vim — такой же роковой редактор, как и emacs. Обидно, что он не вошел в Ваш обзор.
                    0
                    Сам пользуюсь VIM достаточно давно, но все-таки модальный режим это достаточно специфическая штука и не у всех окупится время на освоение (месяцы!).
                      –1
                      Ни разу не пользовал emacs, есть принципиальная разница?
                        +1
                        Ну как бы в emacs не используется модальный режим. Тоесть чтобы перейти на следующий символ "(" нужно набрать Ctrl — S, (, Enter. А чтобы прыгнуть на парную скобку — Ctrl — Alt — F, ну и так далее. Соответственно, для большинства действий используются комбинации из 2-3 клавиш.

                        В остальном все то же самое, GUI чуть получше, кроссплатформенность чуть похуже (до сих пор не работает с superbar в Windows 7 и так далее).
                    +3
                    PyCharm – не пробовали?(я помню что он может есть больше 500mb)

                    Ограничение в 500мб, это круто, но, имхо можно и докупить пару планок памяти для того редактора который удовлетворит полностью.
                      0
                      Когда работаешь за десктопом ограничение в 500Mb не столь существенно, но последних 5 месяцев в основном работаю на ноутбуке, поэтому захотелось найти более «легковесное» приложение.
                        +4
                        SublimeText2?
                          0
                          Да, он очень удобен. И с производительностью никаких проблем нет.
                          +1
                          Только вчера поставил в свой бук 2 планки по 4гигабайта -1280р.
                          +1
                          Полностью поддерживаю. Продукты данной компании удобные и качественные.
                          • UFO just landed and posted this here
                            +3
                            Можете еще посмотреть в сторону Sublime 2 www.sublimetext.com/2
                            Он написан на Python поэтому при желании сможете допилить, если чего то не будет хватать.
                              +2
                              Там только обёрка в виде питона, сам он c++.
                              0
                              Согласен, коллега. У каждого есть свои killer feature, например у sublime и textmate очень удобная работа с текстом(замена, поиск) и тегами.

                              В PyCharm меня покоряют:
                              1. Поиск по классам(⌘+O) и символам внутри проекта(⌘⌥+O)
                              2. ⌘+Click чтобы перепрыгнуть на объявление метода/переменной/класса.
                              3. Офигенный merge conflict resolver
                              4. Подсветка и валидация синтаксиса, подсказки
                              5. Работает вполне быстро (из-за больших проектов пришлось поставить SSD, чтоб не тормозил при индексации/поиске)

                              Расстраивает только то что он иногда начинает часто падать. Если бы не эти падения – это был бы редактор моей мечты.
                              • UFO just landed and posted this here
                                  +1
                                  Они все одинаковые, вроде, нет значения какая платформа. Я работаю под Mac OS и использую последнюю версию, 2.0.1.

                                  Виснет намертво при каком-то использовании индекса, типа подсказок autocomplete или просто синт. анализе. А потом виснет намертво при перестроении индекса проекта, раза с n-ного перестраивает индекс без зависаний.

                                  И так уже не с одним проектом случается :(. Репорты отправляю, правда через встроенное средство Mac OS, т.к. придумать как воспроизвести – ума не приложу.
                                  • UFO just landed and posted this here
                                      0
                                      Может Java виновата? Помнится там было предупреждение о использовании только определённого JDK.
                                        0
                                        Просто для статистики. PyCharm 2.5.2, Ubuntu 12.04+Cinnamon, Oracle JDK 1.7.0_05. Регулярные зависания при всплытии подсказок autocomplete как в коде, так и в HTML-разметке. В последнем случае накрылись файлы проекта и содержимое views.py.
                                    0
                                    Так сказать по горячим следам. Скачал, запустил. Интересный интерфейс, интересные key-bindings, настораживает только одно, не смог найти описания в чем разница между registered и unregistered версией. Возможно когда не будет критичных заданий попробую разобраться с этим редактором.
                                      0
                                      Разницы никакой, в unregistered периодически всплывает поп-ап с просьбой купить редактор.
                                    0
                                    ECB прикрутить не удалось — семантический анализ текста лдя питона отсутствует, а синтаксический — ну, сами понимаете…

                                    ropemacs заколебал нетолерантностью к недописанному коду:
                                    оно предполагает, что всё, кроме позиции курсора, уже дюже корректно и проверено,
                                    что вызывает его паденте при переносе кусков кода: место, откуда оторван кусок становится невалидным.
                                    Есть ли рецепты обхода этой фичи?
                                      0
                                      Пока что с подобным не сталкивался, в планах есть интеграция ECB. Что из этого получится посмотрим.
                                        0
                                        лично я от всего ECB юзаю только беготню по функциям — очень помогает в моей ситуации.
                                          0
                                          А ropemacsовые чем не устраивают?
                                          rope-goto-definition C-c g
                                          rope-show-doc C-c d
                                            0
                                            qmax я не настоящий сварщик, но у меня емакс без дополнительной настройки умеет находить определение функций (M+.) и возвращаться обратно (M+,).

                                            UP: ну да, при наличии TAGS файла
                                              0
                                              Я полагаю, что за последние 7 лет ситуация сильно изменилась.

                                            0
                                            Семантический парсер питона отсутствует? Первый раз слышу.
                                              0
                                              На момент 24 Apr 2011 04:26:56 +0700 оно работало криво и только из транка.
                                              Сейчас уже допилили?
                                              И автодополнение к self работает?
                                              0
                                              Сам ecb не пользуюсь, включил специально для скриншота
                                              пруфпик:
                                              +1
                                              Есть еще Spyder — Простенький и легковесный, на питоне написан. Не настолько навороченный как Eric, но и глюков меньше.
                                              Мультиплатформа соответственно.
                                                +1
                                                А скриншоты только у меня такие скукоженные?
                                                  +1
                                                  По скриншотам и описанию не заметил, но еще еще один хороший минорный режим: flymake — подсвечивает ошибки
                                                    0
                                                    Flymake, pep8, pylint в процессе, не все работает так как бы мне хотелось, просто нужно немного времени
                                                    0
                                                    Я, кстати, недавно начал пользоваться package.el — своего рода менеджер пакетов для emacs — весьма удобная штука, попробуйте!
                                                      +1
                                                      Возьми за основу конфигурации эмакса русский литературный Emacs Starter Kit. Сейчас это лучший вариант.
                                                        0
                                                        Emacs долгонастраивал, но так и не смог побороть проблему — чтобы при переключении раскладки клавиатуры стандартным способом работали все сочетания клавиш. Знаю что переключать язык можно другим способом в редакторе, но это не удобно.
                                                        В MacOS вроде все нормально с этим.

                                                        Если бы решение нашлось, то может опять бы на него вернулся.
                                                          0
                                                          Встречал на просторах интернета решение этой проблемы, но так как в кирилице крайне редко бываю во время кодинга, то не заострял внимание на данной проблеме. Будет минутка посмотрю, может и получится решить.
                                                          0
                                                          Anjuta никто не пробовал?
                                                          в применение к питону не тестил, а так достаточно мило.
                                                            0
                                                            Тестил, ничего особенного среднестатистическая IDE. Для автокомплита тоже требует rope.
                                                            0
                                                            хорошая статья, emacs действительно очень удобный редактор, сам уже год пользуюсь емаксом (ранее использовал NetBeans, недолго) собрал для себя небольшой пак плагинов и настроек, но тем не менее в статье есть вещи которые помогут улучшить мой конф )

                                                            also было бы интересно прочитать подобную статью по части настройки emacs для java
                                                              0
                                                              Спасибо. К сожалению разработкой на java незанимаюсь, что на Ваш взгляд полезного можно и/или нужно добавить в данную конфигурацию?
                                                                0
                                                                даже не знаю ) на мой взгляд очень много всего, я пользуюсь по минимуму — автокомплит, сниппеты, rope. для меня основные преимущества емакса как раз в скорости и простоте.
                                                              0
                                                              Скажите, что лучше всего читать, чтобы изучить emacs. С vim было гораздо проще, так как было несколько знакомых, а вот emacs'еров нету :( Интересует именно поиск, установка плагинов, какие-то идеи и best practices (а-ля pathogen, NERDTree, etc)
                                                                0
                                                                Отвечу из собственного опыта, начать стоит с emacswiki, затем поискать готовые конфигурации (пример есть в статье), посмотреть как у других сделано. Многое зависит от Ваших запросов и пожеланий. Есть такое мнение, что emacs настроить окончательно невозможно, и не потому что нет определенных конфигураций, а потому что со временем хочется добавить к нему что то еще.
                                                                0
                                                                > python-mode — поддержка python в emacs от python сообщества версия 6.0.2

                                                                — Что-то я не нахожу в репозитарии python-mode от сообщества, а только python.el от fgalina. Кстати, раз уж затронул тему, — в некоторых известных сборках поддерживаются оба варианта (на выбор).

                                                                Only users with full accounts can post comments. Log in, please.