如何在Emacs上运行多个shell

S4M*_*S4M 142 emacs

我在Windows 7上使用Emacs 23.3.1.我知道我可以使用Mx shell从emacs运行shell.我想在同一时间有多个shell窗口,但第二次键入Mx shell只会打开我相同的shell窗口.

有没有办法有不同的外壳窗口?

Mat*_*tis 202

C-u M-x shell 会做的.

它将提示输入新shell的名称,只需按返回默认值(这将是类似的*shell*<2>.

也适用于eshell.

另一个技巧,如果你使用eshell:就像M-x eshell你回到*eshell*(而不是开始一个新的eshell),如果你使用数字前缀参数,它将带你到eshell缓冲区.例如,C-3M-xeshell会带你去*eshell*<3>.遗憾的是,如果你使用shell(而不是eshell),这个技巧似乎不起作用(至少在我的Emacs 24.0.50.1中.)

  • `Cu`运行命令`universal-argument`.这是一种向下一个命令注入参数的方法.你可以用`Ch k Cu`阅读更多关于它的信息(`Ch k`运行`describe-key`,非常方便!) (4认同)
  • 好的,这个有效。Cu Mx shell 询问我新 shell 的名称。谢谢! (2认同)

Gia*_*ann 31

您可以使用重命名shell的缓冲区M-x rename-buffer.然后你就可以启动第二个shell了.

  • 我更喜欢使用Matt Curtis的解决方案.使用新名称运行shell似乎比重命名当前的shell然后运行新的更容易. (2认同)

Vic*_*gin 7

看看MultiTerm,它使得在Emacs中管理多个终端变得更加容易.


Tre*_*son 5

对shell使用类似屏幕的界面也可能很有用.我写了自己的,但还有其他的,比如EmacsScreen.


S4M*_*S4M 5

四年多以后,我发现有些人有时仍在研究此问题,因此,我将发布我编写的快速函数以加载shell并询问其名称。这样,如果专用于对文件进行排序,则可以将外壳命名为“ sort-files”,如果专用于运行配置单元查询,则可以命名为另一个“配置单元”。我现在每天都使用它(在emacs 24上):

(defun create-shell ()
    "creates a shell with a given name"
    (interactive);; "Prompt\n shell name:")
    (let ((shell-name (read-string "shell name: " nil)))
    (shell (concat "*" shell-name "*"))))
Run Code Online (Sandbox Code Playgroud)