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

在Emacs中运行命令时如何自动说是?,emacs,editor,elisp,emacs24,Emacs,Editor,Elisp,Emacs24,最近我不得不多次运行命令revert buffer,每当emacs提示此消息revert buffer from file abc.txt?(是或否) 在这种情况下,是否自动说“是”?如果只是为了交互使用,我会定义一个替代功能: (取消我的还原缓冲区noconfirm() “使用NoConfig参数集调用'revert buffer'。” (互动) (恢复缓冲区为零) 或者,正如revert bufferdocstring告诉您的,请查看revert without query变量,以防这是一

最近我不得不多次运行命令
revert buffer
,每当emacs提示此消息
revert buffer from file abc.txt?(是或否)


在这种情况下,是否自动说“是”?

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

(取消我的还原缓冲区noconfirm()
“使用NoConfig参数集调用'revert buffer'。”
(互动)
(恢复缓冲区为零)

或者,正如
revert buffer
docstring告诉您的,请查看
revert without query
变量,以防这是一个更好的解决方案。

在相关的旁注中,许多人的
.emacs
中有以下行,只需按一个键(y或n)即可进行确认:


自定义
无查询还原
可能是一个选项。

我使用此选项,类似于,但与非
nil
忽略-AUTO
参数:

(defun revert-buffer-no-confirm ()
  "Revert buffer without confirmation."
  (interactive) (revert-buffer t t))
我将它绑定到
,因为在微软的Windows中,这个键通常就是这样做的


无论如何,我(强烈)同意那些建议为此定义单独命令的人。我不想麻烦使用
无查询还原
,除非您非常确定(始终)写入某些文件等。最好让
还原缓冲区
继续正常工作,并提供(可能绑定)您自己的命令以供交互使用。您最清楚什么时候不必为确认提示而烦恼。

正如其他答案所指出的,虽然更倾向于重新定义
还原缓冲区
功能或键绑定,但也可以自动回答“是”使用
yes-or-no-p
或为此
y-or-n-p
执行以下操作:

(德法利亚斯的“是”或“否”p(lambda(a&rest b)t))


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

我使用以下方法将所有“是/否”确认转换为“是/否”确认, 对于某些提示,默认为是。我有时会根据需要将提示添加为默认的“是”。注意,我不必列出整个提示符,只需列出与之匹配的regexp

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

实际上我更喜欢你的函数,因为在其他情况下,我可能仍然需要Emacs来提示。非常感谢。如果emacs daemon在很多人的背景下工作,它似乎不起作用,但我不推荐它。这是Emacs有两种不同功能的原因。如果你不喜欢使用<代码> YES-O-NO-P,那么考虑为那个特定的情况定义一个替换命令,它做同样的事情,但是使用<代码> Y-O-N-P。与到处都用
y-or-n-p
代替
yes-or-no-p
相反。@Drew用毯子代替有什么危险?@Tshepang:Edit vs single char input。同样的原因,一些设计命令的人认为使用
yes-or-no-p
比使用
y-or-n-p
更好。s为什么这么做?他这么做了?您可能不同意该命令的接口。或者您可能不同意wrt all命令,而总是选择
y-Or-n-p
。但至少假设定义该命令的人有某些理由不使用
y-or-n-p
。一般来说,这种想法是必须键入
yes
no
(a)可能会让你停下来多想一想,或者(b)可能会因为不小心按错键而阻止做出你不想做的选择。是的,我的情况是刷新日志文件。所以,继续键入“是”是如此乏味。
(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)