你这个配置去掉注释注释几乎是空白了。
如果还出错,原因可能有:
-
配置并没有按你期望的方式加载。如果不使用
-Q
参数启动 Emacs,则仍然会搜索site-lisp
目录。通过加载一个空文件的
empty-init.el
,比较有无-Q
参数的load-path
区别,显然加-Q
之后load-path
就不再包含site-lisp
:$ diff -u <(emacs -nw -l ~/.emacs.d/empty-init.el --batch --eval "(mapcar #'message load-path)" 2>&1) \ <(emacs -Q -nw -l ~/.emacs.d/empty-init.el --batch --eval "(mapcar #'message load-path)" 2>&1) --- /dev/fd/63 2021-08-19 20:46:30.000000000 +0800 +++ /dev/fd/62 2021-08-19 20:46:30.000000000 +0800 @@ -1,10 +1,3 @@ -/usr/local/share/emacs/site-lisp -/usr/local/share/emacs/site-lisp/autoconf -/usr/local/share/emacs/site-lisp/cask -/usr/local/share/emacs/site-lisp/cmake -/usr/local/share/emacs/site-lisp/gettext -/usr/local/share/emacs/site-lisp/git -/usr/local/share/emacs/site-lisp/libidn /usr/local/Cellar/emacs/27.1/share/emacs/27.1/lisp /usr/local/Cellar/emacs/27.1/share/emacs/27.1/lisp/vc /usr/local/Cellar/emacs/27.1/share/emacs/27.1/lisp/url
-
错误可能来你的系统发行版,例如 Debian 就放了一个名为
dictionaries-common
包在site-lisp
并导致了跟你遇到的一样的错误:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=968955 -
错误可能来自你安装的某个包,因为
(package-initialize)
会加载包的-autoload.el
,你可以rg ‘ispell-menu-map-needed’ ~/.emacs.d/elpa -g '*.el'
搜索一下变量出现的位置。
之所以 emacs -Q
不会出错,是因为 -Q
阻止了非必要的加载,而 Emacs 本身从三年前就不在使用这个变量:https://emba.gnu.org/emacs/emacs/-/commit/97b78542f60d1079a8407da5e1974d064951fb3d
想要别人帮你诊断错误,请不要忽略关键信息:
- 你的详细步骤&命令
- 你的环境&系统&版本等等