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

Недавно я попытался переключением с помощью python-mode.elдля python.elредактирования питон файлов в 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, как примерно две недели назад.

12.12.2008 11:37:05
Вы не говорите, почему пытались перейти на python.el. Что в этом хорошего?
ShreevatsaR 12.12.2008 14:04:51
5 ОТВЕТОВ

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

1
12.12.2008 12:20:43
Спасибо за ваше мнение, но оно довольно авторитарное. Я ищу сравнение возможностей пакетов на практическом уровне. Меня не волнуют предполагаемые полномочия авторов.
Alex Coventry 12.12.2008 12:31:08

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

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

Cx Cf foo.py [вставить: распечатать "foo"]

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

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

Cx o

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

Cx b foo.py RET

Cc Cl 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.

4
15.12.2008 15:34:00
Используя python.el из пакета emacs-snapshot в Ubuntu 8.04 (Emacs 23), у меня нет функции python-complete-symbol.
Carl Meyer 17.06.2009 18:42:13
Информация в этом ответе устарела с Emacs 24.1.50. Вышеуказанный defun был удален и заменен python-completion-complete-at-pointнесколькими другими механизмами завершения. Мне не очень понятно, как это работает, иначе я бы отредактировал ответ.
Quarky 1.07.2012 12:02:42

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

мой .02

1
17.06.2009 07:08:48
Я только что попробовал это с python-mode.el версии 5.1.0 и не смог воспроизвести это: строки документов прекрасно работают с блокировкой шрифтов. Я не думаю, что ошибка , как это будет присутствовать в течение длительного времени в в режиме преобладающего питона для Emacs, строка документации везде, кто бы поймал плохое поведение довольно скоро.
paprika 31.03.2010 15:00:37
Ах! Теперь я знаю, что вы имеете в виду ... Я сам обнаружил эту ошибку в строке документации: цитирование внутри строки документа действительно нарушает подсветку синтаксиса.
paprika 31.03.2010 19:50:41
@ paprika, @ Gyom: FWIW, похоже, проблема с тройными кавычками была решена в 5.2.0 .
Ian Tegebo 17.02.2011 02:30:24
  1. Я не могу воспроизвести это поведение на Emacs v23.1, с тех пор это должно было быть изменено.

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

3
31.03.2010 15:24:02

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

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

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

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

2
7.11.2012 10:21:47