为什么有的配置只在init.el里生效,无法在别的地方生效

比如下面这个配置

(eval-after-load 'tex-mode
  '(define-key latex-mode-map (kbd ", ff") #'(lambda () (interactive) (insert "\begin{align*}\n\n\end{align*}"))))

只有放在 .emacs.d/init.el里才生效。 而我如果在init.el里 (require 'init-key), 再去init-key.el里写下这个配置 最后加上(provide 'init-key), 这个latex的快捷键配置却没用

define-key 应该放在相应的mode-hook里面吧。eval-after-load只会在tex-mode feature加载的时候执行一次,所以有可能define-key只在头一次打开tex文件触发加载tex-mode的时候执行,接下来打开tex文件都不会被执行。

有可能是你的 define-key 执行的时候,变量 latex-mode-map 的值不是将来 latex-mode 用的 keymap 对象。所以就像 @abcbc 说的,把 define-key 放在 latex-mode-hook 里试试。

1 个赞

define-key包到lambda函数里或者使用with-eval-after-load