aquamacs中的Eval region ipython解释器



我正试图让Aquamacs 3.0a GNU Emacs 24.3.50.2与iPython 1.2.0一起作为解释器。我基本上可以使用python.el中的说明让iPython正常工作。特别是,我在.emacs文件中添加了顶部答案中给出的设置,但我仍然看到一些奇怪的行为。

注意:我的.emacs文件中的设置显然适用于iPython 0.11,而不是1.2.0,这可能是问题的根源。我不是一个口齿不清的专家,所以任何帮助都将不胜感激。

以下是我能够重现的一个症状:^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缓冲区)。输出为:

(... 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中评估代码的副作用(这是一个通用模式,在该模式之上编写python模式的repl)。

基本上,它将您选择的字符串原样发送给下级进程(包括换行符等),然后接收下级进程的输出并将其打印在emacs comint缓冲区(您在emacs中打开的repl)中。python代码

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

不产生任何输出,这就是您看到空白"In[X]:"行的原因。

这一切都很好。但我强调了最后一行打印垃圾邮件和然后键入^C^R。输出:

在执行C-CC-r之后,如果切换到python repl并按>输入-hpython-shell-send-string<kbd〉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模式永远不会插入最后一行换行符。这似乎是一个错误,也许这是在emacs主干中修复的,需要检查。

更新

我可以确认这个问题已经在emacs的行李箱中解决了。事实上,你报告的两个问题都已经解决了。

更新

python.el的github存储库现在已被弃用,它提供了获取该库最新版本的说明。

1) 从这个网址下载最新版本

2) 将下载python.el的目录添加到您的加载路径中,方法是在初始化文件中添加类似的内容

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

3) 最后需要python模式

(require 'python)

相关内容

  • 没有找到相关文章

最新更新