繁体   English   中英

Emacs:每当创建新框架时,如何创建新的“空”缓冲区?

[英]Emacs: How do I create a new “empty” buffer whenever creating a new frame?

我的Emacs在OS X系统上。 每当我使用⌘N时,是否有任何方法可以使新帧默认为空缓冲区(就像TextEdit的工作方式一样)? 我更喜欢先写内容,然后再确定合适的文件名。 但是,Emacs希望我先确定文件名,然后再写内容。 我没有看到任何好处。 有谁知道为什么Emacs这样工作?

基本上,如果我使用Cx 5 2 ,则Emacs总是弹出带有我当前正在处理的任何文件的框架。 这很不方便。 我也不希望我的Emacs弹出一个默认为*scratch*的新框架(许多Google搜索结果以某种方式建议了这种方法)。 我希望它在新框架中有一个临时称为“ Untitled”的缓冲区,如果再次使用⌘N ,Emacs会弹出另一个临时的“ Untitled 2”缓冲区,依此类推。 这样,我可以稍后确定缓冲区文件名。

您可以使用switch-to-buffer创建新switch-to-buffer 键入Cx b ,输入缓冲区名称,然后按RET 如果不存在具有该名称的缓冲区,Emacs将在“基本模式”下自动创建一个新的缓冲区。 您可以像往常一样使用Mx切换到其他任何模式,例如Mx 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))))

将此绑定到Cc n

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

现在,按下Cc n可以创建一个新框架,并带有一个名为“ untitled”的新空缓冲区,其中x是一个连续数字。

如果我了解您的要求,这可能对您有用:

(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)))))

下面将创建一个具有唯一名称的缓冲区。 该缓冲区未与任何文件关联,因此如果/当您使用Cx Cs 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")))

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

  • 历史的:这就是它的工作方式,一旦您习惯了它,这并不比替代方案差。
  • 通常根据文件名选择主要模式和其他各种详细信息。 因此,您只需打开一个扩展名为“ .tex”或“ .c”的文件,而不必创建一个无标题的缓冲区并不必选择将其置于LaTeX模式还是C模式。
  • 具有文件名意味着Emacs可以使用标准的自动保存过程,而使用无标题方法,应用程序需要采用某种特殊的方式在某些“标准”位置自动保存那些无标题的文档。

Cx b *无标题*将打开新缓冲区(如果不存在)。 另请参阅Emacs手册

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM