我在使用ipython作为python-mode.el的python解释器时遇到了一个小问题。一切都在功能上有效,但按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]:
只有一个.....:在'返回'行。我怀疑ipython.el或python-mode.el中的某些缩进/换行函数是以某种方式被调用两次。 (我真的不知道elisp,但这可能是让我进入它的问题)。
当我做“M-x ansi-term RET ipython”时,它按预期工作,但这并不理想,因为从其他文件发送代码,调试等不起作用。
我可以想象两种方法来解决这个问题:要么弄清楚我的设置是如何导致双缩进/换行并修复它,要么以某种方式将默认的python解释器从ipython.el更改为ipython,同时仍然保留能够发送代码和调试。
对于从何处开始这些建议表示赞赏。
答案 0 :(得分:1)
您可以在Python缓冲区(M-x describe-bindings)中检查RET的绑定,然后从那里开始。对我来说它必然会换行。单击绑定函数或使用M-x describe-function查找绑定函数的定义。
答案 1 :(得分:0)
好的,我在将.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-mode中一样。
答案 2 :(得分:0)
M-x ipython RET
使用当前的python-mode.el ,只需要
http://launchpad.net/python-mode
虽然ipython并不完美,但您可以帮助发送错误报告