很长一段时间以来,我已经完成了:C-x b然后是一些“独特”的名称,例如xbxb
. 所以我使用 switch-to-buffer
不存在的缓冲区。你可以想象C-x C-b给我看的东西:很多这样的名字。xbxb
, xbxbxxx
.... 一段时间后(一周左右)真的很烦人,因为我发现我已经使用了所有好名字。
有没有更规范的方法来打开一个新的缓冲区?如果我想再运行一次 shell,我会说C-u M-x shell. 沿着这条线的东西将是理想的。
很长一段时间以来,我已经完成了:C-x b然后是一些“独特”的名称,例如xbxb
. 所以我使用 switch-to-buffer
不存在的缓冲区。你可以想象C-x C-b给我看的东西:很多这样的名字。xbxb
, xbxbxxx
.... 一段时间后(一周左右)真的很烦人,因为我发现我已经使用了所有好名字。
有没有更规范的方法来打开一个新的缓冲区?如果我想再运行一次 shell,我会说C-u M-x shell. 沿着这条线的东西将是理想的。
您可以使用make-temp-name
随机后缀为文件或缓冲区生成名称。以此为基础,您可以编写如下内容:
(defun generate-buffer ()
(interactive)
(switch-to-buffer (make-temp-name "scratch")))
其中“scratch”可以替换为您想要的任何前缀。
这样做:
(defun new-scratch ()
"open up a guaranteed new scratch buffer"
(interactive)
(switch-to-buffer (loop for num from 0
for name = (format "blah-%03i" num)
while (get-buffer name)
finally return name)))
我注册只是为了回答这个问题(因为我经常使用这个功能,所以我认为在这里分享它会很有用):
(defun tmpbuf (buf)
"open a buffer,
if it doesn't exist, open a new one"
(interactive "sBuffer name: ")
(switch-to-buffer
(get-buffer-create (concat "*" buf "*"))))
我不确定你想要什么。您说“我发现我已经使用了所有好的名称”,所以让 Emacs 生成名称不会有任何好处,但是如果您要自己指定名称,它不会变得更规范比C-xb name
RET。
否则,已经建议您输入一个字符串并将其与某种“tmp 缓冲区”模式一起使用来创建新名称的功能之一似乎是明智的。
或者,如果您真正想要的是每个主要模式的单个临时缓冲区,scratch.el可能会很有用。
您几乎可以肯定地从绑定C-xC-b到ibuffer
,并使用过滤器和/或组将临时缓冲区与更重要的缓冲区分开。这将处理列表变得混乱。
您似乎对编写新函数感到奇怪?即使确实有内置的东西,使用自定义函数也没有错——这通常是你根据自己的喜好自定义 Emacs 的方式。
我用它来打开一个临时缓冲区。好东西?帮助我跟踪我打开了哪些缓冲区以及何时打开。
```
(defun tmp-buffer()
"Make a temporary buffer and switch to it - Like C-n for Sublime etc"
(interactive)
(switch-to-buffer (get-buffer-create (concat "tmp-" (format-time-string "%m.%dT%H.%M.%S")))))
```
(defun yashi/new-scratch-buffer-in-org-mode ()
(interactive)
(switch-to-buffer (generate-new-buffer-name "*temp*"))
(org-mode))
(bind-key "<f7>" 'yashi/new-scratch-buffer-in-org-mode)
我正在使用deft快速记笔记,但有时我知道我不需要内容,但在 Org 模式下需要一个缓冲区。为此,它一直在为我服务。再次点击F7将创建一个名称相似的缓冲区,*temp*<2>
在我的例子中,根据Uniquify。
顺便说一句,如果您有兴趣,这是一个使用新的 deft 文件启动新缓冲区的命令。 F6启动它。
(defun yashi/deft-new-file ()
(interactive)
(let ((deft-filter-regexp nil))
(deft-new-file)))
(bind-key "<f6>" 'yashi/deft-new-file)
您有权访问其他人的Emacs,并且您想打开一个新缓冲区。如果你幸运的话,这个人已经设置enable-recursive-minibuffers
了t
。如果没有,你可以暂时M-:对这个 Emacs Lisp 表达式进行 eval (不要忘记稍后恢复这个参数):
(setq enable-recursive-minibuffers t)
现在,您打开一个新缓冲区:
C-uM-:将 eval 并将表达式的结果打印到 minibuffer 提示符:
(random)
这为您提供了一个可表示整数(包括负整数)范围内的随机数,这不太可能已经被采用。按Return结束以切换到新缓冲区。