在Emacs中,即使在minibuffer中按下tab键自动完成时有多个结果,我也不想弹出*Completions*缓冲区。这会分散注意力并造成不适。
我该如何做?
更好的方法是使用一个不分散注意力或造成不适的替代方法,例如如果可用,则需要一个tab进行自动完成,但需要两个tab来打开Completions缓冲区。这样,当我期望自动完成时,就不会出现Completions缓冲区。这就是OS X终端用于显示选项卡完成可能性的方式。
我认为原因是 minibuffer-completion-help 命令,它是自动运行的,可以在此处找到说明:https://www.gnu.org/software/emacs/manual/html_node/elisp/Completion-Commands.html 我使用ido和smex,但这个问题也会在vanilla Emacs中出现。
编辑:我找到了一个hack来解决这个问题。使用
在我的
我该如何做?
更好的方法是使用一个不分散注意力或造成不适的替代方法,例如如果可用,则需要一个tab进行自动完成,但需要两个tab来打开Completions缓冲区。这样,当我期望自动完成时,就不会出现Completions缓冲区。这就是OS X终端用于显示选项卡完成可能性的方式。
我认为原因是 minibuffer-completion-help 命令,它是自动运行的,可以在此处找到说明:https://www.gnu.org/software/emacs/manual/html_node/elisp/Completion-Commands.html 我使用ido和smex,但这个问题也会在vanilla Emacs中出现。
编辑:我找到了一个hack来解决这个问题。使用
M-x find-function
,我找到并复制了minibuffer-completion-help
函数定义到我的.emacs.d/init.el
文件中。然后,我将我复制的版本重命名为my-minibuffer-completion-help
,并将(with-displayed-buffer-window *Completions*
改为 '(with-displayed-buffer-window *Completions*
(在前面加上引号,这样它就只被解释为一个字符串)。最后,我通过放置来覆盖对minibuffer-completion-help
的调用。
(advice-add 'minibuffer-completion-help
:override #'my-minibuffer-completion-help)
在我的
.emacs.d/init.el
文件中my-minibuffer-completion-help
函数之后,一定有更好的方法。
编辑2:在my-minibuffer-completion-help
中引用(message "Making completion list...")
还有一个额外的好处,就是消除了自动完成时由于另一个消息闪烁而导致的闪屏现象。是否有其他方法可以做到这一点?