如何在Emacs中运行命令时自动回答“是”?

4

最近我不得不多次运行revert-buffer命令, 很沮丧的是,当Emacs提示“从文件abc.txt恢复缓冲区吗? (yes or no)”时,每次都需要回答yes

有没有办法在这种情况下自动回答yes

6个回答

6
如果只是为了交互使用,我会定义一个替代函数:
(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提示。谢谢! - Truong Ha
似乎如果Emacs守护进程在后台运行,它就无法工作。 - alper

3

顺便提一下,许多人在他们的.emacs文件中添加以下行来使确认只需要按下一个键(只需按下yn):

(defalias 'yes-or-no-p 'y-or-n-p)

3
很多人这样做,但我不建议。Emacs 之所以有两个不同的函数来处理这个问题是有原因的。如果你不喜欢 yes-or-no-p特定用途,那么考虑为该特定情况定义一个替代命令,它执行相同的操作但使用 y-or-n-p函数。这是与全面替换 yes-or-no-py-or-n-p 不同的做法。 - Drew
1
@Drew,全局替换的危险在哪里? - tshepang
3
@Tshepang: 编辑 vs 单字符输入。设计命令的人认为使用 yes-or-no-py-or-n-p 更好,这是出于相同的原因。为什么呢?可能您对该命令的界面存在异议,或者您可能对 所有 命令都持不同意见,并始终更喜欢 y-or-n-p。但至少请假定定义该命令的人有一些不使用 y-or-n-p 的原因。通常的想法是,必须键入“yes”或“no”(a)可能会使您停下来更加思考,或者(b)可能会通过意外按错键来防止作出不打算选择的错误选择。 - Drew

2

我使用这个方法,类似于@phils提出的方法,但是使用非nilIGNORE-AUTO参数:

(defun revert-buffer-no-confirm ()
  "Revert buffer without confirmation."
  (interactive) (revert-buffer t t))

我将它绑定到<f5>,因为在 MS Windows 中,这个键通常是这样使用的。

无论如何,我强烈同意那些建议我为此定义一个单独的命令的人。如果您对某些文件(始终)非常确定,则无需费心使用revert-without-query。最好让revert-buffer继续正常工作,并提供(可能还绑定)自己的命令以供交互式使用。只有当您不想受到确认提示时,才最好自行掌握最佳时机。


是的,我的情况是要刷新日志文件。所以一直打“是”太繁琐了。 - Truong Ha

0

自定义 revert-without-query 可能是一个选项。


0

虽然其他答案指出了重新定义revert-buffer函数或键绑定的优势,但是可以使用以下类似的方法自动回复“是”来对 任何函数进行操作,这是通过yes-or-no-p或者同样也可以使用y-or-n-p

(defalias 'yes-or-no-p '(lambda (a &rest b) t))

这可能会非常破坏您的数据,因此请谨慎使用。


0
我使用以下代码将所有的“是/否”确认转换为“y/n”确认,并默认为某些提示选择“是”。我根据需要将提示添加到default-yes-sometimes中。请注意,我不必列出整个提示,只需列出与之匹配的正则表达式即可。
(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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接