设置 Emacs 以使用 python/IPython

Setting up Emacs to work with python/IPython

我使用 R 和 RStudio 编写代码已有一段时间,但最近我开始深入研究 python。可以说,我是 python 的新手,而且是详细编辑 emacs .init 文件 (.emacs) 的新手。我正在尝试设置和理解 pythonemacs 之间的相互作用,主要是 IPython,因为我怀疑在不久的将来我会大量使用 IPython。

一开始,我的意图只是能够使用.emacs编辑一些代码,然后如果需要,复制粘贴到IPython。在那个阶段,我的 .emacs 文件中专门用于 python 的部分是:

;; Enable python
(add-to-list 'load-path "/sw/lib/python-mode-1.0")
(setq auto-mode-alist
      (cons '("\.py$" . python-mode) auto-mode-alist))
(setq interpreter-mode-alist
      (cons '("python" . python-mode)
        interpreter-mode-alist))
(autoload 'python-mode "python-mode" "Python editing mode." t)    

我加载了 /sw/lib/python-mode-1.0,它来自不久前安装 fink,因为这是我找到 python-mode.el 文件的唯一目录。当时似乎是唯一有效的命令序列(我的直觉是不需要一半(?))。

我了解到您可以将命令从 .emacs 发送到 Python/IPython。我输入: M-x python-mode ,然后输入 M-x py-shell 与 "normal-python" 一起工作,它起作用了。在这里我不得不问第一个问题。

1- 每次运行命令时,我都会收到消息:

`## working on region in file /var/folders/bd/f2194wl90rg38c8jqc12m47m0000gn/T/python-13120iJs.py..`

如何避免收到此消息(每次!)。这个问题不如下面的第二个问题重要。

然后,基于此 post:How to open IPython interpreter in emacs? 我将其输入到我的 .emacs 文件中:

(when (executable-find "ipython")
  (setq
   python-shell-interpreter "ipython"
   python-shell-interpreter-args ""
   python-shell-prompt-regexp "In \[[0-9]+\]: "
   python-shell-prompt-output-regexp "Out\[[0-9]+\]: "
   python-shell-completion-setup-code
   "from IPython.core.completerlib import module_completion"
   python-shell-completion-module-string-code
   "';'.join(module_completion('''%s'''))\n"
   python-shell-completion-string-code
   "';'.join(get_ipython().Completer.all_completions('''%s'''))\n"))

这实际上允许我通过键入 M-x run-python 来使用 IPython。但是,当我尝试 C-c C-c 时,我收到错误消息:C-c C-c is undefined。 (与 C-c | 相同,也未定义)

在这个阶段,我的 .emacs 文件中有这两个 "chunks" 的 python-set-up 行,但似乎没有任何东西可以正常工作。我在网上查看并发现了这个: http://ipython.org/ipython-doc/1/config/editors.html ,所以我也尝试输入: (require 'ipython) 但它也没有用。它说 file ipython is not found。因此,这个 post 中的第二个也是最重要的问题是:

2- 谁能帮我在 Emacs 中彻底设置 IPython? (我不介意是否必须删除到目前为止的所有设置行。我只是希望能够使用 Emacs+IPython 高效地工作)

我正在使用 Mac 10.9.5。 Emacs 版本是 24.4。 Python 2.7.8。如果有任何用处,我使用 anaconda 安装了 python:

>which python
/anaconda/bin/python

>which ipython
/anaconda/bin/ipython

emacs 与 macports,并且是 "aliased":

 >which emacs 
 emacs:   aliased to open -a /Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs

有不同的 python-mode 并行 - 到目前为止没有错,但是最后加载的是键盘映射和菜单。缺少的键来自 python-mode.el - 在这种情况下请参阅菜单 "Python",这应该会指示其他键。

BTW py- TAB 显示来自 python-mode.el 的可用命令,而

python- TAB 同样来自发货 python.el

关于第一个问题,消息传递:在大多数情况下,代码不会发送到解释器-shell,而是存储在一个临时文件中,您将看到其结果。原因是编码问题——否则会出现几个错误。因此,此消息传递了好消息 - 对 debugging/tweaking.

很有用

也许可以考虑在 https://bugs.launchpad.net/python-mode

提交错误报告

我建议您开始使用没有特殊配置的 Emacs:Emacs-24.4 应该开箱即用 Python/IPython。

我为 Emacs 编写了一个插件,允许在 Markdown 或 TeX 缓冲区中与 ipython 交互。在编辑 Python 代码时按下一个键,带有 Python 代码的区域将被发送到 ipython,其结果将作为逐字输出显示在正下方。如果有 plt.show() 调用,它会被转换为 plt.savefig(..) 并且图像引用包含在 Markdown 或 TeX 中。

emacs-ipython