Emacs:我如何创建一个新的"空"每当创建一个新帧时缓冲?

时间:2014-09-11 15:34:57

标签: emacs

我的Emacs在OS X系统上。每当我使用⌘N时,有没有办法让新帧默认为空缓冲区(就像TextEdit的工作方式一样)?我更喜欢先写内容,然后再决定一个合适的文件名。但是,Emacs要我先决定文件名,然后再写内容。我认为没有任何优势。有谁知道为什么Emacs会那样工作?

基本上,如果我使用 C-x 5 2 ,Emacs总会弹出一个框架,其中包含我当前正在处理的任何文件。这很不方便。我也不希望我的Emacs弹出一个默认为*scratch*的新框架(许多谷歌搜索结果以某种方式建议这种方法)。我更喜欢在新帧中暂时使用一个名为“Untitled”的缓冲区,如果我再次使用⌘N,Emacs会弹出另一个临时“无标题2”缓冲区,依此类推。通过这种方式,我可以稍后决定缓冲区文件名。

5 个答案:

答案 0 :(得分:18)

您可以使用switch-to-buffer创建新缓冲区。输入C-x b,输入缓冲区名称,然后按RET。如果不存在具有该名称的缓冲区,Emacs将在基础模式下自动创建一个新缓冲区。您可以像往常一样使用M-x切换到任何其他模式,例如M-x python-mode。要更改默认缓冲区,请将major-mode的默认值设置为所需的缓冲区。

但是,如果您想自动选择缓冲区名称并创建新框架,则需要编写自己的命令:

(defun lunaryorn-new-buffer-frame ()
  "Create a new frame with a new empty buffer."
  (interactive)
  (let ((buffer (generate-new-buffer "untitled")))
    (set-buffer-major-mode buffer)
    (display-buffer buffer '(display-buffer-pop-up-frame . nil))))

将此绑定到C-c n

(global-set-key (kbd "C-c n") #'lunaryorn-new-buffer-frame)

现在按C-c n会创建一个新帧,其中包含一个名为“untitled”的新空缓冲区,其中x是一个连续的数字。

答案 1 :(得分:5)

如果我理解您的请求,这可能对您有用:

(defun empty-frame ()
  (interactive)
  (let ((fl (make-temp-file "Untitled")))
    (switch-to-buffer-other-frame fl)))

这将为每个新缓冲区打开一个新的临时文件。如果您不想实际创建文件,可以改为使用它:

(defun empty-frame ()
  (interactive)
  (let ((bn "Untitled-")
        (num 1))
    (while
        (get-buffer (concat bn (number-to-string num))) 
      (setq num (1+ num))) 
    (switch-to-buffer-other-frame
     (concat bn (number-to-string num)))))

答案 2 :(得分:4)

以下将创建一个具有唯一名称的缓冲区。缓冲区与任何文件都没有关联,因此如果/ C-x C-s save-buffer,您将被提示提供文件名。

(defun empty-frame ()
  "Open a new frame with a buffer named Untitled<N>.

The buffer is not associated with a file."
  (interactive)
  (switch-to-buffer-other-frame (generate-new-buffer "Untitled")))

答案 3 :(得分:4)

您已经看到了如何创建新的“Untitled”缓冲区的答案,但至于为什么Emacs希望您首先选择一个名称,其中一些原因是:

  • 历史:这就是它的工作原理,一旦你习惯它,它就不会比另类更糟糕了。
  • 通常根据文件名选择主要模式和各种其他细节。因此,您只需打开扩展名为“.tex”或“.c”的文件,而不是创建无标题缓冲区并选择是将其置于LaTeX模式还是C模式。
  • 拥有文件名意味着Emacs可以使用标准的自动保存程序,而使用Untitled方法,应用程序需要有一些特殊的方法在某些“标准”位置自动保存这些无标题文档。

答案 4 :(得分:1)

如果不存在,C-x b *无标题*将打开新缓冲区。另请参阅Emacs manual