2013-07-29 162 views
3

我是一個邪惡的Emacs用戶。但是,當我發現它們比普通的Emacs命令更方便時,我真的只使用普通模式進行花哨的Vim風格編輯。 (主要是花哨的批量編輯/延期/刪除)。不過,我也是minibuffer的一個大用戶(我用ido和flx做了很多M-x,所以我可以避免記住更深奧的命令)。當我這樣做時,邪惡退出後自動切換到正常模式。我覺得非常煩人/令人困惑。我怎樣才能讓它停止? (最好採用一種優雅的,不冒險的方式)。保持Emacs Evil退出迷你緩衝區時切換到正常模式

謝謝, PythonNut

編輯:

看來,切換到正常模式中的所有窗口,在所有幀中發生。

+0

其實在檢查。似乎切換到正常模式發生在我進入迷你緩衝器時,而不是當我退出時。有趣的是,'minibuffer-setup-hook'的內容不包含任何惡意鉤子。它的內容是'(minibuffer-depth-setup icicle-minibuffer-setup ido-minibuffer-setup auto-indent-minibuffer-hook rfn-eshadow-setup-minibuffer minibuffer-history-isearch-setup minibuffer-history-initialize)' – PythonNut

回答

1

我無法重現您的問題;也許知道你的版本可以幫助任何人識別你的問題。你能用「emacs -q」(加入邪惡加載路徑)重現你的問題嗎?

這裏是識別邪惡的(傳統的英文含義)的代碼,如果有的話,那就是打電話給evil-normal-state的方法:

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

評估和演示這只是邪惡的狀態設置緩衝區之後你想要它,然後用Mx去迷你緩衝器。是否有堆棧跟蹤?

+0

它不會在emacs -Q中發生。我得到一個錯誤:'後命令鉤(邪惡模式 - 檢查緩衝區)中的錯誤:(void-function ...)' – PythonNut

+0

好吧,我通過二分查找找到了問題。我以自己的全球模式包裹着邪惡,所以我可以在任何地方都有邪惡。如何在沒有它的情況下獲得全局模式的行爲? – PythonNut

+0

我自己修復了:)。你贏得了賞金。 – PythonNut

1

您可以通過將激活它的任何功能添加到minibuffer-exit-hook來重新激活邪惡模式。

+0

Whatever發生時,發生在調用minibuffer-exit-hook之後。 '(add-hook'minibuffer-exit-hook'evil-emacs-state)'不會停止改變到正常模式。 – PythonNut

+0

我對邪惡不熟悉,所以我不能評論'evil-emacs-state',但是在鉤子中使用它(帶有lambda的run-with-timer 0.2 nil'evil-emacs-state) 。這是一種破解:代碼將在退出小型緩衝區後運行0.2秒。 – juanleon

+0

雖然有效,但邪惡仍然對國家感到困惑。我的模式線被邪惡的狀態着色,即使邪惡實際上是在插入模式下,它仍然處於正常模式。 – PythonNut

相關問題