最近我不得不多次运行revert-buffer
命令, 很沮丧的是,当Emacs提示“从文件abc.txt恢复缓冲区吗? (yes or no)”时,每次都需要回答yes。
有没有办法在这种情况下自动回答yes?
(defun my-revert-buffer-noconfirm ()
"Call `revert-buffer' with the NOCONFIRM argument set."
(interactive)
(revert-buffer nil t))
作为替代方案,正如revert-buffer
的docstring所告诉你的那样,请查看revert-without-query
变量,以防这对你来说是一个更好的解决方案。
顺便提一下,许多人在他们的.emacs
文件中添加以下行来使确认只需要按下一个键(只需按下y或n):
(defalias 'yes-or-no-p 'y-or-n-p)
yes-or-no-p
的特定用途,那么考虑为该特定情况定义一个替代命令,它执行相同的操作但使用 y-or-n-p
函数。这是与全面替换 yes-or-no-p
为 y-or-n-p
不同的做法。 - Drewyes-or-no-p
比 y-or-n-p
更好,这是出于相同的原因。为什么呢?可能您对该命令的界面存在异议,或者您可能对 所有 命令都持不同意见,并始终更喜欢 y-or-n-p
。但至少请假定定义该命令的人有一些不使用 y-or-n-p
的原因。通常的想法是,必须键入“yes”或“no”(a)可能会使您停下来更加思考,或者(b)可能会通过意外按错键来防止作出不打算选择的错误选择。 - Drew我使用这个方法,类似于@phils提出的方法,但是使用非nil
的IGNORE-AUTO
参数:
(defun revert-buffer-no-confirm ()
"Revert buffer without confirmation."
(interactive) (revert-buffer t t))
我将它绑定到<f5>
,因为在 MS Windows 中,这个键通常是这样使用的。
无论如何,我强烈同意那些建议我为此定义一个单独的命令的人。如果您对某些文件(始终)非常确定,则无需费心使用revert-without-query
。最好让revert-buffer
继续正常工作,并提供(可能还绑定)自己的命令以供交互式使用。只有当您不想受到确认提示时,才最好自行掌握最佳时机。
自定义 revert-without-query
可能是一个选项。
虽然其他答案指出了重新定义revert-buffer
函数或键绑定的优势,但是可以使用以下类似的方法自动回复“是”来对 任何函数进行操作,这是通过yes-or-no-p
或者同样也可以使用y-or-n-p
:
(defalias 'yes-or-no-p '(lambda (a &rest b) t))
这可能会非常破坏您的数据,因此请谨慎使用。
(setq original-y-or-n-p 'y-or-n-p)
(defalias 'original-y-or-n-p (symbol-function 'y-or-n-p))
(defun default-yes-sometimes (prompt)
(if (or
(string-match "has a running process" prompt)
(string-match "does not exist; create" prompt)
(string-match "modified; kill anyway" prompt)
(string-match "Delete buffer using" prompt)
(string-match "Kill buffer of" prompt)
(string-match "Kill Dired buffer of" prompt)
(string-match "delete buffer using" prompt))
t
(original-y-or-n-p prompt)))
(defalias 'yes-or-no-p 'default-yes-sometimes)
(defalias 'y-or-n-p 'default-yes-sometimes)