2011-07-27 33 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與不過,你可能會幫助發送錯誤的報告