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

时间:2013-10-05 06:09:04

标签: emacs editor elisp emacs24

我最近不得不多次运行命令revert-buffer,并且只要emacs提示此消息Revert buffer from file abc.txt? (yes or no),就非常沮丧地说

在这种情况下,无论如何自动说吗?

6 个答案:

答案 0 :(得分:6)

如果只是为了交互式使用,我会定义一个替代功能:

(defun my-revert-buffer-noconfirm ()
  "Call `revert-buffer' with the NOCONFIRM argument set."
  (interactive)
  (revert-buffer nil t))

或者,正如revert-buffer文档字符串告诉您的那样,请查看revert-without-query变量,以防对您有更好的解决方案。

答案 1 :(得分:3)

在相关的旁注中,很多人在他们的.emacs中都有以下行,这些行只会确认一个按键(只有 y n ) :

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

答案 2 :(得分:2)

我使用此功能,类似于what @phils proposed,但使用非nil IGNORE-AUTO arg:

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

然后我将它绑定到<f5>,因为在MS Windows中,这通常就是那个键。

无论如何,我(强烈)同意那些建议为此定义单独命令的人。我不会打扰revert-without-query,除非你非常确定某些文件(总是)等。最好让revert-buffer继续行动通常,并提供(也许绑定)您自己的命令以进行交互式使用。 最清楚何时不被确认提示打扰。

答案 3 :(得分:0)

自定义revert-without-query可能是一种选择。

答案 4 :(得分:0)

虽然正如其他答案所指出的那样,更喜欢重新定义revert-buffer函数或键绑定,但可以使用任何函数自动回复“是” yes-or-no-py-or-n-p通过以下内容{<1}}:

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

这可能会对您的数据造成极大的破坏,因此请自行决定使用。

答案 5 :(得分:0)

我使用以下方法将所有“是/否”确认都转化为“是/否”确认, 对于某些提示,默认为是。我有时会根据需要将提示添加到default-yes-。请注意,我不必列出整个提示,只需列出与其匹配的正则表达式即可。

(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)