退出minibuffer时,防止Emacs Evil切换到正常模式

退出minibuffer时,防止Emacs Evil切换到正常模式,emacs,evil-mode,minibuffer,Emacs,Evil Mode,Minibuffer,我是一个邪恶的Emacs用户。然而,当我发现普通模式比普通的Emacs命令更方便时,我实际上只使用普通模式进行奇特的Vim样式的编辑。(主要是大量编辑/拖动/删除)。然而,我也是minibuffer的超级用户(我用ido和flx做了很多m-x操作,这样我就可以避免记住更深奥的命令)。当我这样做时,邪恶会在我退出后自动切换到正常模式。我觉得那很烦人/令人困惑。我怎样才能让它停下来?(最好以优雅、不刻薄的方式) 谢谢, 蟒蛇 编辑: 似乎在所有窗口和所有帧中都会切换到正常模式 您可以通过将用于激活邪

我是一个邪恶的Emacs用户。然而,当我发现普通模式比普通的Emacs命令更方便时,我实际上只使用普通模式进行奇特的Vim样式的编辑。(主要是大量编辑/拖动/删除)。然而,我也是minibuffer的超级用户(我用ido和flx做了很多m-x操作,这样我就可以避免记住更深奥的命令)。当我这样做时,邪恶会在我退出后自动切换到正常模式。我觉得那很烦人/令人困惑。我怎样才能让它停下来?(最好以优雅、不刻薄的方式)

谢谢, 蟒蛇

编辑:


似乎在所有窗口和所有帧中都会切换到正常模式

您可以通过将用于激活邪恶模式的任何功能添加到
minibuffer exit hook

来重新激活邪恶模式,我无法重现您的问题;也许了解你的版本可以帮助任何人识别你的问题。你能用“emacs-q”重现你的问题吗

下面是一种识别邪恶(传统英语意思)代码片段(如果有)的方法,它调用
邪恶正常状态

(defadvice evil-normal-state (before debug-issue activate)
  (setq debug-on-error t)
  (inexisting-function-will-fail))

在将缓冲区设置为您想要的邪恶状态后,立即评估此值,然后使用M-x转到minibuffer。是否存在stacktrace?

无论发生什么,它都发生在调用minibuffer exit hook之后
(添加hook'minibuffer exit hook'evil emacs state)
不会停止对正常模式的更改。我不熟悉evil,因此无法评论
evil emacs state
,但是在hook
中使用它如何(使用计时器0.2 nil'evil emacs state运行)
(使用lambda)。这是一种黑客行为:退出minibuffer后,代码将运行0.2秒。这是可行的,但邪恶似乎仍然对状态感到困惑。我的模型线被邪恶状态着色,它仍然处于正常模式,即使邪恶实际上处于插入模式。似乎切换到正常模式是在我进入迷你缓冲区时发生的,而不是在我退出迷你缓冲区时发生的。有趣的是,
minibuffer setup hook
的内容不包括任何邪恶的钩子。它的内容是
(minibuffer depth setup冰柱minibuffer setup ido minibuffer setup auto indent minibuffer hook rfn eshadow setup minibuffer minibuffer history isearch setup minibuffer history initialize)
它在emacs-Q中没有发生。我确实收到一个错误:
post命令钩子中的错误(邪恶模式检查缓冲区):(无效函数…)
好的,我通过二进制搜索找到了问题。我用自己的全球模式包装邪恶,所以我可以让邪恶无处不在。如果没有它,我如何获得全局模式的行为?我自己修复了:)。你赢了赏金。