Emacs 内置功能:高级“自带电池”指南

增强的导航与文件处理

find-filedired 中的交互式通配符

用户可以在 find-file (C-x C-f) 和 dired 中交互使用通配符,以打开多个文件或过滤目录列表。例如,在 find-file 中使用通配符 *foo*.txt 可以同时打开所有匹配的文件。在 Dired 中,使用类似 */*_region_* 的通配符可以生成跨子目录的特定文件自定义列表,随后可以批量标记并删除。

使用 ffap-menu 进行缓冲区范围的路径发现

M-x ffap 会在当前光标处打开文件,而 M-x ffap-menu 会扫描整个缓冲区,查找所有看起来像文件路径或 URL 的字符串。它提供了一个 completing-read 界面,允许用户过滤并打开当前文档中找到的任意路径。

字典工具提示

启用 M-x dictionary-tooltip-mode(配合 tooltip-mode)后,悬停时会在工具提示中显示单词含义。该功能可使用本地词典或 Wiktionary 来查询当代术语和行话。

高级差异比较工具

使用 compare-windows 的轻量级比较

M-x compare-windows 是一个与上下文无关的工具,从两个窗口各自的光标位置开始比较文本。它在遇到第一个不匹配时停止并报告。不同于 Ediff,它不关心文本的来源,这使得它在比较同一缓冲区的不同段落,甚至在 Dired 中比较目录内容和文件属性时都很有用。

Dired 中的目录比较

M-x dired-compare-directories 允许在两个目录之间进行文件级别的比较。它会标记名称不同的文件,同时也支持基于文件属性的自定义匹配谓词,例如标记同名但大小不同的文件 ((/= size1 size2)) 或最近修改的版本 ((> mtime2 mtime1))。

实时更改高亮

M-x highlight-changes-mode 强调对文件所做的更改。基础模式在启用时就开始跟踪更改,但可以通过钩子自动化,仅高亮未保存的更改:

(defun highlight-changes-mode-turn-off ()
  (and highlight-changes-mode (highlight-changes-mode -1)))

(defun highlight-changes-auto ()
  (when (buffer-file-name)
    (highlight-changes-mode-turn-on)
    (add-hook 'after-save-hook #'highlight-changes-mode-turn-on nil t)
    (add-hook 'before-save-hook #'highlight-changes-mode-turn-off nil t)))

(add-hook 'text-mode-hook #'highlight-changes-auto)

专业化文本操作与编辑

现代复制命令

最近的 Emacs 版本添加了与其他编辑器常见编辑模式相匹配的命令:

  • copy-from-above-command:复制光标上方第一个非空行的文本。
  • duplicate-dwim:在当前行下方复制当前行或活动区域。

从历史创建宏

M-x kmacro-edit-lossage 允许用户从最近的按键历史(即 “lossage”)创建键盘宏。这通过让用户先记录一系列操作,然后再将其转换为可重复的宏,解决了“预见性问题”。

单词语法自定义

subword-mode 将 CamelCase 符号的组成部分视为独立单词,而 superword-mode 将 snake_case 符号视为单个单词。此外,用户可以修改主模式的语法表,以改变字符的处理方式;例如,在 Lisp-data-mode 中将冒号 (:) 设为单词的一部分,以改进 backward-kill-word 的行为:

(add-hook 'lisp-data-mode-hook
          (lambda () (modify-syntax-entry ?: "w")))

窗口与框架管理

使用 scroll-all-mode 同步滚动

M-x scroll-all-mode 同时滚动当前框架中的所有窗口。这在并排比较文件的两个版本且不进入正式的 Ediff 会话时尤为有用。

使用 ruler-mode 的可视化边距控制

M-x ruler-mode 提供了一个可视化界面,用于调整缓冲区边距和 fill-column。用户可以使用 S-<mouse-1>S-<mouse-3> 设置左、右边距,并拖动 <mouse-2> 实时调整 fill-column

框架恢复

M-x undelete-frame-mode 启用后可以恢复最近关闭的框架。启用后,M-x undelete-frame 最多可恢复最近的 16 个已删除框架,保留工作区布局。

实用工具与帮助系统

apropos 系列

除了标准的 apropos,Emacs 还包含专门的查找命令,如 apropos-variableapropos-functioncustomize-apropos。后者会创建一个自定义缓冲区,列出所有匹配搜索词的选项和面孔。

直接源码访问

M-x find-function-on-key 允许用户直接从键绑定跳转到其调用函数的源码,省去先描述键位再跳转源码的步骤。

缓冲区锁定

M-x emacs-lock-mode 可防止缓冲区被杀死或 Emacs 退出,直至手动解除锁定。这对于保护包含关键临时数据的非文件访问缓冲区非常有用。

社区对可发现性与稳定性的观点

虽然这些内置功能功能强大,但 Emacs 社区在“原生”体验与精选发行版之间仍存在分歧。一些用户认为可发现性问题是新手的主要障碍,而另一些人则认为稳定性是更大的问题:

“我对 Emacs 自带功能的最大问题一直是不同包组合之间的稳定性……任何额外添加的包都可能破坏某个看似无关的随机包。”

相反,支持原生方式的倡导者认为,从最小配置开始能鼓励必要的学习过程,以避免重写内置功能:

“Emacs 和 Neovim 都奖励阅读手册(rtfm)并从原生配置逐步构建自己的自定义配置。这类发行版风格的包让用户跳过所有初始的学习和发现过程。”

Sources