Emacs 25.0.50递归加载问题求助:卸载插件后问题仍存在
我之前也踩过类似的递归加载坑,尤其是Emacs自带系统包和ELPA安装的包冲突的时候,给你几个一步步排查的方法:
先清理编译后的
.elc文件
错误提示里提到了bytecomp.elc和ELPA里的seq包,很大概率是旧的编译文件和新版本代码不兼容导致的冲突。你可以:- 删除
~/.emacs.d/elpa/seq-2.20/目录下所有.elc文件 - 同时检查
/usr/local/Cellar/emacs/HEAD/share/emacs/25.0.50/lisp/emacs-lisp/下的bytecomp.elc,如果最近手动修改过这个文件,也删掉它让Emacs重新编译
- 删除
用极简模式启动排查配置问题
先排除你的自定义配置是否搞事情,运行:emacs -Q这个命令会跳过所有自定义配置,只加载Emacs默认设置。如果启动没报错,那问题肯定出在你的
.emacs或者init.el里。接下来可以逐步加载配置片段,比如:(load-file "~/.emacs.d/your-first-snippet.el")每次加载一个片段后检查是否触发错误,就能定位到具体哪段配置搞的鬼。
移除冲突的seq包
你用的是Emacs 25.0.50开发版,而seq包在Emacs 25之后已经被整合到自带库了。你安装的ELPA版seq-2.20完全是多余的,还会和自带的seq库冲突导致递归加载。直接删掉这个包:rm -rf ~/.emacs.d/elpa/seq-2.20/重启Emacs就行,自带的seq库足够用了。
强制重新编译所有相关库
如果上面的方法都没用,就强制Emacs重新编译有问题的库,确保编译文件和源码版本一致:(byte-recompile-directory "/usr/local/Cellar/emacs/HEAD/share/emacs/25.0.50/lisp/emacs-lisp/" 0) (byte-recompile-directory "~/.emacs.d/elpa/" 0)运行这两个命令后重启Emacs,应该能解决版本不匹配的问题。
用调试模式追踪递归源头
要是还找不到问题,就用调试模式启动Emacs,它会显示详细的调用栈,帮你揪出循环加载的地方:emacs --debug-init出错时看调用栈,就能知道是哪个文件触发了递归加载。
额外提醒:你用的是Emacs开发版(25.0.50),本身可能存在一些不稳定的bug,如果上面的方法都解决不了,试试切换到稳定版(比如27或28),说不定问题直接就消失了。
内容的提问来源于stack exchange,提问作者Pacman

