gnu emacs 27.1每次启动都提示 Symbol’s value as variable is void: ispell-menu-map-needed

你这个配置去掉注释注释几乎是空白了。

如果还出错,原因可能有:

  1. 配置并没有按你期望的方式加载。如果不使用 -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
    
  2. 错误可能来你的系统发行版,例如 Debian 就放了一个名为 dictionaries-common 包在 site-lisp 并导致了跟你遇到的一样的错误:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=968955

  3. 错误可能来自你安装的某个包,因为 (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

想要别人帮你诊断错误,请不要忽略关键信息:

  • 你的详细步骤&命令
  • 你的环境&系统&版本等等
4 个赞