假设我在 Emacs 中使用M-x ansi-term
. 这将使用我选择的 shell 在 Emacs 中打开一个缓冲区。假设我然后ipython
从这个 shell 运行。ipython
我可以在 Emacs 中使用 Python 代码从另一个缓冲区向该会话发送代码吗?如果有怎么办?
问问题
2864 次
3 回答
5
为此,我有一个次要模式(除了它不是特定于 IPython 的,我主要将它用于 shell 脚本):isend-mode。
以下是您将如何使用它:
打开
ansi-term
缓冲区:M-x
ansi-term
RET/usr/bin/ipython
RET使用要执行的代码打开缓冲区,并将其关联到解释器缓冲区:
M-x
isend-associate
RET*ansi-term*
RET在 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 回答