Странное поведение с ipython в Emacs - PullRequest
1 голос
/ 27 июля 2011

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

In [164]: a = 1

In [165]:   
In [166]: a + 3

Out[166]: 4

In [167]:   
In [168]: def nine():

   .....:    .....:     return 4+5

   .....: 
In [169]: 

In [170]:   

Должен быть только один .....: в строке 'return'.Я подозреваю, что некоторая функция indent / newline в ipython.el или python-mode.el вызывается как-то дважды.(Я действительно не знаю, elisp, но это может быть проблема, которая вовлекает меня в это).

Когда я делаю 'Mx ansi-term RET ipython', он работает как положено, но это не идеально, потому что отправка кода из других файлов, отладка и т. Д. Не работают.

Я могу представить два способа исправить это: либо выяснить, как моя установка вызывает двойные отступы / переносы строк, и исправить это, либо каким-либо образом изменить интерпретатор python по умолчанию с ipython.el на ipython в ansi-termпо-прежнему сохраняя возможность отправки кода и отладки.

Любые советы о том, с чего начать, приветствуются.

Ответы [ 3 ]

1 голос
/ 29 июля 2011

Вы можете проверить свою привязку для RET в буфере Python (M-x description-bindings) и затем перейти оттуда. Для меня это связано с новой строкой. Нажмите на связанную функцию или используйте функцию описания функций M-x, чтобы найти определение связанной функции.

0 голосов
/ 23 июля 2012

Mx ipython RET

- это все, что вам нужно с текущим python-mode.el

http://launchpad.net/python-mode

Хотя с ipython это не идеально, вы можете помочь отправить ошибку-отчеты

0 голосов
/ 04 августа 2011

ОК. Я понял это в процессе переноса .emacs с моей рабочей машины Ubuntu на мой MacBook.

Сначала я закомментировал следующие строки из моего .emacs:

(defadvice comint-send-input (around block-comint-formatting activate)
 (if (string= (buffer-name) "*Python*")
     (letf (((symbol-function 'add-text-properties) (lambda (x y z) nil)))
       ad-do-it))
ad-do-it)

Который избавился от двойного перевода строки. Я также добавил

(define-key py-shell-map "\C-j" 'ipython-send-and-indent)

до конца моего ipython.el, чтобы я мог использовать его тогда же, как и в режиме python.

...