簡體   English   中英

Emacs中使用ipython的奇怪行為

[英]Strange behavior with ipython in Emacs

使用python-mode.el將ipython用作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,但這可能是讓我陷入困境的問題)。

當我執行“ Mx ansi-term RET ipython”時,它可以按預期工作,但這不是理想的,因為從其他文件發送代碼,調試等均不起作用。

我可以想像兩種方法來解決此問題:要么弄清楚我的設置如何導致雙縮進/換行並解決該問題,要么以某種方式將ansi-term中默認的python解釋器從ipython.el更改為ipython,同時仍保留發送功能代碼和調試。

任何從何處開始的建議都值得贊賞。

您可以在Python緩沖區(Mx describe-bindings)中檢查RET的綁定,然后從那里開始。 對我來說,它必須換行。 單擊綁定函數或使用Mx describe-function查找綁定函數的定義。

Mx ipython RET

當前的python-mode.el就是您所需要的

http://launchpad.net/python-mode

盡管它與ipython並不完美,但您可以幫助發送錯誤報告

好的,我在將.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中一樣使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM