[求助] doom-emacs 下,怎样设置 calc-mode 的初始 evil state 为 emacs-state

我试过

(add-to-list 'evil-emacs-state-modes 'calc-mode)
(evil-set-initial-state 'calc-mode 'emacs)

都不行,一打开calc, 还是normal state。

我这里可以啊。 你打开的 calc 是 M-x calc 么? 还是 M-x calculator

用的是 calc, 不过把 init.el 中 evil 的 +everywhere flag 去掉之后就可以了,不知道被什么覆盖了,但如果取消 +everywhere ,就会卸载evil-tex 等插件。

既然知道问题所在,为什么不看一下配置代码。

还没有来的及看,需要查看 +everywhere相关的代码,正在考虑还要不要在这些不可编辑的mode用 evil bindings.

modules/editor/evil/init.el 里面的变量 +evil-collection-disabled-list中有 calc, evil-collection-mode-list里面还有 calc, 还有配置代码

(add-transient-hook! 'calc-mode
 (+evil-collection-init 'calc))

水平有限,搞不清代码。

加个 hook 算啦,(add-hook! 'calc-mode-hook 'evil-emacs-state)。

因为 calc 是自带的,所以对于这种包如果使用了 evil-collection 就会自动调用相 关的 evil-collection 初始化函数。在调用 evil-collection 初始化函数的过程中会 显示地 (require 'calc) (这个会触发其他的 with-eval-after-load 'calc 初始块),doom 为了加快启动速度,于是针对这种情况做了延迟加载优 化,只在它第一次被使用的时候调用 evil-collection 对应的初始化函数(对应的是那个 add-transient-hook! 调用)。

evil-collection 里会设置

(evil-set-initial-state 'calc-mode 'normal)

由于你的设置是发生在这个调用之前的,所以你的设置就会被覆盖了。

谢谢,讲的很清楚。