我有一个不适合 ansi-term 的包(邪恶)。我试图让 emacs 在 term-mode 处于活动状态时禁用 evil-mode。我正在使用以下命令尝试这样做
(add-hook 'term-mode-hook (lambda() (evil-mode -1)) )
但是,一旦我打开 ansi-term,这会以某种方式禁用除 term-mode 之外的所有模式中的邪恶模式。任何帮助,将不胜感激。
快速查看代码表明这evil-mode
是一种全局次要模式,因此它会影响所有缓冲区。
提供的函数turn-on-evil-mode
和turn-off-evil-mode
仅用于为当前缓冲区启用或禁用邪恶(这些函数 enable 或 disable evil-local-mode
,这是每个缓冲区模式),但是全局次要模式在模式挂钩运行后启用(请参阅自动禁用全局次要模式对于特定的主要模式),因此最好查看全局模式是否具有在特定情况下禁用自身的内置支持。
在 evil-mode 的情况下,看起来各种“状态”选项促进了这一点,“Emacs state”("emacs"
)禁用所有 Evil 键绑定,并(evil-set-initial-state MODE STATE)
允许您为指定的主要模式配置默认状态。
因此,除非不兼容性比键绑定更深入,否则我想在加载 Evil 库后,下面的方法可以解决问题:
(evil-set-initial-state 'term-mode "emacs")
我很惊讶地重现了这个潜在的错误。
一个解决方案是C-z
在术语缓冲区中使用;它只会打破邪恶模式。
我无法在我的设置(Emacs 24.3,来自 MELPA 的最新 Evil)上重现这一点。尝试这个:
(add-hook 'term-mode-hook 'evil-emacs-state)
或者
(add-hook 'term-mode-hook 'evil-insert-state)
这对我有用。(我通常使用插入状态,因为我可以快速跳转到正常状态)。
对于 vterm,这对我有用:
(add-hook 'vterm-mode-hook 'evil-emacs-state)