这种情况经常发生在我身上:我同时使用了几个M-x shell
个shell。要打开下一个shell,我必须使用rename-buffer
重命名第一个shell。但是,emacs只是提示新的缓冲区名称,而不允许我重用现有的缓冲区名称来构建相关的名称,例如*shell* dist
来代替*shell*
。那么如何在不重新输入所有内容的情况下编写新名称呢?
答案 0 :(得分:7)
另请注意 C-h f rename-uniquely
所以一个选项是:
rename-uniquely
RET shell
RET 但是对于此特定用例,您可以在调用命令时完全通过使用前缀参数来绕过重命名步骤: Cu Mx shell
显然,这完全取决于您是否对自动名称感到满意,或者您是否想要将其命名为更有意义的名称。如果是后者,那么假的答案显然是最有用的(可能与前缀参数方法一起使用)。
答案 1 :(得分:4)
当rename-buffer
提示输入新名称时,只需向下按光标即可。使用向上光标,您将获得所有其他名称。
经过这么多年的电子邮件,我现在才发现这个...
答案 2 :(得分:1)
@phils和@false都提供了很好的答案,也许会有更好的答案。正如@phils指出的那样,它在某种程度上取决于你想要的行为。
这是我的贡献---
除了使用 M-n
检索当前缓冲区名称(以便您可以对其进行编辑)之外,还可以使用lax 完成> em> 针对现有的缓冲区名称。
Lax 完成意味着您可以根据需要完全忽略完成候选项并输入您想要的任何新名称。但这也意味着您可以完成一个现有名称,然后对其进行编辑,以得到一个类似但不同的名称,其中新名称对您来说意味着什么。 IOW,只是M-n
给你的行为,但是对于所有缓冲区名称和匹配而不是循环(重复M-n
)。
图书馆misc-cmds.el
建议rename-buffer
的定义为您提供此类完成行为。如果您不想要该库中的其他内容,您可以获取其rename-buffer
的定义。
很快给出与其他缓冲区相关的缓冲区名称,但比自动无统一方案提供的更有意义。 (我将rename-buffer
绑定到密钥。)
答案 3 :(得分:0)
这个怎么样。
(defun rename-buffer ()
(interactive)
(rename-buffer (read-string "Rename buffer (to new name): " (buffer-name))))
首先显示当前缓冲区名称。然后你可以重命名它。