Emacs中的IPython。快速代码评估

时间:2010-12-27 23:50:45

标签: python shell emacs ipython

更新:问题仍然缺乏令人满意的答案。

我想将代码片段“发送”到Emacs 23.2(Linux)中的IPython解释器。假设我已经在Emacs的缓冲区中启动了一个IPython shell(例如使用Python-mode.elIPython.el),有没有办法在不同的缓冲区中选择一个区域并将该区域“发送”给已经启动的IPython shell?

我已经尝试C-c C-c(send-buffer-to-shell)和C-c |(send-region-to-shell),但只有代码写完才有效在Python而不是在IPython中(IPython可以运行Python代码)。原因似乎是,对于这两个命令,Emacs创建一个扩展名为.py的临时文件(而不是.ipy扩展名),然后由IPython将其解释为“特定于Python的代码”。这使我无法使用特定于IPython的功能 比如魔术命令。

另外,我还读到Emacs提供M-| ('shell-command-on-region')来运行shell中的选定区域。要使用IPython解释器执行此操作,我已尝试将shell-file-name设置为我的IPython路径。但是,当我在选择区域后运行M-|时,Emacs会提示我以下内容:

  

区域上的Shell命令:

然后如果我输入RET,我会在*Shell Command Output*缓冲区上获得IPython手册页,而不会执行该区域。是否有任何特定于IPython的命令可用于M-| ('shell-command-on-region')以使IPython运行我的代码?

谢谢!

2 个答案:

答案 0 :(得分:1)

您使用的是ipython.el吗? 它应该适用于Emacs 23。

如果没有,请查看EmacsWiki: iPython Emacs 23

在Emacs的IPython Cookbook中还有一节(搜索IPythonEmacs23;抱歉不允许发布多个链接:(

一旦你启动了ipython-shell(抄送!),就可以使用"执行区域(" Cc |&#34)从已经启动的shell中的任何缓冲区的区域执行代码片段。 ;)

安德烈亚斯

答案 1 :(得分:0)

我找到 Q1 的部分答案:

Python-mode提供C-c C-c,它可以向已经打开的Python shell发送缓冲区(类似C-c C-|可以向shell发送一个区域),如果安装了ipython.el,然后将默认的python shell设置为IPython。

不幸的是,这仅适用于python脚本,而不适用于IPython脚本。 C-c C-c通过将带有代码段的缓冲区复制到扩展名为 .py 的临时文件,然后将其发送到shell。由于该文件具有扩展名 .py ,因此IPython执行它就好像它是常规Python代码一样,因此代码片段不能具有特定于IPython的代码(例如IPython魔术命令)..