如何打开临时缓冲区

时间:2012-04-28 13:33:05

标签: emacs

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

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

7 个答案:

答案 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-x b 提示输入缓冲区名称
  • C-u M - :将eval并将表达式的结果打印到迷你缓冲区提示符:

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