如何在emacs中设置两个并行缓冲区来编辑Python文件并在另一个中执行IPython shell?

时间:2011-07-07 20:29:05

标签: emacs elisp ipython advising-functions defadvice

我正在尝试在emacs23中设置ipython.el。我已经成功安装了它(将python-mode.el放入load-path以取代预装了emacs的python.el之后。我甚至可以通过M-x py-shell等运行它。

界面似乎设置得很差,我想知道我做错了,或者我是否需要自定义它以使其按照我喜欢的方式工作。

简而言之,我想要的工作流程:

  • 在一个或多个缓冲区中,编辑Python代码
  • 当我在该缓冲区中点击C-c C-c时,要么在打开的IPython shell缓冲区(如果有的话)中执行该缓冲区中的Python代码,要么打开另一个缓冲区来执行此操作。

但现在发生的事情是:

  • 在一个缓冲区中使用IPython shell,在另一个缓冲区中使用Python文件,如果我在Python文件缓冲区中点击C-c C-c,文件缓冲区将切换到IPython缓冲区(意味着我现在有两个重复的iPython缓冲区)并执行文件。
  • 这很烦人。

我对elisp很新,但我对defadvice的理解是,我可以建议python-execute-buffer注意现有文件缓冲区,运行python-execute-buffer,然后切换回到原始文件缓冲区作为解决方法。

这看起来很傻。任何有关更好的方法来实现这一点的建议将不胜感激!

如果重要:我使用的是OS X 10.6.8,IPython 0.10.1运行Emacs 24.0.50。

提前致谢!

1 个答案:

答案 0 :(得分:0)

原来只需安装python-mode.elanything-ipython.el并添加

即可
(require 'python-mode)
(require 'ipython)
(require 'anything-ipython)
(add-hook 'python-mode-hook #'(lambda ()
                                (define-key py-mode-map (kbd "C-<tab>") 'anything-ipython-complete)))
(add-hook 'ipython-shell-hook #'(lambda ()
                                  (define-key py-mode-map (kbd "C-<tab>")
                        'anything-ipython-complete)))

在我的.emacs中,如果在py-shell之前执行 py-execute-buffer(以便C-c C-c)执行代码,那么一切都按照我想要的方式工作在shell中,而不是只打开*Python Output*缓冲区。