簡體   English   中英

Eval region ipython譯員在aquamacs

[英]Eval region ipython interpreter in aquamacs

我正在努力使Aquamacs 3.0a GNU Emacs 24.3.50.2與iPython 1.2.0一起使用作為解釋器。 我能夠使用python.el中的指令使iPython基本上正常工作。 特別是,我加入最多的回答給出的設置, 這里給我的.emacs文件,但我仍然能看到一些奇怪的行為。

注意:我的.emacs文件中的設置顯然適用於iPython 0.11,而不是1.2.0,這可能是問題的根源。 我不是一個lisp專家,所以對此有任何幫助將不勝感激。

這是我能夠重現的一個症狀:^ C ^ R(eval region)命令可能會生成大量空白“In [X]:”從解釋器。 為了重現aquamacs中的問題,我創建了一個名為test.py的文件,並將以下代碼放入其中:

spam = "spam "
spam = spam + spam
spam = spam + spam
print spam

然后我鍵入^ C ^ P(啟動解釋器),返回test.py緩沖區,然后鍵入^ C ^ C(eval buffer)。 輸出是:

(... iPython startup message ...)

In [1]: 
In [2]: 
In [3]: 
In [4]: spam spam spam spam 

In [5]: 

這一切都很好。 但后來我突出顯示最后一行print spam ,然后輸入^ C ^ R. 輸出:

In [5]: 
In [5]: 
In [5]: 

奇怪,不是嗎? 對於較長的文件,情況變得更糟。 即使活動區域是一行,我經常會看到15個空白“In [X]:”行或更多行。

^ C ^ R(eval region)命令可以從解釋器生成大量空白“In [X]:”。

以下是我能夠理解的問題。 您所看到的是如何在comint-mode評估代碼的comint-mode (這是一種基於python-mode的repl編寫的通用模式)。

基本上它將您選擇的字符串發送到下級進程(包括換行符等),然后它接收來自下級進程的輸出並將其打印在emacs comint緩沖區(您在emacs中打開的repl)中。 python代碼

spam = "spam "
spam = spam + spam
spam = spam + spam

不要產生任何輸出,這就是為什么你看到空白的“In [X]:”行。

這一切都很好。 但后來我突出顯示最后一行打印垃圾郵件,然后輸入^ C ^ R. 輸出:

Cc Cr后 ,如果你切換到python repl並按回車鍵,你實際上會打印輸出。 我猜的問題是python-mode不是將最終newline (觸發評估)添加到發送給命令解釋器的字符串。 我能夠將這個問題跟蹤到python.el的函數python-shell-send-string (執行Ch f python-shell-send-string RET ,你會看到幫助緩沖區中python.el的鏈接,點擊它和emacs將帶您定義功能)。 在功能的最后,我們有這些線

(when (or (not (string-match "\n$" string))
                (string-match "\n[ \t].*\n?$" string))
        (comint-send-string process "\n"))

看來這會檢查剛發送的字符串是否有最終newline ,如果沒有顯式發送newline ,則單行字符串檢查失敗,python模式永遠不會插入最后一個換行符。 這似乎是一個bug,也許這是固定在emacs trunk需要檢查。

UPDATE

我可以確認這已在emacs主干中修復。 實際上,您報告的兩個問題都已修復。

UPDATE

python.el的github存儲庫現已棄用,它具有獲取最新版本庫的說明。

1)從此網址下載最新版本

2)通過向init文件添加類似的內容,將已下載python.el的目錄添加到加載路徑中

(add-to-list 'load-path "<name_of_the_directory>")

3)最后需要python-mode

(require 'python)

暫無
暫無

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

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