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