我在Windows 7上使用Emacs 23.3.1。我知道我可以使用M-x shell从emacs运行shell。我想同时拥有多个shell窗口,但是第二次键入M-x shell只会打开我相同的shell窗口。
有没有办法让不同的shell窗口?
答案 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并使用远程主机名自动重命名:
@