在Emacs'python-mode'中用Python或IPython使用多个Python shells

5 人关注

有没有一种方法可以在运行Emacs时强制建立一个新的 python-shell 的实例?当在多个项目中使用不同的工作目录(和不同的模块集)时,这将很方便。

任何试图调用 python-shell 的行为都只会拉出当前的实例。

python
emacs
elisp
ipython
python-mode
hatmatrix
hatmatrix
发布于 2011-11-27
3 个回答
Tikhon Jelvis
Tikhon Jelvis
发布于 2015-01-17
已采纳
0 人赞同

在打开一个新的python-shell之前,你需要重新命名你原来的python-shell。使用 M - x rename-buffer .

Daimrod
Daimrod
发布于 2015-01-17
0 人赞同

重命名缓冲区对我不起作用,但你可以使用 run-python 的第三个参数。

M - : (run-python nil nil t) RET

由于切换到当前缓冲区的绑定并不是真的有用 你可以把它改成更有用的东西

(defun my-run-python (&optional new)
  (interactive "P")
  (if new
   (run-python nil nil new)
   (pop-to-buffer (process-buffer (python-proc)) t)))
(define-key python-mode-map (kbd "C-c C-z") 'my-run-python)

并使用C-cC-z来切换到 切换到当前的Python解释器和 C-uC-cC-z 来切换到一个新的Python解释器。

谢谢。这很好,但它是为loveshack python准备的,而我正在使用 python-mode 。我想在某个时候切换过来,但现在我正在使用 iPython ,它似乎只与 python-mode 兼容。
DavidRR
DavidRR
发布于 2015-01-17
0 人赞同

当使用 python-mode 通过 python.el 在这里,每个Python缓冲区有一个Python shell是默认的。

然而,如果你想让多个 Python 缓冲区共享同一个 Python 外壳,你可以改变这个默认行为。要做到这一点,在打开第一个Python缓冲区后,输入。

M-x python-set-proc

...which is documented:

Set the default value of `python-buffer' to correspond to this buffer.
If the current buffer has a local value of `python-buffer', set the
default (global) value to that.  The associated Python process is the
one that gets input from C-c C-r et al when used in a buffer that
doesn't have a local value of `python-buffer'.

然后以后,如果你想让一个新的Python缓冲区使用自己的shell,请输入。