如何在Emacs上运行多个shell

时间:2011-06-30 09:53:18

标签: emacs

我在Windows 7上使用Emacs 23.3.1。我知道我可以使用M-x shell从emacs运行shell。我想同时拥有多个shell窗口,但是第二次键入M-x shell只会打开我相同的shell窗口。

有没有办法让不同的shell窗口?

7 个答案:

答案 0 :(得分:194)

C-u M-x shell 会这样做。

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

也适用于eshell。

另一个技巧,如果你使用eshell:正如 Mx eshell 将你带回*eshell*(而不是开始一个新的eshell),如果你使用数字前缀参数,它将需要你到那个eshell缓冲区。例如, C-3 M-x eshell 将带您进入*eshell*<3>。遗憾的是,如果你使用shell(而不是eshell),这个技巧似乎不起作用(至少在我的Emacs 24.0.50.1中。)

答案 1 :(得分:27)

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

答案 2 :(得分:7)

查看MultiTerm,它可以更轻松地管理Emacs中的多个终端。

答案 3 :(得分:5)

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

答案 4 :(得分:4)

这将在你碰巧使用的任何缓冲区中自动生成一个新的shell实例;将它绑定到M-S或类似的东西和即时的快乐:

(defun new-shell ()
  (interactive)

  (let (
        (currentbuf (get-buffer-window (current-buffer)))
        (newbuf     (generate-new-buffer-name "*shell*"))
       )

   (generate-new-buffer newbuf)
   (set-window-dedicated-p currentbuf nil)
   (set-window-buffer currentbuf newbuf)
   (shell newbuf)
  )
)

非常感谢phils推荐使用let重写,即使结果是更糟糕的括号......:\

答案 5 :(得分:4)

经过四年多的时间,我发现有些人有时候仍在关注这个问题,所以我会发布一个快速的函数,我写的是加载一个shell并询问它的名字。这样你就可以命名一个shell&#34; sort-files&#34;如果它专门用于排序文件和另一个&#34; hive&#34;如果它专门用于运行配置单元查询。我现在每天都使用它(在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 "*"))))

答案 6 :(得分:0)

每次调用该函数时都会打开一个新shell,并在需要时自动重命名。 另外一个好处是,如果您正在远程编辑文件(dired / tramp ...),这将在远程主机上打开一个shell并使用远程主机名自动重命名:

@