emacs:无法杀死Minibuffer

Ale*_*all 5 emacs elisp kill minibuffer

我对emacs相当陌生,当我认为不应该将minibuffer保持活动状态时,我遇到了问题。我对“其他窗口”具有以下映射:

 (global-set-key (kbd "M-s M-s") 'other-window)
Run Code Online (Sandbox Code Playgroud)

我知道如果活动,它将在迷你缓冲区中循环,我喜欢这种行为。问题是我的迷你缓冲区一直卡在以下状态:

Next element matching (regexp):
Run Code Online (Sandbox Code Playgroud)

当我什至不尝试进行正则表达式搜索甚至根本不进行搜索时,它就会到达那里。当我C-g击杀它时,我收到了Quit消息,但是微型缓冲区保持活动状态,并直接返回

Next element matching (regexp): 
Run Code Online (Sandbox Code Playgroud)

另外,当它处于这种状态时,我无法使用它M-s M-s来进入框架中的下一个窗口。C-x o似乎仍然可以工作。

我似乎也能够很好地运行其他小型缓冲区命令(例如文件搜索),即使我被卡住了也是如此。

有什么办法可以执行以下操作之一:

  1. 在这种模式下,杀死迷你缓冲区。
  2. 设置我的自定义“其他窗口M-s M-s功能”以退出迷你缓冲区并进入下一个窗口吗?

两种解决方案都可以,尽管第一种可能更好,因为卡住微型缓冲区可能会带来其他意外后果。

Dre*_*rew 5

只是这样做:

(define-key minibuffer-local-map "\M-s" nil)
Run Code Online (Sandbox Code Playgroud)

问题在于,M-s在迷你缓冲区(minibuffer-local-must-match-map以及其他迷你缓冲区键盘映射)中本地绑定到next-matching-history-element,这会提示您并搜索历史记录。

您需要做的是M-s在每个迷你缓冲区键盘映射中取消绑定:即,将其绑定到nil。其中一些地图是从其他地图继承的;minibuffer-local-map应该注意这一点,但是您可能想对做同样的事情minibuffer-local-ns-mapM-x apropos-variable minibuffer map告诉您所有的地图。

[您可以C-h M-k用来查看任何键映射的绑定,例如,minibuffer-local-must-match-map-在库中可用help-fns+.el