← 返回信息流
AI 资讯Hacker News·2 小时前

Emacs 新增更多电池支持

原标题:Even More Batteries Included with Emacs

速览

Emacs 编辑器近期更新中增加了对更多电池类型的支持。这一改进旨在提升不同硬件设备的兼容性。用户现在可以在更多平台上获得更稳定的电源管理体验。

AI 深度解读

更多“开箱即用”的 Emacs 功能:深度解读

背景

Emacs 作为一个高度可定制且功能极其丰富的编辑器,长期面临着“功能发现难”(discoverability problem)的挑战。尽管其内置了大量强大工具,但许多用户,尤其是初学者,往往只掌握了冰山一角。

本文是作者关于“Emacs 内置但鲜为人知功能”系列的第三篇。前两篇文章发布后,作者在过去几年中又挖掘出了更多令人惊喜的实用功能。本系列文章旨在通过演示的方式,逐步解决这一发现难题。

作者特别强调,本文不是新手入门指南。对于刚接触 Emacs 的用户,建议先掌握基本概念并使用广泛推荐的包。只有当用户已经体验过类似“为什么直到 1990 年才有人想到给行李箱装轮子”那种“相见恨晚”的感觉后,本系列文章才更具价值。作者的经验法则是:如果你还不知道 undo-in-region(撤销区域操作),说明还有大量“低垂的果实”待采摘,待那些基础功能用熟后再回来看本文。

本文遵循以下严格规则:

  1. 仅限 Emacs 原生功能:不包含任何第三方包(packages)。
  2. 低学习曲线:每个功能的学习时间不超过五分钟。
  3. 拒绝噱头:排除 doctortetrissnake 等游戏或恶搞命令。
  4. 排除常见项:不包含 Flymakedoc-viewoutline-minor-modegnuseww 等已被广泛提及的功能,也不包含那些只需简单 Google 搜索就能找到的内容。
  5. 现代 Emacs 环境:假设用户使用的是 Emacs 28.1 或更高版本。

核心内容

本文详细介绍了四个具体的 Emacs 原生功能,旨在提升日常工作效率和文本处理能力。

1. 悬停显示词典释义 (M-x dictionary-tooltip-mode)

这是一个利用工具提示(tooltip)在鼠标悬停时即时查看单词含义的功能。

  • 使用方法:启用 dictionary-tooltip-mode 后,当鼠标悬停在单词上时,Emacs 会显示其释义。
  • 前置条件:需确保 tooltip-mode 已启用(这通常是默认设置)。
  • 本地优先:如果配置了本地词典,Emacs 会优先查询本地资源。
  • 现代术语支持:Emacs 的词典功能不仅支持传统词汇,还能通过 Wiktionary 等来源查询当代行话和俚语(例如 find-filedired 等术语)。

2. find-filedired 中的通配符支持

这是一个被严重低估的功能:两个最常用的文件操作命令在交互模式下均支持通配符(wildcards)。

  • find-file (C-x C-f):可以使用通配符一次性打开多个文件。例如,输入 *foo*.txt 可以同时打开所有匹配的文件。
  • dired:在打开目录时,可以通过指定文件名通配符来生成自定义的文件列表。

实战演示流程

  1. dired 中使用“两级”通配符 */*_region_*,查找所有子目录中包含 _region_ 的文件。
  2. dired 生成这些文件的列表(例如 AucTeX 创建的临时文件)。
  3. 使用 dired-toggle-marks (绑定为 t) 选中所有文件并删除。
  4. find-file 中使用通配符,一次性打开子目录中的所有 TeX 文件。
  5. 通过 consult-bufferCorfu 检查缓冲区列表,确认多个 TeX 文件已成功打开。

技术背景:虽然从函数签名可以看出这些命令在编程调用时支持通配符,但在交互模式下使用这一能力需要阅读完整的文档字符串(docstring),而这往往被用户忽略。尽管现代工作流(如结合 consult-findembark-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 只需一键启动。

实战演示流程

  1. 将光标分别移动到两个窗口中需要比较的文本起始位置。
  2. 执行 M-x compare-windows
  3. 命令会自动将光标移动到第一个不匹配处并报告差异。

关键要点

  • 功能发现是主要痛点:Emacs 的强大功能往往隐藏在文档深处,作者通过系列文章致力于降低这些功能的发现门槛。
  • 原生通配符的交互潜力find-filedired 在交互模式下支持通配符,可大幅简化批量文件操作和清理任务,无需编写脚本或使用外部工具。
  • URL 提取的局限性及扩展:原生的 ffap-menu 无法识别由 EWW 等应用生成的带文本属性的 URL,需要自定义命令或扩展来弥补这一空白。
  • 轻量级比较工具的价值compare-windows 提供了比 ediff 更快速、更直接的即时文本对比体验,适合快速检查差异,避免了复杂命令的学习成本。
  • 严格的筛选标准:本文仅关注 Emacs 28.1+ 原生功能,排除第三方包、游戏和常见功能,确保内容的新颖性和实用性。
  • 适用人群:本文适合已经熟悉 Emacs 基础概念、希望挖掘更深层原生功能的中级用户,而非初学者。

意义与影响

这篇文章不仅是一份功能清单,更体现了 Emacs 社区的一种文化:对原生工具潜力的极致挖掘和对“少即是多”哲学的坚持。

  1. 提升原生体验:在第三方包泛滥的今天,强调原生功能的重要性有助于用户减少对配置的依赖,保持环境的简洁和稳定性。
  2. 优化工作流:通过揭示 diredfind-file 的通配符支持以及 compare-windows 的便捷性,
查看原文 →karthinks.com