在emacs term-mode中禁用包

时间:2013-10-27 21:04:28

标签: emacs evil-mode

我有一个包(邪恶),与ansi-term不一致。当term-mode处于活动状态时,我试图让emacs禁用邪恶模式。我使用以下命令尝试这样做

(add-hook 'term-mode-hook (lambda() (evil-mode -1)) )

然而,一旦我打开ansi-term,这会以某种方式禁用每种模式中的邪恶模式,除了term-mode。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

快速查看代码显示evil-mode是全局次要模式,因此会影响所有缓冲区。

提供函数turn-on-evil-modeturn-off-evil-mode仅用于启用或禁用当前缓冲区的邪恶(这些函数启用或禁用evil-local-mode,这是每缓冲区模式),但是全局次要模式在模式挂钩运行后启用(参见automatically disable a global minor mode for a specific major mode),因此最好查看全局模式是否具有在特定情况下禁用自身的内置支持。

在邪恶模式的情况下,看起来各种“状态”选项促成了这一点,“Emacs状态”("emacs")禁用所有Evil键绑定,(evil-set-initial-state MODE STATE)让配置指定主模式的默认状态。

因此,除非不兼容性比键绑定更深入,否则我认为在加载Evil库之后,以下内容将起作用:

(evil-set-initial-state 'term-mode "emacs")

答案 1 :(得分:3)

我很惊讶地重现了这个潜在的错误。

解决方案是在术语缓冲区中使用C-z;它将摆脱邪恶模式。

答案 2 :(得分:2)

我无法在我的设置中重现这一点(Emacs 24.3,来自MELPA的最新Evil)。试试这个:

(add-hook 'term-mode-hook 'evil-emacs-state)

(add-hook 'term-mode-hook 'evil-insert-state)

这对我有用。 (我通常使用插入状态,因为我可以快速跳到正常状态。)

答案 3 :(得分:0)

对于 vterm,这对我有用:

(add-hook 'vterm-mode-hook 'evil-emacs-state)