我想更快地加载emacs init文件,所以我使用'eval-after-load 例如,当我加载clojure文件时,我只是把
(eval-after-load 'clojure-mode
'do-something)
有效。
但是当我尝试
(eval-after-load 'emacs-lisp-mode
'do-something)
它不起作用。我想知道emacs-lisp的正确主要模式名称 感谢。
答案 0 :(得分:4)
请阅读documentation of eval-after-load
:
eval-after-load LIBRARY表格
每次加载LIBRARY时,此函数都会安排在加载文件LIBRARY结束时评估表单。如果已加载LIBRARY,它会立即评估表单。不要忘记引用表格!
[...] LIBRARY也可以是一个特征(即符号),在这种情况下,形式在任何调用
(provide LIBRARY)
的文件的末尾进行评估。
您必须将定义主要模式的文件或库的名称作为参数传递。
虽然某些模式在同名文件中定义(例如clojure-mode
中的clojure-mode.el
),但许多文件名称不同,尤其是在实际定义多个主要模式时。
emacs-lisp-mode
在lisp-mode.el
中定义,以及其他一些用于Emacs Lisp编辑的模式(例如lisp-mode
作为通用Lisp语言模式,或lisp-interaction-mode
用于{{1}缓冲区)。
因此,请使用*scratch*
)
此外,您必须将单个sexp作为第二个参数,因此您可能希望使用(eval-after-load 'lisp-mode …
来调用函数(eval-after-load 'lisp-mode '(do-something))
。
如果您使用的是Emacs的快照构建,请使用do-something
,即with-eval-after-load
。它允许多个表单,并且不需要引用。
答案 1 :(得分:2)
只需使用M-:
变量major-mode
进行评估。它实际上是emacs-lisp-mode
。
请注意,*scratch*
实际上位于lisp-interaction-mode
。
至于您要执行的操作,请使用(eval-after-load "lisp-mode")
。
答案 2 :(得分:2)
正如@lunaryom所解释的那样,传递给eval-after-load
的arg不是函数名,而是一个特征名,它基本上是一个文件名。因此,您需要找到加载函数的文件的名称。
我们可以提供像eval-after-defun
这样的功能,实际上这可能是个好主意。如果你想要这样的话,可以通过M-x report-emacs-bug
来提出要求。