Переключение с python-mode.el на python.el

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

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

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

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

5 Solutions collect form web for “Переключение с python-mode.el на python.el”

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

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

Cx Cf foo.py [insert: print "foo"]

Cx Cf bar.py [insert: print "bar"]

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

Cx o

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

Cx b foo.py RET

Cc Cl RET ["foo" печатается в том же * буфере * Python *

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

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

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

Затем набрав

 >>> import os >>> os.f[Cc TAB] 

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

 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.

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

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

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

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

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

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

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

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

мой .02

  • Функция Emacs для сообщения функции python, в которой я находится
  • Emacs: методы для отладки python
  • Emacs: использование pdbtrack (python.el)
  • Как я могу использовать emacs-jedi для работы с конкретными проектами virtualenvs
  • Поддержка IPython на Emacs 24.x
  • Проблема импорта в режиме Python
  • Имейте Emacs редактировать докстроны Python, используя rst-mode
  • Есть ли хороший плагин emacs для Python, как ESS для R и slime для Lisp?
  • Python - лучший язык программирования в мире.