16

很长一段时间以来,我已经完成了:C-x b然后是一些“独特”的名称,例如xbxb. 所以我使用 switch-to-buffer不存在的缓冲区。你可以想象C-x C-b给我看的东西:很多这样的名字。xbxb, xbxbxxx.... 一段时间后(一周左右)真的很烦人,因为我发现我已经使用了所有好名字。

有没有更规范的方法来打开一个新的缓冲区?如果我想再运行一次 shell,我会说C-u M-x shell. 沿着这条线的东西将是理想的。

4

7 回答 7

15

您可以使用make-temp-name随机后缀为文件或缓冲区生成名称。以此为基础,您可以编写如下内容:

(defun generate-buffer ()
  (interactive)
  (switch-to-buffer (make-temp-name "scratch")))

其中“scratch”可以替换为您想要的任何前缀。

于 2012-04-28T16:39:33.177 回答
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)))
于 2012-04-28T14:44:59.317 回答
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 "*"))))
于 2012-04-28T18:17:27.613 回答
3

我不确定你想要什么。您说“我发现我已经使用了所有好的名称”,所以让 Emacs 生成名称不会有任何好处,但是如果您要自己指定名称,它不会变得更规范比C-xb name RET

否则,已经建议您输入一个字符串并将其与某种“tmp 缓冲区”模式一起使用来创建新名称的功能之一似乎是明智的。

或者,如果您真正想要的是每个主要模式的单个临时缓冲区,scratch.el可能会很有用。

您几乎可以肯定地从绑定C-xC-bibuffer,并使用过滤器和/或组将临时缓冲区与更重要的缓冲区分开。这将处理列表变得混乱。

您似乎对编写新函数感到奇怪?即使确实有内置的东西,使用自定义函数也没有——这通常是你根据自己的喜好自定义 Emacs 的方式。

于 2012-04-29T04:57:21.320 回答
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")))))

```

于 2017-01-02T06:26:45.590 回答
2
(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)
于 2016-02-17T07:05:42.060 回答
0

您有权访问其他人的Emacs,并且您想打开一个新缓冲区。如果你幸运的话,这个人已经设置enable-recursive-minibufferst。如果没有,你可以暂时M-:对这个 Emacs Lisp 表达式进行 eval (不要忘记稍后恢复这个参数):

(setq enable-recursive-minibuffers t)

现在,您打开一个新缓冲区:

  • C-xb提示输入缓冲区名称
  • C-uM-:将 eval 并将表达式的结果打印到 minibuffer 提示符:

    (random)
    
  • 这为您提供了一个可表示整数(包括负整数)范围内的随机数,这不太可能已经被采用。按Return结束以切换到新缓冲区。

于 2016-02-17T07:41:00.600 回答