如何在Emacs中默默地"保存所有缓冲区"?

inc*_*man 17 emacs

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

我找到了save-some-buffers很好的命令,但问题是它分别提示我确认我要保存的每个缓冲区.

通过谷歌搜索,我发现了一些关于变量的文档,save-silently-p但似乎并不存在(在Aquamacs 2.4版中,即Emacs 23.3.50.1).

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

oco*_*odo 22

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

C-u C-x s
Run Code Online (Sandbox Code Playgroud)

或者在长期:

Ctrl+ u Ctrl+x s

此外,您可以这样做,C-x s!在提示符处按下对所有可保存文件缓冲区的回答是.这不是严格保密的,但它仍然非常快/不显眼.(信用:@phils)


Bri*_*rns 11

如果你传递非零值save-some-buffers将保存所有文件而不提示,所以你可以做类似的事情

(defun save-all () (interactive) (save-some-buffers t))
(global-set-key (kbd "C-S") 'save-all)
Run Code Online (Sandbox Code Playgroud)


law*_*ist 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——来选择应该保存哪些缓冲区。doc-string forsave-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)
Run Code Online (Sandbox Code Playgroud)