如何防止迷你缓冲区显示 Emacs 中以前的命令?

问题描述 投票:0回答:3

我什至不确定这是以前的命令还是未完成的命令或其他什么,但我确实知道我真的不喜欢它。

我的问题是,一些命令(或消息,或其他什么)被困在迷你缓冲区中,因此当我键入新命令时,它很快就会出现在那里,然后迷你缓冲区又回到了顽固的命令。有些命令似乎是被选择的,在使用大量命令后,其他东西会卡在那里,但总是显示一些我不想看到的东西。我多次尝试输入 C-g 看看它是否会退出,但这不起作用。

这是我现在拥有的照片:

alt text

我做什么并不重要,那一点

标签:hl-line

不会离开。当输入新命令时,它确实会暂时离开,但会返回。我不喜欢它,它很混乱,我更愿意看到最后使用的命令。

我确实检查了迷你缓冲区的自定义选项(在我的图片中可以看到它的底部),但我没有发现任何似乎是我正在寻找的东西。

有什么想法吗?

emacs minibuffer
3个回答
20
投票

您遇到这种情况很可能是因为您启动了一个命令并使用鼠标在不同的窗口中选择了某些内容。 如果是这种情况,您可以让 Emacs 在您执行此类操作时自动中止命令。

这是您要添加到 .emacs 中的代码:

(defun stop-using-minibuffer ()
  "kill the minibuffer"
  (when (and (>= (recursion-depth) 1) (active-minibuffer-window))
    (abort-recursive-edit)))

(add-hook 'mouse-leave-buffer-hook 'stop-using-minibuffer)

注意:我从我关于该主题的博客文章中获取了此内容。

还有一个解决此问题的超级用户问题,我的答案提供了一个命令来跳回到迷你缓冲区


11
投票

迷你缓冲区失去焦点。尝试 C-x o (Control+x o) 重新获得焦点。要取消命令,请在迷你缓冲区中获得焦点时按 C-g


0
投票
与其他答案类似,当我不久前将焦点从迷你缓冲区中移出但没有注意到时,我经常发现自己处于这种情况。

受 Trey 的答案启发,我的有点严厉的解决方案是让

C-g

 始终中止迷你缓冲区 - 即使迷你缓冲区没有聚焦。

(defun keyboard-quit-minibuffer-aware () "Abort minibuffer if it's open (even if unfocused), otherwise send keyboard-quit" (interactive) (if (active-minibuffer-window) (abort-recursive-edit) (keyboard-quit))) (global-set-key (kbd "C-g") 'keyboard-quit-minibuffer-aware)

认为这也可能导致 emacs 提前中止递归编辑(即,如果您正在进行递归编辑,然后打开迷你缓冲区,然后在其中键入 C-g

,您可能会丢失编辑)。总的来说,我发现这比在意识到我必须将焦点切换到迷你缓冲区窗口之前再次按下 
C-g
 然后返回到我之前尝试做的任何事情之前,比捣碎 C-g 几次要容易得多。

© www.soinside.com 2019 - 2024. All rights reserved.