[英]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.