- 文档
- 教程
【免费下载链接】learnxinyminutes-docs
Code documentation written as code! How novel and totally my idea!
本指南以 learnxinyminutes-docs 仓库中的 pt-br/emacs.md 及其英文原版 emacs.md 为骨架,系统讲解 Emacs 的核心概念(缓冲区、窗口、帧、主/次模式)、按键记法与导航体系、文件编辑与搜索、Elisp 函数执行、配置方式,以及 Org 与 Magit 两大杀手级应用。读完本文,你将掌握 Emacs 的术语体系与常用按键组合,能够独立上手日常编辑、搜索与扩展配置,并为深入学习 pt-br/elisp.md 中的 Emacs Lisp 编程打好基础。
一、Emacs 是什么:从可扩展编辑器到完整生态
Emacs 诞生之初就被定位为“可扩展、可定制的显示编辑器”(the extensible, customizable display editor),经过多年发展,它已经演变为一个完整的软件生态。许多通常需要借助一堆不同工具才能完成的任务,都可以在 Emacs 内部以一致且熟悉的界面完成,例如:
- 目录管理(类似文件管理器);
- 查看 PDF 文档;
- 通过 SSH 编辑远程文件;
- 管理 git 仓库(借助 Magit 等扩展)。
简而言之,Emacs 的使用者光谱很宽:有人只拿它编辑纯文本文件,也有人(极端纯粹主义者)用它几乎替代整个操作系统。Emacs 的核心理念是“你想让它做什么,它就是什么”。
Emacs 之所以能做到这一点,关键在于它通过一种 Lisp 的专门方言——Emacs Lisp(Elisp)——进行扩展。Elisp 内置了大量面向文本编辑与文本缓冲区管理的宏与函数。你在 Emacs 中按下的每一个按键(或按键组合),都绑定到一个 Emacs Lisp 函数,并且可以被重映射到任何其他函数——包括你自己编写的那一个。这一“一切皆可编程、一切皆可重绑定”的架构,正是 Emacs 与其他编辑器最本质的区别。
仓库佐证:这一表述与英文原版 emacs.md 开篇完全一致;而 pt-br/elisp.md 则提供了“15 分钟入门 Emacs Lisp”的完整可执行示例,可作为本文第 7 节的实践延伸。
二、按键记法(Key Notation):读懂 Emacs 文档的前提
Emacs 手册和社区使用一套约定俗成的记法来描述按键组合,这是阅读一切 Emacs 资料(包括本指南)的前提。Emacs 中有“修饰键(modifier key)”的概念:按住修饰键再按另一个键,以改变该键的动作。
以C-c为例:这里的C是修饰键,代表Ctrl键;c是被修饰的按键(字面字符c)。修饰键缩写如下:
| 缩写 | 含义 |
|---|---|
C- | CTRL键 |
M- | Meta键(通常指Alt键) |
s- | Super键(Mac 上是Cmd键,PC 上是Windows键) |
此外还有较少用到的修饰键,这里不展开。组合记法按顺序书写:C-x C-s表示先按Ctrl+x,再按Ctrl+s,而不是同时按下。
除修饰键外,几个特殊键也有固定记法:ESC表示 Esc 键,RET表示 Return(回车)键,S表示 Shift 键。理解了这套记法,你就能读懂后续所有按键说明,也能直接读懂 GNU Emacs 手册与社区文章中的按键描述。
三、Emacs 基础概念:缓冲区、窗口、帧、主/次模式
对于新手(尤其是习惯了 Vim 术语的人)来说,Emacs 的术语体系可能有些绕,但它们是理解一切后续操作的地基:
- 缓冲区(buffer):Emacs 正在编辑的一堆文本称为缓冲区。
- 缓冲区不一定对应磁盘上的真实文件,它可能只是内存中的一段文本。
- 当缓冲区对应磁盘上的文件时,我们说该缓冲区正在访问(visiting)这个文件。
- Emacs 通常同时打开很多缓冲区。
- Emacs 的显示可以被分割成不同的窗口(window)。注意这里的 window 与操作系统的窗口不是一回事:操作系统的一个窗口内部可以包含 Emacs 的多个window。
- 操作系统层面的 Emacs 窗口称为帧(frame)。所以当 Emacs 手册说“打开一个新 frame”时,本质上就是打开一个包含(另一个)Emacs 实例的新操作系统窗口。
- 传统意义上说的“剪切”和“粘贴”,在 Emacs 术语中分别称为killing与yanking。
- 光标当前位置称为point。严格来说,point 被定义为光标当前所在字符之前的那个位置。
- 最后,每个缓冲区可以关联若干模式(mode):一个主模式(major mode)以及可能多个次模式(minor mode)。
主模式(major mode)定义了当前选中缓冲区的主要行为,可以粗略理解为“文件类型”。例如,当你编辑 Python 文件时,默认的主模式是python-mode,它会让 Emacs 高亮 Python 语法,并按 Python 语法要求自动缩进/反缩进你的代码块。次模式(minor mode)定义细微的行为变化,同一个缓冲区可以同时激活多个次模式。一个典型例子是flyspell-mode,它会自动高亮缓冲区中的拼写错误。
仓库佐证:缓冲区这一概念在 pt-br/elisp.md 中有更直观的演示——Emacs 启动后的
*scratch*就是默认缓冲区,其主模式为lisp-interaction-mode,你“从来不是在编辑文件,而是在编辑缓冲区,随后可以把缓冲区保存到文件”。这正是上述定义的活教材。
四、键盘导航基础:摆脱鼠标的高效移动
Emacs 的 GUI 版本可以用鼠标导航,与常规 GUI 编辑器无异。但这里聚焦纯键盘导航,因为它能极大地提升生产力。以下按键均为默认绑定:
行移动
C-n→ 下一行(next line)C-p→ 上一行(previous line)
字符移动
C-f→ 向前移动一个字符(forward)C-b→ 向后移动一个字符(backward)
单词移动
M-f→ 向前移动一个单词M-b→ 向后移动一个单词
句子移动
M-a→ 移到句首M-e→ 移到句尾
行首与行尾
C-a→ 移到行首C-e→ 移到行尾
缓冲区首尾
M-<(Meta+Shift+,)→ 移到缓冲区开头M->(Meta+Shift+.)→ 移到缓冲区结尾
屏幕滚动
C-v→ 向下滚动一屏(保留上一屏的最后两行作为重叠,过渡更平滑)M-v→ 向上滚动一屏(同样保留前两行)
屏幕居中(一个值得细讲的循环)
C-l会把当前行移动到屏幕中央。这个按键实际上会根据按下次数循环切换不同状态:
C-l→ 把当前行移到屏幕中央;C-l C-l→ 把当前行移到屏幕顶部;C-l C-l C-l→ 把当前行恢复到第一次按C-l之前的位置;- 按第 4 次
C-l,则循环回到“居中当前行”。
重复移动命令(数值前缀参数)
大多数移动命令接受一个数值前缀参数,表示“把后面的命令重复执行 N 次”。例如:
C-u 3 C-p→ 向上移动 3 行;C-u 5 C-f→ 向前移动 5 个字符。
一个值得注意的例外是屏幕滚动命令:C-u 3 C-v表示向下滚动 3 行(同时保持光标位置不变),而不是滚动 3 屏。
彩蛋:上述许多导航命令正是 Bash 的默认导航命令。比如在输入 Bash 命令时按
C-b,光标会后退一个字符。这意味着你学到的 Emacs 导航技能,在终端里同样受用。
五、文件编辑基础:退出、保存、搜索与撤销
退出 Emacs(现在你不能再说不会退出 Emacs 了 :-))
C-x C-c→ 退出 Emacs,并提示保存未保存的文件。不访问文件的缓冲区将被直接丢弃(除非你在客户端-服务器模式下运行)。
保存缓冲区
C-x C-s→ 保存当前缓冲区。如果该缓冲区没有访问任何文件,Emacs 会提示你输入一个文件名用于保存。
缓冲区内搜索
C-s→ 在缓冲区中向前搜索。搜索是增量式(incremental)的,默认不区分大小写。按C-s跳到下一个匹配;按RET则把 point 移到当前高亮的单词处并结束搜索。C-r→ 与C-s相同,但方向相反(向后搜索)。
撤销与重做
C-_或C-/→ 撤销上一步操作。持续按可以沿撤销树逐层向上。C-?或M-_→ 重做之前的更改。
undo 与 redo 命令同样支持数值前缀参数,用于一次性撤销/重做多步操作:
C-u 3 C-_→ 撤销最近 3 处更改。
六、执行 Elisp 函数:M-x 与求值
Emacs 的“一切皆函数”特性可以通过M-x直接体验:
M-x RET→ 提示你输入要执行的函数名(支持 Tab 补全),回车后执行该函数。
示例:
M-x RET search-forward-regexp RET→ 提示你输入一个正则表达式,然后在缓冲区中向前搜索它。
你不仅可以执行内置函数,任何当前已加载的 Elisp 函数(包括你自己写的)都能通过M-x执行。
结合 pt-br/elisp.md,这里补充两种更贴近代码实践的求值方式:
C-j:在lisp-interaction-mode(如*scratch*缓冲区)中,把光标放在闭合括号之后按C-j,会执行该表达式并把结果插入缓冲区。例如(+ 3 (+ 1 2))求值结果为6。C-x C-e:在缓冲区的表达式末尾执行求值,结果只显示在 Emacs 底部的echo area(回显区),不污染缓冲区内容,因此更常用于日常实验。
七、Emacs 配置:~/.emacs 与 ~/.emacs.d/init.el
Emacs 使用 Elisp 进行配置。启动时,它会按顺序查找以下位置的配置文件:
~/.emacs~/.emacs.d/init.el
其中~指你的主目录(home directory)。如果你使用 Windows,配置文件的位置有所不同,可查阅 GNU Emacs 官方 FAQ(efaq-w32)中关于 init 文件位置的说明来确认。
配置文件本质上就是一段 Elisp 代码,你可以在这里设置全局变量、绑定按键、加载包、启用次模式等。这也是第 10 节“给新手的建议”的落脚点:配置是逐步生长出来的,而不是一次性抄来的。
八、Vim 用户在 Emacs 内:evil-mode 无缝过渡
如果你正考虑从 Vim 转向 Emacs,却被 Emacs 的非模态(non-modal)编辑方式劝退,那么有一个扩展可以帮你:evil-mode。它把 Vim 的许多概念带进 Emacs:
- 模态编辑:获得与 Vim 类似的 normal(普通)、insert(插入)、visual(可视)和 block visual(块可视)模式;此外还有一个 “Emacs” 模式,移动与导航遵循 Emacs 按键绑定。
- 普通模式下与 Vim 相同的移动按键(
h/j/k/l、w/b等)。 - Leader 键组合(自定义命令前缀)。
- 在普通模式下按
:可以执行命令(包括系统命令)。
从个人使用经验看,evil-mode能让 Vim → Emacs 的过渡变得顺滑,把 Vim 更符合直觉、更符合人体工学的按键绑定,与 Emacs 无拘无束的强大扩展能力结合起来,获得更佳的编辑体验。
九、可发现的帮助系统:C-h 一族
Emacs 拥有一套相当强大的帮助系统,让你可以随时发现新功能:
获取特定主题的帮助(函数名与变量名均支持 Tab 补全)
C-h f RET→ 提示输入一个 Elisp 函数名,显示其帮助文本,并附上可点击的源码链接。C-h v RET→ 与上相同,但针对变量。C-h k RET→ 允许你输入一个按键组合,显示绑定到该组合的 Elisp 函数名。
搜索帮助
C-h a→ 提示输入字符串,在帮助系统中搜索命令。类似 Unix 系统中的apropos或man -k。
启动教程
C-h C-t→ 启动一个内置教程,帮助你熟悉 Emacs 的基本功能。
这套帮助体系让 Emacs 的学习曲线变得“可探索”:不知道某个键绑定了什么?C-h k告诉你;想找某个功能的函数名?C-h a帮你搜。学习 Emacs 的过程因此变成了持续发现的过程。
十、Emacs 杀手级应用:Org 与 Magit
正如前文所述,Emacs 的功能远不止文本编辑器。这里列出两个相当强大且流行的 Emacs “应用”,它们本身就足以吸引你使用 Emacs。
Org(org-mode)
严格来说,org-mode是一个主模式,为缓冲区编辑提供组织化管理工具。Org 很难用三言两语说清,因为它是一个庞然大物,对不同人有不同用途。以下是其主要功能:
- 把文件划分为章节与子章节,方便提纲化组织与梳理概念;
- 大纲中的不同标题可以折叠/展开,让你聚焦当下需要关注的内容,消除干扰;
- 在 Org 内维护TODO 列表;
- 把多个文件中的 TODO 列表汇总成 agenda(议程);
- 记录每个 TODO 任务花费的时间;
- 在纯文本中管理表格(包括类似电子表格的计算能力);
- 借助扩展
org-babel,在文件中编写并执行代码块,结果会被捕获并可在文件内部复用——可以理解为“支持任意语言的 Jupyter notebook”; - 在文件内内联显示图片和 LaTeX 公式(非常适合做笔记系统或个人 Wiki);
- 把文件导出为多种格式(LaTeX、PDF、HTML 等)。
Org mode 是非常强大的生产力工具——就个人而言,它正是让作者在多年使用 Vim 之后转而使用 Emacs 的原因。
Magit
Magit是 Emacs 内的git前端。它拥有非常直观、可发现的界面,同时又暴露了非常强大的功能,让你可以在编辑器内部舒适地完成:按块(chunk 级)管理提交、检查 diff、rebase、cherry-pick 等几乎所有 git 操作。对频繁使用 git 的开发者来说,Magit 常常被视为“一旦用过就回不去”的工具。
十一、给新手的建议:不要直接照抄别人的配置
考虑使用 Emacs 时,新手最容易掉进的陷阱是:复制别人的配置文件,然后原样使用。这里强烈不推荐这样做,原因有三:
- 它会阻碍你自己学习与探索;
- 别人的配置中往往包含大量与你无关、你可能永远用不到的内容;
- 它违背了“可定制编辑器适配你自己的需求”这一初衷。
正确的做法是:浏览他人的配置,努力理解它们,只吸收对你有意义的部分。你可以通过大量视频、录屏或博客文章了解 Emacs 的新特性,然后亲自学习如何把它们加入自己的配置与工作流。这样一来,你的配置会增量式地成长,对 Emacs 的理解也随之加深。
十二、延伸阅读:仓库内资源与社区资料
仓库内配套文档(与本文直接同源):
- emacs.md:本文所依据的英文原版文档,包含完整按键记法、导航、文件编辑与帮助系统的原始表述;
- pt-br/elisp.md:Emacs Lisp 15 分钟入门(葡萄牙语版),提供了从
setq、defun、let到format的一整套可执行 Elisp 示例,是本文第 6 节的最佳实践延伸; - README.md:了解 learnxinyminutes-docs 项目的文档组织方式与贡献指南(CONTRIBUTING.md)。
社区权威资源(名称检索即可找到):
- The GNU Emacs Manual(GNU Emacs 官方手册,系统学习的权威来源);
- Emacs Stack Exchange(提问与解答社区);
- Emacs Wiki(社区维护的 Wiki 资料库)。
学习路径建议:先在本指南的指导下熟悉缓冲区、point 与按键导航,再通过C-h t完成内置教程,随后用M-x与C-h f探索函数,最后借助 pt-br/elisp.md 迈入 Elisp 编程——届时你就真正理解了“Emacs 是你的,随你塑造”这句话的含义。
- 文档
- 教程
【免费下载链接】learnxinyminutes-docs
Code documentation written as code! How novel and totally my idea!
相关推荐
Emacs 实战入门指南:从键位符号、缓冲区概念到 Org 与 Magit 的完整上手路径
Emacs 实战入门指南:从键位符号、缓冲区概念到 Org 与 Magit 的完整上手路径 本文以 learnxinyminutes docs 仓库中的 ema
文档教程基于 learnxinyminutes-docs 的 Emacs Lisp 十五分钟速成:从 S-表达式求值到缓冲区文本自动化
基于 learnxinyminutes docs 的 Emacs Lisp 十五分钟速成:从 S 表达式求值到缓冲区文本自动化 本篇以 learnxinymin
文档教程Emacs Lisp 十五分钟入门实战指南:基于 learnxinyminutes-docs 的交互式教程
Emacs Lisp 十五分钟入门实战指南:基于 learnxinyminutes docs 的交互式教程 本指南源自 learnxinyminutes doc
文档教程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考