在Emacs中打开另一个shell窗口

11

有一件小事一直在困扰我,与emacs有关

当我在缓冲区中打开shell时, 我会执行:

M-x shell

目前为止还好

但是如果我想打开另一个shell,我会切换到另一个缓冲区并执行:

C-u M-x shell

但是这总是在另一个窗口打开 - 而不是当前所在的窗口

这很烦人,有人知道如何解决吗?

编辑

我应该添加,我有多个缓冲区在多个拆分窗口中打开,例如,我的框架分成3个部分 - 我想要的是新的shell打开在当前具有焦点的那个部分中,即我正在输入的那个,并非备用部分

我认为当我执行C-u M-x shell时,新的shell缓冲区会在下一个窗口中打开,即如果您按C-x o,则会切换到该窗口。我希望它在同一个窗口中打开


你使用的emacs版本是什么?我无法在emacs24中重现你的问题。还有,只是因为我喜欢它,你知道shell-pop吗?只需按下一个键即可弹出一个shell缓冲区。https://github.com/kyagi/shell-pop-el(可通过ELPA获得)。 - Ehvince
GNU Emacs 23.4.1(i686-pc-linux-gnu,GTK+版本2.24.12)于2012-09-22在akateko上修改的Debian版。 - bph
好的,我确认这个问题存在于emacs23中,但在emacs24中不存在。这就是我所能做的。 - Ehvince
如果您打开了一个分割成两个的框架,左侧缓冲区是shell,在该缓冲区中执行以下操作:C-u M-x shell,那么shell<2>将在同一分割窗口中打开,即左侧窗口,而不是右侧窗口? - bph
2个回答

3

Emacs在专用缓冲区中运行交互式shell。它不能在例如TeX缓冲区中运行shell。

M-x shell如果没有已经存在的shell则会创建一个新的shell,而C-u M-x shell则会要求您输入一个新缓冲区的名称。您也可以重命名shell缓冲区以便使用多个shell,请参见上面的链接。

编辑:在Emacs24中,新的shell缓冲区使用pop-to-buffer-same-window显示。 最好的方法是将*Shell*添加到display-buffer-alist - 但不一定需要。

在Emacs23中,*Shell*缓冲区的显示受到special-display-function的控制(因为*Shell*special-display-buffer-namesspecial-display-regexps中有匹配项)。将special-display-function设置为display-buffer-same-window(或类似的内容),你就可以了。
然而,最终的解决方案是升级Emacs到v24;由于您使用的是Linux系统,这应该很简单。

可以确认,升级到emacs 24解决了这个问题(sudo apt-get install emacs24)。 - bph

1
您可以使用以下代码强制“*shell*”缓冲区在同一窗口中显示。
 (add-to-list 'display-buffer-alist
     '("^\\*shell\\*" . (display-buffer-same-window . nil)))

这可能不是问题提问者想要的,但却正是我所需要的。谢谢! - Malcolm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接