2011-07-27 37 views
1

我有一个小问题,使用ipython作为我的python解释器与python-mode.el。所有功能都可以正常工作,但是按下RET会向前跳两行(不管我是否输入了一个表达式),并且函数定义的自动缩进很奇怪。这是它的样子:Emacs中ipython的奇怪行为

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'行。我怀疑ipython.el或python-mode.el中的一些缩进/换行函数被某种方式调用了两次。 (我真的不知道elisp,但这可能是让我陷入困境的问题)。

当我做'M-x ansi-term RET ipython'时,它按预期工作,但这并不理想,因为从其他文件发送代码,调试等不起作用。

我可以想象两种方法来解决这个问题:要么找出我的设置是如何导致双缩进/新行并修复它,或者以某种方式将默认python解释器从ipython.el更改为ipython在ansi-term中,同时仍然保留发送代码和调试的能力。

任何有关从这些开始的建议是值得赞赏的。

回答

1

您可以在Python缓冲区(M-x describe-bindings)中检查RET的绑定,然后从那里开始。对我来说,它必然会换行。单击绑定函数或使用M-x描述函数查找绑定函数的定义。

0

好的我在将Ubuntu工作机器上的.emacs移植到我的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模式下使用它。

0

M-X IPython的RET

是所有你需要用当前的python-mode.el

http://launchpad.net/python-mode

它并不完美的IPython与不过,你可能会帮助发送错误的报告