2008-12-12 4 views
29

Недавно я попробовал переключиться с python-mode.el на python.el для редактирования файлов python в emacs, обнаружил, что опыт немного инопланетенен и непродуктивен, и отскочил назад. Я использую python-mode.el для чего-то вроде десяти лет, поэтому, возможно, я немного настроен на свои пути. Мне было бы интересно услышать от всех, кто тщательно оценил эти два режима, в частности плюсы и минусы, которые они воспринимают каждый, и как их работа обычно взаимодействует с особенностями, характерными для python.el.Переключение с python-mode.el на python.el

Две главные проблемы для меня с python.el были

  1. Каждый буфер посещения файл питона получает свою собственную низшую интерактивную оболочку Python. Я привык делать разработку в одной интерактивной оболочке и обмениваться данными между файлами python. (Может показаться, что это плохая практика с точки зрения программного обеспечения, но я обычно работаю с огромными наборами данных, которые требуют времени для загрузки в память.)

  2. Поддержка скелетного режима в python.el, которая казалась абсолютно (синтаксис python делает такую ​​автоматизацию ненужной) и плохо спроектирован (например, он не знает о «генераторах циклов генератора» или «<expr 1> if <cond> else <expr 2>», поэтому вам нужно вернуться и удалить двоеточия, которые он помогает вставить после того, как вы настаиваете на том, что вы введите выражения выражения в минибуфере.) Я не мог понять, как отключить его. Была переменная python.el, которая утверждала, что контролирует это, но она, похоже, не работает. Может быть, что версия python.el, которую я использовал, была сломана (она появилась из пакета debian emacs-snapshot), поэтому, если кто-нибудь знает последнюю версию, я хотел бы услышать об этом. (У меня была та же проблема с версией в CVS Emacs, как около двух недель назад.)

+5

Вы не скажете, почему вы попытались перейти на python.el. Что было хорошего в этом? – ShreevatsaR 2008-12-12 14:04:51

ответ

1

питон-mode.el написана сообществом Python. python.el написано сообществом emacs. Я использовал python-mode.el до тех пор, пока я помню, и python.el даже не приближается к стандартам python-mode.el. Я доверяю сообществу Python лучше, чем сообщество Emacs, чтобы придумать достойный файл режима. Просто придерживайтесь python-mode.el, действительно ли есть причина не делать этого?

+17

Спасибо за ваше мнение, но это довольно авторитарно. Я ищу сравнение возможностей пакетов на практическом уровне. Меня не волнуют воспринимаемые авторами полномочия. – 2008-12-12 12:31:08

4

Для чего это стоит, я не вижу поведения, которое вы видите в проблеме №1, «Каждый буфер, посещающий файл python, получает свою собственную уступающую интерактивную оболочку python».

Это то, что я использовал, используя python.el от Emacs 22.2.

Cx Cf foo.py [Вставка: печать "Foo"]

Cx Cf bar.py [Вставка: печать "бар"]

Cc Cz [* Python * буфер] появляется

Cx о

Cc Cl RET [ "бар" напечатан в * Python *]

Cx б foo.py RET

С-С С-л RET [ «Foo» печатается в том же * Python * буфер]

Поэтому два файла обмена же уступает питона оболочки. Возможно, есть некоторые непредвиденные взаимодействия между вашими индивидуальными настройками python-mode и поведениями python.el по умолчанию. Вы пробовали использовать python.el без настроек .emacs и проверки, ведет ли он себя так же?

Основная особенность добавления python.el в python-режиме - это функция завершения символа python-complete-symbol. Вы можете добавить что-то вроде этого

(define-key inferior-python-mode-map "\C-c\t" 'python-complete-symbol) 

Затем набрав

>>> import os 
>>> os.f[C-c TAB] 

вы получите * Пополнения * буфер, содержащий

Click <mouse-2> on a completion to select it. 
In this buffer, type RET to select the completion near point. 

Possible completions are: 
os.fchdir       os.fdatasync 
os.fdopen       os.fork 
os.forkpty       os.fpathconf 
os.fstat       os.fstatvfs 
os.fsync       os.ftruncate 

Он будет работать в .py буферов файлов тоже.

+3

Использование python.el из пакета emacs-snapshot в Ubuntu 8.04 (Emacs 23), похоже, у меня нет функции python-complete-symbol. – 2009-06-17 18:42:13

+1

Информация в этом ответе устарела с Emacs 24.1.50. Вышеупомянутый defun был удален и заменен на `python-complete-complete-at-point` и несколько других механизмов завершения. Я не слишком ясно, как это работает, иначе я бы отредактировал ответ. – suvayu 2012-07-01 12:02:42

1

python-mode.el не поддерживает строки с тройным цитированием, поэтому, если ваша программа содержит длинные docstrings, вся синтаксическая раскраска (и связанные с ней синтаксические функции) имеет тенденцию разрушаться.

мой .02

3
  1. Я не могу воспроизвести это поведение на Emacs v23.1, это должно быть изменено с тех пор.

  2. Забудьте о поддержке любого режима в скелете и используйте гипер-продвинутый и расширяемый yasnippet, это действительно стоит попробовать!

2

Примечание. Почти все сказанное здесь устарело, так как все изменилось.

Команды python-mode.el имеют префикс «py-» в основном, вы должны иметь возможность использовать команды обоих, независимо от того, какой из них был загружен первым.

python-mode.el не выгружает python.el; рядом с картой python-mode, которая переопределяется.

Разница находится в отображенном меню и при наборе клавиш, однако последний будет загружен.