Переключение с python-mode.el на python.el - PullRequest
29 голосов
/ 12 декабря 2008

Я недавно пытался переключиться с использования 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), поэтому, если кто-нибудь знает о его последней версии, я хотел бы услышать об этом. (У меня была такая же проблема с версией в emacs CVS, как примерно две недели назад.)

Ответы [ 5 ]

4 голосов
/ 15 декабря 2008

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

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

C-x C-f foo.py [insert: print "foo"]

C-x C-f bar.py [вставить: напечатать "бар"]

C-c C-z [* появляется буфер Python *]

C-x o

C-c C-l RET ["бар" печатается на * Python *]

C-x b foo.py RET

C-c C-l RET ["foo" печатается в том же * буфере Python *]

Поэтому два файла используют одну и ту же низшую оболочку Python. Возможно, существует некоторое непредвиденное взаимодействие между вашими личными настройками режима python и поведением по умолчанию для 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]

вы получите * 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.

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

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

2 голосов
/ 07 ноября 2012

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

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

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

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

1 голос
/ 17 июня 2009

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

мой .02

1 голос
/ 12 декабря 2008

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

...