由于目前官方的 Windows Emacs 版本都是使用 msys2 mingw64环境编译的,没有提供 ucrt64 的版本。所以我就参考官方的脚本 进行微调给自己的Windows电脑不定期编译最新的 Emacs 31.0.50。
我使用的编译脚本: GitHub - Eason0210/emacs-build
编译的安装包可以在这下载:Releases · Eason0210/emacs-build · GitHub
emacs-31.0.50-446c037-installer.exe 会安装到系统中, 已经包含了依赖。
emacs-31.0.50-446c037.zip 直接解压就可以使用,已经包含了依赖。
emacs-31.0.50-446c037-no-deps.zip 不包含依赖,需要自己使用 mys2 和 ucrt64 安装依赖并将 C:/msys64/ucrt64/bin 和 C:/msys64/usr/bin 加入Path。
我个人是直接使用 emacs-31.0.50-446c037-installer.exe 进行安装。
已经开启了常用的特性:
with-native-compilation=aot,如果不希望自己安装的第三方包在使用时自动编译为eln,可以在early-init.el 中加入这个设置:(setq native-comp-jit-compilation nil)
tree-sitter 支持。需要自己编译每个语言的grammar的dll后放到 .emacs.d 目录下的 tree-sitter 文件夹中。我是使用官方仓库的 batch.sh 脚本编译。
librsvg 支持,用于显示 svg
sqlite 支持,比如 org-roam 会用到。
其他 Emacs 默认开启的特征
9 个赞
我用kiennq的编译版本
scoop add kiennq https://github.com/kiennq/scoop-misc
scoop update
scoop install emacs-kl
这个也不错,好像还有 igc 的版本。
不过我不是很喜欢用 scoop,因为它依赖 github,没代理的话就没法用了。
dezzw
2025 年9 月 5 日 02:12
4
最近因为工作原因需要使用Windows,请问Windows build 和 在WSL下使用,性能差异大吗。
目前 Emacs 31 在 Windows 下的速度已经很不错了,我使用下来,没遇到卡的情况,很流畅。启动时间也只有 0.8s (安装了 70 个包的个人配置)。
WSL的速度应该是更快的。
用 WSL 还是 Native 的,主要是要看你要处理的项目是 Windows 平台的还 Linux的。因为 WSL 去访问 Windows 平台的文件还是很慢的。
1 个赞
WSL的速度应该是更快的
WSL 的速度和 linux 原生没有任何可感知的区别。我在 linux 和 WSL 的机器上的启动速度都是 0.23s 左右。
常规的更新、提交、推送操作建议用内置的vc,速度快很多。
确实,不过如果项目不大的话,magit 在 Windows 下还是可用的。
magit慢主要原因是 Git 在 Windows 下本身就比较慢。
vc 也得用 git for win 吧?应该根治不了
igc 分支在 Windows 上编译还需要给 mps 打补丁,所以我目前还开始用。
我打算在 igc分支合并到 master 后再开始用。
你可以使用前面 @TomoeMami 提的 kiennq的编译版本。
我用kiennq的编译版本
scoop add kiennq https://github.com/kiennq/scoop-misc
scoop update
scoop install emacs-kl
据网友反馈,igc已经稳定可用了。
我一直用kiennq的编译包,但今年开始的包都不支持svg,所以我还在用去年的。
也对,等稳定版更好。官方有确定说下一版本会合并igc吗?
看 emacs-devel的讨论,目前还没明确的计划。目前还在讨论是否要 fork mps。
肯定是要在 Emacs 31 正式发布前合并的,这是大部分人的期待。
2 个赞
dezzw
2025 年9 月 5 日 19:18
17
我的wsl setup唯一的问题就是复制经常不好用🤣,粘贴没啥问题
啊哈,我复制一般走 osc52,目前用着感觉和 ssh 没啥区别
启动时弹出很多这样的警告,有些是第三方包的,有些是自己的init-xxx.el,可以屏蔽掉吗
■ Warning (files): Missing ‘lexical-binding’ cookie in "~/.emacs.d/pkgs/keyfreq/keyfreq.el".
You can add one with ‘M-x elisp-enable-lexical-binding RET’.
See ‘(elisp)Selecting Lisp Dialect’ and ‘(elisp)Converting to Lexical Binding’
for more information.
early-init.el和init.el文件头都有添加了 ;;; -*- lexical-binding: t -*-
,但其它文件还是有这种警告
文件头部注释中加 -*- lexical-binding: t -*-
就可以了。比如下图。