Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

C-x o

C-c C-l RET [ "bar" напечатан в * Python *]

C-x b foo.py RET

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

Поэтому два файла используют одну и ту же нижнюю оболочку 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]

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

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

my.02