2

我有一个不适合 ansi-term 的包(邪恶)。我试图让 emacs 在 term-mode 处于活动状态时禁用 evil-mode。我正在使用以下命令尝试这样做

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

但是,一旦我打开 ansi-term,这会以某种方式禁用除 term-mode 之外的所有模式中的邪恶模式。任何帮助,将不胜感激。

4

4 回答 4

5

快速查看代码表明这evil-mode是一种全局次要模式,因此它会影响所有缓冲区。

提供的函数turn-on-evil-modeturn-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")
于 2013-10-28T04:13:45.817 回答
4

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

一个解决方案是C-z在术语缓冲区中使用;它只会打破邪恶模式。

于 2013-10-27T22:39:59.510 回答
3

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

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

或者

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

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

于 2013-11-06T17:07:04.770 回答
0

对于 vterm,这对我有用:

(add-hook 'vterm-mode-hook 'evil-emacs-state)
于 2021-02-18T00:07:06.570 回答