gnu emacs 27.1每次启动都提示 Symbol’s value as variable is void: ispell-menu-map-needed,不知道要怎么设置。关于ispell我从未设置过。
从终端以 emacs --debug-init
命令启动,会有详细的诊断信息,顺着线索就可以找到原因以及解决办法。(印象中这个提示里,有附带这个命令的说明)
如果实在解决不了,不妨放一放,只是启动时多了一句抱怨,无伤大雅。
好的,谢谢。
emacs -Q
也会出现吗?
emacs -Q居然就不会出现这个错误了,怎么回事?
我的init.el配置文件如下,/lisp/下2个二级配置文件已经注释掉了,仍然出现这个错误。
(package-initialize)
(add-to-list 'load-path "~/.emacs.d/lisp/")
(defun open-my-init-file()
(interactive)
(find-file "~/.emacs.d/init.el"))
;; Package Management
;; -----------------------------------------------------------------
;(require 'init-packages)
;; Python init
;; -----------------------------------------------------------------
;(require 'init-python)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won’t work right.
'(package-selected-packages '(use-package ## lsp-mode youdao-dictionary)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won’t work right.
)
;; 显示时间
(display-time)
;; 设置和系统互相粘贴
(setq x-select-enable-clipboard t)
;; 有道词典Enable Cache
(setq url-automatic-caching t)
(global-set-key (kbd "C-q") 'youdao-dictionary-search-at-point+)
;; 禁用\e\e和\C-x\C-u
(global-unset-key "\e\e")
(global-unset-key "\C-x\C-u")
你这个配置去掉注释注释几乎是空白了。
如果还出错,原因可能有:
-
配置并没有按你期望的方式加载。如果不使用
-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
想要别人帮你诊断错误,请不要忽略关键信息:
- 你的详细步骤&命令
- 你的环境&系统&版本等等
有时候也经常出现一些类似错误,不过一般来说清理下.emacs.d下的插件,重新下下就好了,感觉是部分插件有些老版本冲突,因为人懒。。懒得查
我的系统是debian10,emacs是27.1版本。搜索我的所有配置,都没有这个变量。在emacs26版本上没有这个问题,升级后有这个问题。
谢谢你。错误应该是来自你说的第2点,发行版本带来的错误。我干脆等下次升级吧
Yes, I observed this too. You can remove /etc/emacs/site-start.d/50dictionaries-common.el
to fix the problem.
现在系统升级到debian11之后,emacs27.1就没什么错误了。
我的是debian 9.13,我是看启动emacs时载入的文件,然后发现那个载入有点问题才删除那个文件的。