Emacs 31.1 发布速览:没有大功能,但你的配置可以变短了

💡 原文中文,约7700字,阅读约需19分钟。
📝

内容提要

Emacs 31.1发布,虽无重大新功能但值得升级。终端支持child frame和真彩色,tree-sitter实现零配置自动安装,补全系统更现代,新增窗口布局命令和user-lisp目录。移除unexec技术,多项小改进简化配置。升级需注意废弃变量和ctags移除。

🔎

延伸解读

终端体验升级的代价

Emacs 31.1 在终端中默认开启 xterm-mouse-mode,虽然方便了鼠标操作,但会接管鼠标事件,导致无法用终端自身的复制粘贴快捷键。用户需要改用 Emacs 的键位(如 M-w 复制、C-y 粘贴),或者手动关闭该模式。这一变化提醒终端用户,升级后可能需要调整操作习惯。

tree-sitter 自动安装的隐藏坑

tree-sitter 的 grammar 自动安装虽然简化了配置,但自动编译的 grammar 不按 CPU 架构分目录。如果用户在 x86_64 和 arm64 设备间共享配置目录,编译出的 .so 文件会互相覆盖,导致加载错误。多机用户需分开配置目录,或使用 'ask-dir 手动指定安装位置,避免架构冲突。

原生补全更接近 Corfu,但需注意兼容

31.1 的 minibuffer 补全通过新变量(如 completion-eager-display、minibuffer-visible-completions)大幅提升了原生补全的交互体验,接近 Corfu 等弹出式补全器。但 minibuffer-completion-auto-choose 被新机制取代,默认值改为 nil,依赖旧行为的用户需重新调整配置,否则可能影响补全操作。

升级前需检查废弃项

升级到 31.1 前,用户应留意几个废弃项:14 个 font-lock-*-face 变量废弃,但仅影响在 Elisp 代码中直接引用这些变量的用户,需改为引用 face 名;编译安装不再附带 ctags,TAGS 用户需自行安装 Universal Ctags;read-multiple-choice 和 map-y-or-n-p 的交互有细微变化,习惯旧交互的用户需适应。

Q&A

Emacs 31.1 有哪些值得升级的新特性?

Emacs 31.1 虽然没有重大新功能,但包含多项实用改进:终端支持 child frame 和真彩色,tree-sitter 实现零配置自动安装,补全系统更现代,新增窗口布局命令和 user-lisp 目录,并移除了 unexec 技术。这些改进能简化配置并提升体验。

Emacs 31.1 中如何启用 tree-sitter 的自动安装?

在配置中添加以下两行即可: (setopt treesit-auto-install-grammar 'always) (setopt treesit-enabled-modes t) 这样打开支持 tree-sitter 的 major mode 时,如果缺少 grammar,Emacs 会自动下载并编译。注意需要联网和 C 编译器。

Emacs 31.1 在终端模式下有哪些改进?

终端模式下,xterm-mouse-mode 默认开启,支持鼠标操作;child frame 支持被引入,使 Corfu 和 Posframe 等包在终端下也能工作;真彩色支持改用更通用的 terminfo 能力(setrgbf/setrgbb)。

Emacs 31.1 中如何让原生补全更现代化?

通过设置以下选项: (setopt completion-eager-display t) (setopt completion-eager-update t) (setopt minibuffer-visible-completions 'up-down) 这样 minibuffer 会立即显示候选列表,并支持用上下键选择,M-<UP>/M-<DOWN> 可回填选中项。

Emacs 31.1 新增的窗口布局命令有哪些?

新增了四个命令:window-layout-transpose(C-x w t)旋转布局,window-layout-rotate-clockwise(C-x w r <RIGHT>)顺时针旋转,window-layout-flip-leftright(C-x w f <LEFT>)左右镜像,window-layout-flip-topdown(C-x w f <DOWN>)上下镜像。这些命令只改变窗口排列,不改变 buffer 内容。

Emacs 31.1 中 user-lisp 目录有什么作用?

如果配置目录下有 user-lisp/ 子目录,其中的 el 文件会被自动递归字节编译、抓取 autoload 并加入 load-path,无需手动编写代码。可通过 user-lisp-auto-scrape 变量禁用,或用 M-x prepare-user-lisp 手动触发。

Emacs 31.1 升级时有哪些注意事项?

注意:14 个 font-lock-*-face 变量废弃,但 customize-face 不受影响;不再附带 ctags 命令,需自行安装 Universal Ctags;site-start.el 加载时机提前;read-multiple-choice 和 map-y-or-n-p 行为有细微变化;daemon 启动时警告会在第一个 client frame 显示。

Emacs 31.1 中如何下载和验证安装包?

使用以下命令下载并验证: curl -O https://ftp.gnu.org/gnu/emacs/emacs-31.1.tar.xz curl -O https://ftp.gnu.org/gnu/emacs/emacs-31.1.tar.xz.sig gpg --verify emacs-31.1.tar.xz.sig 若公钥缺失,导入密钥 8DC2487E51ABDD90B5C4753F0F56D0553B6D411B,或核对 SHA256 校验和。

🏷️

标签

➡️

继续阅读