当前位置: 首页 > news >正文

Emacs 31 即将发布!众多实用新功能,让编辑体验大幅提升

Emacs 31 即将发布,这些实用新功能你不能错过!

Rahul M. Juliato

2026 年 6 月 18 日

Karthik Chikmagalur 发表了文章《Emacs 自带的更多实用功能》,探讨 Emacs 现有功能,而我这篇文章将介绍 Emacs 31 即将带来的新功能。

Emacs 31 虽未发布,但我已从 `emacs-31` 分支和 `master` 分支构建并日常使用它,还把新功能整合进 [Emacs Solo](https://github.com/LionyxML/emacs-solo) 配置,用 `; EMACS-31` 标记以便后续审视。下面具体介绍这些新变化。

即装即用的 Tree-sitter

这是最让我满意的变化。以往启用 `*-ts-mode` 步骤繁琐,而在 Emacs 31 中:

(treesit-auto-install-grammar t) ; EMACS-31
(treesit-enabled-modes t) ; EMACS-31

将 `treesit-enabled-modes` 设置为 `t`,有 Tree-sitter 变体的主模式会自动切换;`treesit-auto-install-grammar` 让 Emacs 在语法文件缺失时主动获取构建。这就像用 `treesit-auto` 包,如今核心功能已具备这些能力。

以前我常需添加代码指定语法文件位置:

(add-to-list 'treesit-language-source-alist
'(typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))

在 Emacs 31 中,TypeScript、TSX 等语言的语法源已包含在模式中,我留了很多可删除的代码注释。

不过,在不同架构机器上共享 Emacs 目录树时要注意,自动安装的语法文件不按架构区分,不同架构的 `.so` 文件同名,可能导致二进制文件无法加载。

开发者们还在持续优化 Tree-sitter,从语言支持到可用性和性能都有提升,其发展速度惊人。

内置的 markdown-ts-mode(实验性)

Emacs 31 内置了我发起的 `markdown-ts-mode`。它源于我 2025 年初发给 `emacs-devel` 的提案。后来 Stéphane Marks 加入,成为共同作者,他让这个模式远超我最初设想,变得易用。

(use-package markdown-ts-mode
:ensure nil
:defer t)

这个模式功能丰富:

  • Org 用户会感到熟悉:快捷键和编辑体验与 Org 相似,熟悉 Org 操作的人用 Markdown 几乎无需重新学习。
  • 实时彩色代码块,即使是非 Tree-sitter 语言也适用:代码块用真实主模式字体渲染,能调用 Emacs 内部模式实现语法高亮,编辑命令大多可用,但自动补全功能不完善。
  • 内联图像查看:图像链接在缓冲区直接渲染,Markdown 文档更完整。

`markdown-ts-mode` 仍为实验性,需手动启用,未添加到 `auto-mode-alist` 中。Stéphane 和我正努力让它下次发布时达到可用状态,欢迎大家反馈问题。

更多截图可在 [这里](https://github.com/LionyxML/markdown-ts-mode-lab/tree/main/demo) 查看。

Eglot 使用 markdown-ts 渲染文档(同样是实验性的)

Emacs 31 中,Eglot 可用 `markdown-ts-view-mode` 渲染 LSP 文档,而非纯文本显示:

(eglot-documentation-renderer 'markdown-ts-view-mode) ;; EMACS-31
(eglot-code-action-indications nil) ;; EMACS-31

`markdown-ts-view-mode` 无需额外组件就能获得格式化悬停文档,但因依赖 `markdown-ts-mode` 属实验性,需手动启用。我关闭了 `eglot-code-action-indications`,因部分语言服务器的提示很烦人。

`eglot-events-buffer-size` 即将被 `eglot-events-buffer-config` 取代,我留了注释待清理。

光标处的 eldoc 提示

这是我喜欢的小功能:

(eldoc-help-at-pt t) ;; EMACS-31

启用后,eldoc 自动显示光标下内容的帮助信息,结合 `eldoc-echo-area-prefer-doc-buffer`,浏览代码更有指引感。

更智能、更即时的自动补全

迷你缓冲区和自动补全机制有新开关:

(completion-eager-update t) ;; EMACS-31
(completion-eager-display 'auto) ;; EMACS-31
(minibuffer-visible-completions 'up-down) ;; EMACS-31

`completion-eager-update` 和 `completion-eager-display` 让补全界面实时刷新,`minibuffer-visible-completions` 设置为 `'up-down` 后,可用箭头键在补全候选中移动。

icomplete 也有改进,Emacs 31 包含我参与开发的补丁,带来垂直的缓冲区内部行为和前缀指示,我配置中的兼容性代码可删除。

窗口布局操作

有一组新命令可重新排列窗口布局:

("C-x w t" . window-layout-transpose) ; EMACS-31
("C-x w r" . window-layout-rotate-clockwise) ; EMACS-31
("C-x w f h" . window-layout-flip-leftright) ; EMACS-31
("C-x w f v" . window-layout-flip-topdown) ; EMACS-31

这些命令可交换布局、旋转布局、翻转布局,操作时保留缓冲区状态。

可停靠在侧边窗口的 Speedbar

在 Emacs 31 中,Speedbar 可停靠在侧边窗口:

(speedbar-window-default-width 25) ;; EMACS-31
(speedbar-window-max-width 25) ;; EMACS-31

(speedbar-window) ;; EMACS-31

这种方式比旧的浮动框架方式好,设置宽度上限可避免冲突。

版本控制方面的改进

启用了一些版本控制改进:

(setopt
vc-auto-revert-mode t ; EMACS-31
vc-allow-rewriting-published-history t ; EMACS-31
vc-dir-auto-hide-up-to-date 'revert) ; EMACS-31

`vc-dir-auto-hide-up-to-date` 让刷新 `vc-dir` 缓冲区时自动隐藏最新文件,无需复杂操作;`vc-allow-rewriting-published-history` 考虑了特定工作流和强制推送情况。

可编辑的 xref 缓冲区

我配置中有注释提醒删除自定义技巧:

;; EMACS-31 Remove this, since new emacs will come with 'e' for editing xref buffers.
;; Reference: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=80616

长期以来,xref 缓冲区无内联编辑功能,我曾提议绑定 `xref-export-to-grep` 到 `E` 键。维护 xref 的 Dmitry Gutov 提出让 xref 缓冲区支持内联编辑更好,几天后他编写并推送了 `xref-edit-mode`,省去额外步骤且处理大型缓冲区速度更快。

现在 Emacs 31 支持可编辑的 xref 缓冲区,可在 `C-x p g` 搜索内容后按 `e` 编辑,按 `C-c C-c` 确认。

ERC 变得更整洁

(erc-log-insert-log-on-open 'erc-log-new-target-buffer-p) ;; EMACS-31

这让 ERC 只在新打开的目标缓冲区插入之前的日志。Emacs 31 中 `scrolltobottom` 模块不依赖 `erc-fill-wrap`,可删除旧版本的条件代码。

一系列提升生活质量的小改进

(delete-pair-push-mark t) ; EMACS-31: 在 delete-pair 后推送一个标记,这样 C-x C-x 可以选中删除对内部的内容
(ibuffer-human-readable-size t) ; EMACS-31: 以 KB/MB 显示大小,而不是原始字节数
(ielm-history-file-name ...) ; EMACS-31: IELM 输入历史终于可以持久化了
(kill-region-dwim 'emacs-word) ; EMACS-31: 没有选中区域时按 C-w 会删除一个单词
(native-comp-async-on-battery-power nil) ; EMACS-31: 电池供电时停止原生编译任务
(view-lossage-auto-refresh t) ; EMACS-31: 让 C-h l 实时更新,非常适合教学/调试
(display-fill-column-indicator-warning nil) ; EMACS-31
(dired-hide-details-hide-absolute-location t); EMACS-31: 在 dired-hide-details-mode 中隐藏绝对目录路径
(world-clock-sort-order "%FT%T") ; EMACS-31: 合理排序世界时钟
(zone-all-frames t) ; EMACS-31
(zone-all-windows-in-frame t) ; EMACS-31
(uniquify-after-kill-buffer-flag t) ; EMACS-31: 从 -p 变体重命名而来

部分功能值得说明:

  • `kill-region-dwim`:解决多年小问题,无活动区域时按 `C-w` 删单词,无“标记未激活”提示。
  • `view-lossage-auto-refresh`:让 `C-h l` 实时显示按键记录,适合屏幕共享和教学。
  • `ielm-history-file-name`:让 IELM 临时会话重启后保留历史记录。
  • `native-comp-async-on-battery-power nil`:避免笔记本电脑在电池供电时因原生编译任务风扇狂转。
  • `tty-tip-mode`:为终端提供工具提示。

特别提及:term 不再吞行

长期以来,`term` 和 `ansi-term` 存在吞行问题,影响基于 curses 的程序使用。Emacs 31 修复了该问题,可正常运行 `htop`、`nethack` 等程序,无需使用外部终端模拟器。

特别提及 2:Modus 5 主题!

Emacs 现在自带几个 Modus 主题:

  • `modus-operandi-deuteranopia` —— 针对红绿色盲优化的白色背景主题。
  • `modus-operandi` —— 优雅、易读的白色背景主题。
  • `modus-operandi-tinted` —— 优雅、易读的浅赭色背景主题。
  • `modus-operandi-tritanopia` —— 针对蓝黄色盲优化的白色背景主题。
  • `modus-vivendi-deuteranopia` —— 针对红绿色盲优化的黑色背景主题。
  • `modus-vivendi` —— 优雅、易读的黑色背景主题。
  • `modus-vivendi-tinted` —— 优雅、易读的夜空背景主题。
  • `modus-vivendi-tritanopia` —— 针对蓝黄色盲优化的黑色背景主题。

为什么要使用 master 分支?

有人问我为何用未发布的 Emacs,原因和用无插件配置一样,我想了解 Emacs 自带功能,体验即将到来的新功能。这些小变化逐渐积累,让编辑器对自定义代码依赖减少,看着配置变短很有乐趣。

想了解 Emacs 现有功能,可阅读 [Karthik 的文章](https://karthinks.com/software/even-more-batteries-included-with-emacs/)。所有代码片段可在 [Emacs Solo](https://github.com/LionyxML/emacs-solo) 的 `init.el` 文件中找到。

等 Emacs 31 发布,我就能删除一堆代码了,祝编程愉快!

编辑

2026 年 6 月 18 日:感谢 Stéphane Marks 仔细阅读和修正,他指出了 Tree-sitter 架构问题、`markdown-ts-mode` 代码块编辑命令情况及 VC 变量名称问题。

http://www.jsqmd.com/news/1044216/

相关文章:

  • 害怕字体侵权?设计师要先弄清字体版权查询、免费商用字体和安全用字方法
  • 2026常州十大封闭式特训学校TOP10|专治叛逆、厌学、网瘾,拯救青春期迷途孩子 - 辛云教育资讯
  • 2026年6月福建泉州太阳能路灯优选榜单:高靓照明如何以“20年技术沉淀”破解低温续航与工程验收难题 - 速递信息
  • 5步掌握Xiaomusic:从零构建智能语音音乐系统的完整指南
  • i.MX 6SoloX高速接口时序设计:从参数解读到工程实践
  • AMD Ryzen终极性能解锁:3分钟掌握专业级硬件调试实战指南
  • 跨越数据孤岛:从OneNote/印象笔记到Joplin的完整迁移指南
  • MPC5606E硬件设计:深入解析AC时序参数与接口设计要点
  • 2026年6月优秀的板式换热器密封垫/半焊板式换热器厂家推荐雨灵机械,耐油耐老化垫片延长设备免检修使用周期 - 品牌鉴赏师
  • 2026编程专业笔记本电脑推荐,全天候编码不插电
  • 每周冲刺
  • 2026无锡黄金回收机构资质测评|正规持证商家甄别与优选攻略 - 奢侈品回收评测
  • Dioxus 的 `rsx!` 语法:如果你会 React,上手确实特别快
  • 团队博文06项目总结
  • 海南省高口碑黄金铂金回收白银回收实体老店排行 5 家靠谱门店电话地址全收录
  • 2026厦门黄金回收去哪好|本地正规门店榜单,收的顶实力推荐 - 奢侈品回收评测
  • 一文读懂BiDi单纤双向光模块:一芯双传,高效盘活光纤资源
  • 实验室“隐形冠军”的采购哲学:不做加法做减法
  • 张家口车灯升级维修哪家专业?幻影车灯深耕行业15年解决各类大灯疑难问题 - 速递信息
  • 深入解析MMC2001 OnCE调试模块:追踪计数器与调试模式实战指南
  • 2026昆山卫生间防水服务场景适配与合规服务商深度解析——以昆山鼎壹万防水补漏公司为核心参考 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • GEO优化可以批量覆盖行业关键词吗
  • Syncthing开源同步工具:从零到一,构建你的首个跨设备文件同步网络
  • 华硕笔记本终极控制指南:如何用G-Helper轻松替代臃肿的Armoury Crate
  • 如何3分钟搞定百度网盘批量转存?这个免费工具让你效率翻倍!
  • 2026成都黄金出手全攻略:行情周期判断、验金要点、结算避坑全解析 - 奢侈品回收评测
  • 从告警到根因只需几秒:基于 AI 驱动的可观测性,使用 Elastic Agent Builder 和 Workflows
  • 团队博文01注册团队博客地址
  • Windows热键冲突检测神器:Hotkey Detective深度技术解析 [特殊字符]️‍♂️
  • 2026年6月优秀的去内毛刺焊管/汽车用焊管厂家推荐恒丰祥钢管,窄公差尺寸统一提升零部件装配契合度 - 品牌鉴赏师