我的Emacs在OS X系统上。每当我使用⌘N时,有没有办法让新帧默认为空缓冲区(就像TextEdit的工作方式一样)?我更喜欢先写内容,然后再决定一个合适的文件名。但是,Emacs要我先决定文件名,然后再写内容。我认为没有任何优势。有谁知道为什么Emacs会那样工作?
基本上,如果我使用 C-x 5 2 ,Emacs总会弹出一个框架,其中包含我当前正在处理的任何文件。这很不方便。我也不希望我的Emacs弹出一个默认为*scratch*
的新框架(许多谷歌搜索结果以某种方式建议这种方法)。我更喜欢在新帧中暂时使用一个名为“Untitled”的缓冲区,如果我再次使用⌘N,Emacs会弹出另一个临时“无标题2”缓冲区,依此类推。通过这种方式,我可以稍后决定缓冲区文件名。
答案 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希望您首先选择一个名称,其中一些原因是:
答案 4 :(得分:1)
如果不存在,C-x b *无标题*将打开新缓冲区。另请参阅Emacs manual