Emacs安装Evil插件后出现Native compiler错误求助
一、Emacs 29+下Evil/doom-modeline的Native Compiler错误
错误现象
Evil和doom-modeline安装时触发Native Compiler错误,提示编译trampoline函数失败:
Error (use-package): evil/:catch: Native compiler error: (lambda (arg0 arg1 &optional arg2) (let ((f #'set-window-buffer)) (funcall f arg0 arg1 arg2))), "Compiling c:/Users/10747/AppData/Roaming/.emacs.d/eln-cache/29.1-ece58e2c/subr--trampoline-7365742d77696e646f772d627566666572_set_window_buffer_0.eln...
解决方案
清理Native Compiler缓存
手动删除Eln缓存目录(Windows路径为C:/Users/10747/AppData/Roaming/.emacs.d/eln-cache),删除后重启Emacs,让系统重新编译相关文件。临时禁用Native Compiler
在init.el最开头添加以下配置,跳过异步编译或直接关闭native comp:;; 关闭延迟编译 (setq native-comp-deferred-compilation nil) ;; 禁用异步编译退出查询 (setq native-comp-async-query-on-exit nil)若需彻底关闭native comp,可追加:
(setq native-compile-prune-cache t) (setq native-comp-enable nil)检查Windows编译器环境
Emacs 29的Native Compiler依赖MSVC或GCC环境,确保系统已安装对应编译器:- 安装MinGW并将其bin目录添加到系统环境变量
PATH; - 或配置Visual Studio的MSVC编译环境,启动Emacs前运行
vcvarsall.bat加载编译环境。
- 安装MinGW并将其bin目录添加到系统环境变量
调整插件加载时机
尝试给Evil和doom-modeline添加延迟加载,避免初始化冲突:(use-package evil :defer t :init (setq evil-want-integration t) (setq evil-want-keybinding nil) (setq evil-want-C-u-scroll t) (setq evil-want-C-i-jump nil) :config (evil-mode 1) (define-key evil-insert-state-map (kbd "C-g") 'evil-normal-state) (evil-global-set-key 'motion "j" 'evil-next-visual-line) (evil-global-set-key 'motion "k" 'evil-previous-visual-line) (evil-set-initial-state 'messages-buffer-mode 'normal) (evil-set-initial-state 'dashboard-mode 'normal)) (use-package doom-modeline :defer t :init (doom-modeline-mode 1) :custom ((doom-modeline-height 15)))
二、Emacs 27.1下Counsel的defvar-1未定义错误
错误现象
切换到Emacs 27.1后,Counsel提示:
error (use-package): counsel/:catch: symbol’s function definition is void: defvar-1
解决方案
该错误是因为新版Counsel依赖Emacs 28+引入的defvar-1函数,Emacs 27.1不支持该函数,可通过以下方式解决:
安装兼容Emacs 27的Counsel版本
使用稳定源获取兼容旧版本的Counsel包:(use-package counsel :ensure t :pin melpa-stable :config (counsel-mode 1))或手动下载Counsel 0.13.0版本(支持Emacs 27),放入
~/.emacs.d/elpa目录。升级到Emacs 28+版本
考虑升级到Emacs 28.2或更高版本,既解决Counsel的兼容问题,也能更好地支持Native Compiler功能,避免后续插件的版本兼容困扰。
内容的提问来源于stack exchange,提问作者Happytech_web

