
Emacs 31 即将发布这些实用新功能你不能错过Rahul M. Juliato2026 年 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-31markdown-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-31completion-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这种方式比旧的浮动框架方式好设置宽度上限可避免冲突。版本控制方面的改进启用了一些版本控制改进(setoptvc-auto-revert-mode t ; EMACS-31vc-allow-rewriting-published-history t ; EMACS-31vc-dir-auto-hide-up-to-date revert) ; EMACS-31vc-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?bug80616长期以来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 等程序无需使用外部终端模拟器。特别提及 2Modus 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 变量名称问题。