Answers:
C-u M-x shell 会做的。
它将提示输入新shell的名称,只需按回车键即可得到默认名称(类似于*shell*<2>
。
也可以与eshell一起使用。
如果使用eshell,则是另一个技巧:就像M-x eshell回到*eshell*
(而不是启动新的eshell)一样,如果使用数字前缀参数,它将带您到该eshell缓冲区。例如,C-3M-xeshell将带您到*eshell*<3>
。可悲的是,如果您使用外壳程序(而不是eshell),此技巧似乎不起作用(至少在我的Emacs 24.0.50.1中)。
C-u
运行命令universal-argument
。这是将参数注入下一个命令的方式。您可以通过C-h k C-u
(C-h k
运行describe-key
,非常方便!)阅读有关它的更多信息
C-h f eshell
(C-h f
运行describe-function
)表明该函数eshell
采用可选参数。Quote:数字前缀arg(如中的C-u 42 M-x eshell RET
)切换到具有该数字的会话,并在必要时创建它。非数字前缀arg表示创建新会话。
在外壳上使用类似屏幕的界面可能也很有用。我已经写了自己的书,但是还有其他书,例如EmacsScreen。
四年多以后,我发现有些人有时仍在研究此问题,因此我将发布我编写的一个快速函数来加载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 "*"))))
这将在您碰巧使用的任何缓冲区中自动生成一个新的shell实例;将其绑定到MS或类似的东西并立即带来欢乐:
(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进行重写,即使结果是更加可怕的括号...:\
let
变量是供本地使用的,则需要对它们进行绑定。因为它是你现在对全球价值观currentbuf
和newbuf
。
每次您调用该函数时,都会打开一个新的shell,并在需要时自动重命名。添加的加号是如果您正在远程编辑文件(dired / tramp ...),这将在远程主机上打开一个shell并使用远程主机名自动重命名它:
(defun ggshell (&optional buffer)
(interactive)
(let* (
(tramp-path (when (tramp-tramp-file-p default-directory)
(tramp-dissect-file-name default-directory)))
(host (tramp-file-name-real-host tramp-path))
(user (if (tramp-file-name-user tramp-path)
(format "%s@" (tramp-file-name-user tramp-path)) ""))
(new-buffer-nameA (format "*shell:%s*" host))
(new-buffer-nameB (generate-new-buffer-name new-buffer-nameA))
(currentbuf (get-buffer-window (current-buffer)))
)
(generate-new-buffer new-buffer-nameB)
(set-window-dedicated-p currentbuf nil)
(set-window-buffer currentbuf new-buffer-nameB)
(shell new-buffer-nameB)
))