如何在 Aquamacs Emacs 中创建“静默保存所有缓冲区”命令?
我发现这个命令save-some-buffers
很好,但问题是它分别提示我确认我要保存的每个缓冲区。
通过谷歌搜索,我找到了一些关于名为save-silently-p
但似乎不存在的变量的文档(在 Aquamacs 版本 2.4 中,即 Emacs 23.3.50.1)。
那么如何让它在不提示的情况下静默保存所有缓冲区呢?
如何在 Aquamacs Emacs 中创建“静默保存所有缓冲区”命令?
我发现这个命令save-some-buffers
很好,但问题是它分别提示我确认我要保存的每个缓冲区。
通过谷歌搜索,我找到了一些关于名为save-silently-p
但似乎不存在的变量的文档(在 Aquamacs 版本 2.4 中,即 Emacs 23.3.50.1)。
那么如何让它在不提示的情况下静默保存所有缓冲区呢?
无需设置任何自定义变量,您只需:
C-u C-x s
或长手:
Ctrl+ u Ctrl+x s
此外,您也可以这样做,并在提示时对所有可保存的文件缓冲区C-x s
按“是”回答。!
这并不是严格意义上的沉默,但它仍然非常快速/不引人注目。(信用:@phils)
如果您将非零传递给save-some-buffers
它将保存所有文件而不提示,因此您可以执行类似的操作
(defun save-all () (interactive) (save-some-buffers t))
(global-set-key (kbd "C-S") 'save-all)
在这个例子中,第一个参数被设置为一个non-nil
值——“ [o]可选参数(前缀)non-nil
意味着保存所有没有问题。 ”虽然它可能只是普通的旧的t
,但我选择了一个更有意义的符号来提醒自己它代表什么——即'no-confirm
. 如果我想收到一个确认对话框,那么我会改为使用nil
第一个参数。请参阅 doc-string -- M-x describe-function RET save-some-buffers RET
-- 以了解有关此函数如何根据第一个参数是nil
或的行为方式的更多信息non-nil
。
下面的示例使用save-some-buffers
自定义零参数函数作为第二个参数 - 即PRED - 来选择应保存的缓冲区。for 的文档字符串save-some-buffers
表明第二个参数 - 即PRED - 可能是三种可能性之一 - (1)如果PRED是nil
,则考虑所有文件访问缓冲区;(2)如果PRED是t
,那么某些非文件缓冲区也会被考虑;( 3)如果 PRED 是一个零参数函数,它指示每个缓冲区在使用该缓冲区当前调用时是否考虑它。
该示例使用 的键盘快捷键f5
,但用户可以自由地以交互方式调用此自定义函数M-x my-save-some-buffers
-- 或完全分配不同的键盘快捷键。有几个可能的匹配已经被硬编码,用户可以自由添加/删除/修改条件:
• file-visiting-buffer +文件名匹配变量的值abbrev-file-name
。
• file-visiting-buffer +主要模式latex-mode
来自内置tex-mode.el
——不是AUCTeX。
• 文件访问缓冲区+主要模式是markdown-mode
.
• 文件访问缓冲区+主要模式是emacs-lisp-mode
.
• 文件访问缓冲区+派生模式是org-mode
.
(defun my-save-some-buffers ()
(interactive)
(save-some-buffers 'no-confirm (lambda ()
(cond
((and buffer-file-name (equal buffer-file-name abbrev-file-name)))
((and buffer-file-name (eq major-mode 'latex-mode)))
((and buffer-file-name (eq major-mode 'markdown-mode)))
((and buffer-file-name (eq major-mode 'emacs-lisp-mode)))
((and buffer-file-name (derived-mode-p 'org-mode)))))))
(global-set-key [f5] 'my-save-some-buffers)
从信息页面save-some-buffers
:
(保存一些缓冲区和可选的 ARG PRED)
保存一些修改过的文件访问缓冲区。向用户询问每一项。您可以在决定或diff-buffer-with-file之前回答
y' to save,
n' 不保存,C-r' to look at the buffer in question with
查看缓冲区'。d' to view the differences using
该命令首先保存任何“buffer-save-without-query”为非零的缓冲区,而不询问。
因此,您应该将所有文件的变量设置buffer-save-without-query
为t
(例如)。(add-hook 'find-file-hook (lambda () (setq buffer-save-without-query t)))
应该做的伎俩。