evil-mode-hook在emacs启动进入evil mode 时, 不起作用. 请问我哪里搞错了?

已设定(setq use-package-always-defer t )

(use-package evil
  :init
  (evil-mode 1)
  :config
  (setcdr evil-insert-state-map nil) 
  (define-key evil-insert-state-map [escape] 'evil-normal-state)
  (setq minor-mode-alist
      (remove '(undo-tree-mode undo-tree-mode-lighter)
              minor-mode-alist))
  )

(use-package evil-escape
  :hook (evil-mode . evil-escape-mode )
  :config
  (evil-escape-mode 1)
  (setq-default evil-escape-key-sequence "jk")
  (setq-default evil-escape-delay 0.2))

emacs启动后, 发现 evil-escape根本没加载. 查看evil-mode-hook, 有(evil-escape-mode).

M-x evil-mode, 把evil-mode关掉后, evil-escape加载了.

感觉emacs启动, 第一次加载evil-mode时, evil-mode-hook这个钩子根本没动. 后面手动开关evil-mode时, 钩子才动作.

请问我哪里搞错了?

非 evil 用户试答一下,试试 evil-local-mode-hook

1 个赞

试了下确实不行,我这些都是直接放到 after-init-hook 中去了,或者直接放到 :init 中(可以加个 :after evil),另外 config 中就不需要 (evil-escape-mode 1) 了,

谢谢, 实际代码里, 我是放到 :init里去了.

但是为啥 evil-mode-hook不行, 而 evil-local-mode-hook 可以. 看来还需仔细了解.