在 emacs 术语模式下禁用软件包



我有一个包(邪恶)与ansi-term玩得不好。我正在尝试让 emacs 在术语模式处于活动状态时禁用邪恶模式。我正在使用以下命令尝试这样做

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

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

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

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

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

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

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

提供函数 turn-on-evil-modeturn-off-evil-mode 仅用于为当前缓冲区启用或禁用 evil(这些函数启用或禁用 evil-local-mode,这是每个缓冲区模式),但是全局次要模式在模式挂钩运行启用自身(请参阅自动禁用特定主要模式的全局次要模式),因此最好查看全局模式是否具有一些内置支持,用于在指定情况下禁用自身。

在邪恶模式的情况下,看起来各种"状态"选项都有助于做到这一点,"Emacs 状态"("emacs")禁用所有邪恶键绑定,(evil-set-initial-state MODE STATE)允许您为指定的主模式配置默认状态。

因此,除非不兼容性比键绑定更深,否则我想在加载 Evil 库后,以下内容就可以解决问题:

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

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

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

对于 vterm,这对我有用:

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

最新更新