22

如何在 Aquamacs Emacs 中创建“静默保存所有缓冲区”命令?

我发现这个命令save-some-buffers很好,但问题是它分别提示我确认我要保存的每个缓冲区。

通过谷歌搜索,我找到了一些关于名为save-silently-p但似乎不存在的变量的文档(在 Aquamacs 版本 2.4 中,即 Emacs 23.3.50.1)。

那么如何让它在不提示的情况下静默保存所有缓冲区呢?

4

4 回答 4

26

无需设置任何自定义变量,您只需:

C-u C-x s

或长手:

Ctrl+ u Ctrl+x s

此外,您也可以这样做,并在提示时对所有可保存的文件缓冲区C-x s按“是”回答。!这并不是严格意义上的沉默,但它仍然非常快速/不引人注目。(信用:@phils)

于 2013-07-26T00:44:55.627 回答
15

如果您将非零传递给save-some-buffers它将保存所有文件而不提示,因此您可以执行类似的操作

(defun save-all () (interactive) (save-some-buffers t))
(global-set-key (kbd "C-S") 'save-all)
于 2013-11-22T05:43:38.533 回答
5

在这个例子中,第一个参数被设置为一个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)如果PREDnil,则考虑所有文件访问缓冲区;(2)如果PREDt,那么某些非文件缓冲区也会被考虑;( 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)
于 2015-05-26T20:25:51.000 回答
3

从信息页面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-queryt(例如)。(add-hook 'find-file-hook (lambda () (setq buffer-save-without-query t)))应该做的伎俩。

于 2013-03-06T18:29:05.357 回答