很长一段时间我都做过: C-x b 然后是一些“独特”的名字,如xbxb
。所以我使用 switch-to-buffer
和不存在的缓冲区。你可以想象 C-x C-b 给我看的:很多这样的名字。 xbxb
,xbxbxxx
....经过一段时间(一周左右)后,它真的很烦人,因为我发现我已经使用了所有好名字。
是否有更规范的方式来打开新缓冲区?如果我想再运行一次shell,我会说 C-u M-x shell 。沿着那条线的东西是理想的。
答案 0 :(得分:12)
您可以使用make-temp-name
为随机后缀生成文件或缓冲区的名称。以此为基础,您可以编写如下内容:
(defun generate-buffer ()
(interactive)
(switch-to-buffer (make-temp-name "scratch")))
其中“scratch”可以替换为您想要的任何前缀。
答案 1 :(得分:7)
这样做:
(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)))
答案 2 :(得分:3)
我注册只是为了回答这个问题(因为我经常使用这个功能,所以我觉得在这里分享它很有用):
(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 "*"))))
答案 3 :(得分:3)
我不确定你想要什么。你说“我发现我已经使用过所有好名字了”,所以让Emacs生成这些名字并不会有任何好处,但是如果你要自己指定这个名字,它就不会再有了规范。比 Cx b name
RET 。
否则,已经建议让你输入字符串并使用某种“tmp buffer”模式创建一个新名称的函数之一似乎是明智的。
或者scratch.el可能证明是有用的,如果您真正想要的是每个主要模式的单个临时缓冲区。
几乎可以肯定,将 Cx Cb 绑定到ibuffer
,并使用过滤器和/或组将临时缓冲区从更重要的区分开那些。这样就可以解决杂乱无章的问题。
你似乎对写一个新功能有点奇怪吗?即使确实有内置的东西,使用自定义函数也没有错误的 - 这通常是您根据自己的喜好自定义Emacs的方式。
答案 4 :(得分:2)
我用它来打开一个临时缓冲区。好东西?帮助我跟踪我打开的缓冲区以及何时打开。
```
(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")))))
```
答案 5 :(得分:1)
(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。
BTW,如果您有兴趣,这是一个用新的deft文件启动新缓冲区的命令。 F6 启动它。
(defun yashi/deft-new-file ()
(interactive)
(let ((deft-filter-regexp nil))
(deft-new-file)))
(bind-key "<f6>" 'yashi/deft-new-file)
答案 6 :(得分:0)
您可以访问someone else's Emacs,并且想要打开一个新的缓冲区。如果您幸运,此人已将enable-recursive-minibuffers
设置为t
。如果没有,你可以暂时执行 M - :来评估这个Emacs Lisp表达式(不要忘记稍后恢复这个参数):
(setq enable-recursive-minibuffers t)
现在,您打开一个新的缓冲区:
C-u M - :将eval并将表达式的结果打印到迷你缓冲区提示符:
(random)
这为您提供了可表示整数范围内的随机数(包括负数),这是不太可能已经采用的。按返回结束切换到新缓冲区。