Emacs 新增更多电池支持
速览
Emacs 编辑器近期更新中增加了对更多电池类型的支持。这一改进旨在提升不同硬件设备的兼容性。用户现在可以在更多平台上获得更稳定的电源管理体验。
AI 深度解读
更多“开箱即用”的 Emacs 功能:深度解读
背景
Emacs 作为一个高度可定制且功能极其丰富的编辑器,长期面临着“功能发现难”(discoverability problem)的挑战。尽管其内置了大量强大工具,但许多用户,尤其是初学者,往往只掌握了冰山一角。
本文是作者关于“Emacs 内置但鲜为人知功能”系列的第三篇。前两篇文章发布后,作者在过去几年中又挖掘出了更多令人惊喜的实用功能。本系列文章旨在通过演示的方式,逐步解决这一发现难题。
作者特别强调,本文不是新手入门指南。对于刚接触 Emacs 的用户,建议先掌握基本概念并使用广泛推荐的包。只有当用户已经体验过类似“为什么直到 1990 年才有人想到给行李箱装轮子”那种“相见恨晚”的感觉后,本系列文章才更具价值。作者的经验法则是:如果你还不知道 undo-in-region(撤销区域操作),说明还有大量“低垂的果实”待采摘,待那些基础功能用熟后再回来看本文。
本文遵循以下严格规则:
- 仅限 Emacs 原生功能:不包含任何第三方包(packages)。
- 低学习曲线:每个功能的学习时间不超过五分钟。
- 拒绝噱头:排除
doctor、tetris、snake等游戏或恶搞命令。 - 排除常见项:不包含
Flymake、doc-view、outline-minor-mode、gnus、eww等已被广泛提及的功能,也不包含那些只需简单 Google 搜索就能找到的内容。 - 现代 Emacs 环境:假设用户使用的是 Emacs 28.1 或更高版本。
核心内容
本文详细介绍了四个具体的 Emacs 原生功能,旨在提升日常工作效率和文本处理能力。
1. 悬停显示词典释义 (M-x dictionary-tooltip-mode)
这是一个利用工具提示(tooltip)在鼠标悬停时即时查看单词含义的功能。
- 使用方法:启用
dictionary-tooltip-mode后,当鼠标悬停在单词上时,Emacs 会显示其释义。 - 前置条件:需确保
tooltip-mode已启用(这通常是默认设置)。 - 本地优先:如果配置了本地词典,Emacs 会优先查询本地资源。
- 现代术语支持:Emacs 的词典功能不仅支持传统词汇,还能通过 Wiktionary 等来源查询当代行话和俚语(例如
find-file或dired等术语)。
2. find-file 与 dired 中的通配符支持
这是一个被严重低估的功能:两个最常用的文件操作命令在交互模式下均支持通配符(wildcards)。
find-file(C-x C-f):可以使用通配符一次性打开多个文件。例如,输入*foo*.txt可以同时打开所有匹配的文件。dired:在打开目录时,可以通过指定文件名通配符来生成自定义的文件列表。
实战演示流程:
- 在
dired中使用“两级”通配符*/*_region_*,查找所有子目录中包含_region_的文件。 dired生成这些文件的列表(例如 AucTeX 创建的临时文件)。- 使用
dired-toggle-marks(绑定为t) 选中所有文件并删除。 - 在
find-file中使用通配符,一次性打开子目录中的所有 TeX 文件。 - 通过
consult-buffer和Corfu检查缓冲区列表,确认多个 TeX 文件已成功打开。
技术背景:虽然从函数签名可以看出这些命令在编程调用时支持通配符,但在交互模式下使用这一能力需要阅读完整的文档字符串(docstring),而这往往被用户忽略。尽管现代工作流(如结合 consult-find 和 embark-export)可能提供更高级的替代方案,但原生通配符支持开箱即用,无需额外配置。
3. 列出缓冲区中所有 URI (M-x ffap-menu)
ffap (Find File At Point) 是一个检查光标处是否为有效文件路径并尝试打开它的命令。与其配套的 ffap-menu 则是一个更强大但鲜为人知的命令。
- 功能:
ffap-menu扫描整个缓冲区,查找所有看起来像文件路径或 URL 的内容,并以列表形式呈现。 - 交互优势:由于它提供
completing-read界面,用户可以:- 将(可能经过过滤的)补全列表导出到缓冲区。
- 复制、打开所有或部分 URL。
- 直接使用
Embark对它们执行其他操作。
补充:处理带属性的链接
许多 Emacs 应用(如 EWW)将 URL 存储为文本属性(text properties)而非纯文本链接,导致原生 ffap-menu 无法识别。作者分享了一个自定义命令 my/search-occur-browse-url,它受 ffap-menu 启发,能够额外抓取这些带属性的链接。该函数通过正则搜索和 text-property-search-forward 结合,构建一个包含上下文信息的补全列表,允许用户浏览和打开这些 URL。
4. 对比窗口内容 (M-x compare-windows)
Emacs 拥有大量的比较命令(如 diff, ediff 系列等),但作者最推荐的是轻量级的 compare-windows。
- 工作原理:它以一种与上下文无关的方式,从两个窗口的当前光标位置开始比较文本,并在遇到第一个不匹配处停止和报告。
- 对比对象:当前活动窗口和
other-window命令会选中的那个窗口。 - 优势:虽然功能不如
Ediff强大,但它极其简单、快速,无需复杂的设置步骤。 - 对比复杂命令:例如
ediff-regions-linewise需要四步设置,涉及选择缓冲区、标记区域和反复调用exit-recursive-edit(这是一个大多数用户不应遇到的高级命令),而compare-windows只需一键启动。
实战演示流程:
- 将光标分别移动到两个窗口中需要比较的文本起始位置。
- 执行
M-x compare-windows。 - 命令会自动将光标移动到第一个不匹配处并报告差异。
关键要点
- 功能发现是主要痛点:Emacs 的强大功能往往隐藏在文档深处,作者通过系列文章致力于降低这些功能的发现门槛。
- 原生通配符的交互潜力:
find-file和dired在交互模式下支持通配符,可大幅简化批量文件操作和清理任务,无需编写脚本或使用外部工具。 - URL 提取的局限性及扩展:原生的
ffap-menu无法识别由EWW等应用生成的带文本属性的 URL,需要自定义命令或扩展来弥补这一空白。 - 轻量级比较工具的价值:
compare-windows提供了比ediff更快速、更直接的即时文本对比体验,适合快速检查差异,避免了复杂命令的学习成本。 - 严格的筛选标准:本文仅关注 Emacs 28.1+ 原生功能,排除第三方包、游戏和常见功能,确保内容的新颖性和实用性。
- 适用人群:本文适合已经熟悉 Emacs 基础概念、希望挖掘更深层原生功能的中级用户,而非初学者。
意义与影响
这篇文章不仅是一份功能清单,更体现了 Emacs 社区的一种文化:对原生工具潜力的极致挖掘和对“少即是多”哲学的坚持。
- 提升原生体验:在第三方包泛滥的今天,强调原生功能的重要性有助于用户减少对配置的依赖,保持环境的简洁和稳定性。
- 优化工作流:通过揭示
dired和find-file的通配符支持以及compare-windows的便捷性,
