3

假设我在 Emacs 中使用M-x ansi-term. 这将使用我选择的 shell 在 Emacs 中打开一个缓冲区。假设我然后ipython从这个 shell 运行。ipython我可以在 Emacs 中使用 Python 代码从另一个缓冲区向该会话发送代码吗?如果有怎么办?

4

3 回答 3

5

为此,我有一个次要模式(除了它不是特定于 IPython 的,我主要将它用于 shell 脚本):isend-mode

以下是您将如何使用它:

  1. 打开ansi-term缓冲区:

    M-xansi-termRET/usr/bin/ipythonRET

  2. 使用要执行的代码打开缓冲区,并将其关联到解释器缓冲区:

    M-xisend-associateRET*ansi-term*RET

  3. 在 python 缓冲区中点击C-RET以将当前行发送到ansi-term缓冲区中的解释器。

于 2012-11-19T08:08:51.567 回答
3
(defun send-buffer-to-ipython ()
  "Send current buffer to the running ipython process."
  (interactive)
  (let* ((ipython-buffer "*ansi-term*") ; the buffer name of your running terminal
         (proc (get-buffer-process ipython-buffer)))
    (unless proc
      (error "no process found"))
    (save-buffer)
    (process-send-string proc
                         (format "execfile(\"%s\")\n" (buffer-file-name)))
    (pop-to-buffer ipython-buffer)      ; show ipython and select it
    ;; (display-buffer ipython-buffer)  ; show ipython but don't select it
    ))

然后将命令绑定send-buffer-to-ipython到您喜欢的任何键。我把它绑定到C-c C-c

(define-key python-mode-map [?\C-c ?\C-c] 'send-buffer-to-ipython)
于 2012-11-18T23:31:57.707 回答
2

使用 python-mode.el

Mx 自定义变量 RET py-shell-name RET ansi-term

Mx ansi-term RET ipython RET

Cc Cc 来自 Python 缓冲区而不是在 IPython shell 中执行

警告:shebang 在默认 py-shell-name 之前

https://launchpad.net/python-mode/trunk/6.0.12/+download/python-mode.el-6.0.12.tar.gz

于 2012-11-19T09:59:21.183 回答