Elisp 学习资源与视频

这一篇是本模块的资源索引:官方手册、开源仓库、中文资料、视频课程、社区,以及”什么时候该用哪一份”。本篇不替代后续章节,而是让你在遇到具体问题时知道该去哪里查。

本篇列出的每一个链接都在撰写时用 curl 验证过可访问(返回 200)。如果你发现某个链接失效,属于正常的互联网衰减,请以搜索到的同名项目为准。


一、先建立一个正确的资源观

学 Elisp 最常见的误区是”收藏了一堆教程,一个都没读完”。这背后是一个结构性问题:Elisp 的学习资料分成完全不同的四类,它们的用途不一样,混着看就会混乱。

flowchart TD
    A["遇到一个 Elisp 问题"] --> B{"问题的性质是什么"}
    B -->|"某个函数怎么用"| C["查内置文档<br/>C-h f / C-h v"]
    B -->|"语言语义为什么不按预期"| D["查 Elisp 参考手册<br/>GNU 官方"]
    B -->|"完全不知道从哪里下手"| E["读入门教程<br/>eintr / elisp-guide"]
    B -->|"想看别人怎么写真实代码"| F["读源码与开源仓库"]
    B -->|"想要系统的视频讲解"| G["看视频课程"]
    C --> H["解决问题"]
    D --> H
    E --> H
    F --> H
    G --> H

四类资源的定位:

类型代表什么时候用不要用它做什么
内置文档C-h fC-h vC-h k日常最高频,占你查询量的八成不适合系统学习语言语义
官方手册Elisp 参考手册、Emacs 手册查语义细节、版本差异、权威定义不适合当入门读物(太厚)
入门教程与书eintr、elisp-guide、本模块建立整体认知不适合查具体函数的参数
源码与开源仓库emacs-mirror、各类包学真实写法、找最佳实践不适合零基础直接读

最重要的一条建议:把 C-h fC-h v 当成你的第一查询工具,而不是网页搜索。 Emacs 内置文档的质量和完整性远超绝大多数软件的文档,而且它永远与你的版本一致。


二、官方手册(权威但厚重)

2.1 GNU Emacs Lisp 参考手册

这是 Elisp 的权威定义,由 GNU 维护,与你的 Emacs 版本一一对应。它的组织方式是按语言要素分章:数据类型、求值、变量、函数、宏、控制结构、缓冲区、文本、键映射、模式、包……几乎你在本模块学到的每个概念,都能在这里找到最精确的表述。

使用建议:

  • 不要从头读。它的定位是参考书,遇到”这个函数的边界行为是什么”这类问题时按需查。
  • 在 Emacs 里可以直接读离线版:C-h i 打开 Info 手册,选择 Elisp 节点。离线版的好处是可以用 Emacs 的搜索与跳转,比浏览器体验好。
  • 注意手册页面顶部的版本标注,确认与你使用的 Emacs 版本一致。

2.2 GNU Emacs 手册(用户手册)

这是使用 Emacs 的手册,不是写 Elisp 的手册。在本教程体系里,它的价值在于:本模块讲的每个功能(Dired、Org、Magit 之外的任何内置功能)都能在这里找到官方说明。配套的 Info 版本在 Emacs 里用 C-h r 打开。

2.3 《Programming in Emacs Lisp》入门书

社区通常称它为 eintr(文件名 emacs-lisp-intro)。这是 GNU 官方出的入门书,写给没有编程经验的人,从”什么是列表”讲到”怎么写一个函数并把它绑到键位上”。特点是:

  • 循序渐进,例子丰富,每章都有练习。
  • 因为面向初学者,有编程基础的人读起来会觉得啰嗦,但它的练习质量很高,可以只做练习跳过讲解。
  • 在 Emacs 里用 C-h iEmacs Lisp Intro 可以直接读中文以外的原生版本。

2.4 Org 手册

Org mode 自带手册,是 Emacs 生态里文档质量最高的项目之一。学习 Org 相关 Elisp(org-captureorg-agendaorg-babel)时必备。

2.5 Emacs Wiki 与源码

  • emacswiki.org:社区积累二十余年的经验库。质量参差不齐,是它的真实状况:有些页面是宝藏,有些过时十年。用它搜索”某个奇怪问题的偏方”效果最好,不要用它学语言。
  • github.com/emacs-mirror/emacs:Emacs 源码的 GitHub 镜像。想在浏览器里搜索 simple.elsubr.elwindow.el 的实现在哪一行时非常方便。

三、开源仓库:读别人的 Elisp

这一节是本篇的核心。下面的仓库按”适合什么人”排列,你可以按顺序取用。

3.1 入门级:从零理解语言

仓库语言适合谁说明
chrisdone/elisp-guide英文有编程基础、想快速搞懂语义一份紧凑的 Elisp 速通指南,讲清”求值、列表、闭包、缓冲区和文本操作”这几件核心事,读完就能看懂别人的配置
caiorss/Emacs-Elisp-Programming英文想要大量可运行示例以笔记与示例组织,覆盖面广(语言基础、缓冲区操作、宏、界面、包开发),偏”代码片段合集”风格
hypernumbers/learn_elisp_the_hard_way英文喜欢习题驱动仿”Learn X the Hard Way”的练习册形式,边做边学;内容仍在补完中,适合当练习题使用
learnxinyminutes.com/docs/elisp英文想一小时速览语法单页速查,一屏一个大知识点,适合复习不适合入门
emacs-tw/emacs-101-beginner-survival-guide繁体中文中文读者台湾 Emacs 社区的新手指南,从操作讲到简单 Elisp,繁体中文写作

3.2 进阶级:写包与工程实践

仓库语言适合谁说明
alphapapa/emacs-package-dev-handbook英文准备写并发布包的人从文件头规范、命名约定、宏的写法到测试与发布,是目前最系统的”Emacs 包开发手册”
jwiegley/use-package英文所有写配置的人它的 README 本身就是最好的 use-package 文档,比任何二手教程都准确
Wilfred/helpful英文想看懂内置函数的人一个增强版的帮助界面,能显示函数的源码、调用者、被谁 advice 过。装上它,C-h f 的价值会翻倍
Wilfred/elisp-refs英文想知道”这个函数被谁用了”查找函数与变量的引用,读源码的利器
emacs-elsa/Elsa英文写包的人Emacs Lisp 静态分析器,能在运行前发现未定义函数一类的问题
emacs-tw/awesome-emacs英文需要找包的人按领域分类的包索引。当你想”Emacs 里有没有做 X 的包”时,先查这里

3.3 学习范本级:读真实配置

读别人写好的配置,是进步最快的方式之一,但要注意只读,不要直接抄

仓库说明
purcell/emacs.d极其经典的一份配置,结构清晰、注释克制,适合作为”如何组织配置”的范本
bbatsov/prelude有观点、有文档、有模块划分,很多人的第一个 Emacs 环境
redguardtoo/emacs.d中文作者(陈斌)的配置,以启动速度和实用性著称,性能优化的思路值得学
seagle0128/.emacs.dCentaur Emacs,中文作者,界面美观、开箱可用,适合看”一个完整的现代配置长什么样”
doomemacs/doomemacs不是一个配置,而是一个配置框架。它最有价值的部分是 modules/ 目录:几乎每个主流语言、每个常用工具的推荐配置都在里面
syl20bnr/spacemacs另一个框架,layers/ 目录的组织方式与文档规范值得学习

3.4 中文资源

资源说明
redguardtoo/mastering-emacs-in-one-year-guide《一年成为 Emacs 高手》,简体中文。不讲语法细节,讲方法与心态:如何排查问题、如何管理配置、哪些弯路不必走。建议在开始折腾配置之前读一遍
zilongshanren/Spacemacs-rocks子龙山人的《Spacemacs Rocks》配套材料,简体中文,以 Spacemacs 为例讲解 Emacs 的日常使用与配置思路
lujun9972/emacs-documentEmacs 文档的中文翻译项目。当官方手册的英文让你读不下去时,可以对照使用
emacs-china.org中文 Emacs 社区论坛。提问质量整体较高,搜索历史帖子常常能直接解决问题

3.5 用 Emacs 自己探索源码

比读仓库更高效的方式,是在 Emacs 里直接跳到实现:

操作效果
C-h f 函数名 RET查看函数文档,从帮助缓冲区可直接跳到源码
M-.xref-find-definitions跳到定义处
M-,跳回
M-x find-function RET 函数名 RET直接打开定义该函数的源文件
M-x find-variable RET 变量名 RET打开定义该变量的位置
M-x describe-keymap RET 键位图 RET查看某个键位图里绑定了什么
M-x locate-library RET 库名 RET找到库文件的实际路径

配合 helpfulelisp-refs,你就拥有了一个比任何网页文档都更完整的本地知识库。

3.6 读一个第三方包的源码:四个入口

想学”别人是怎么写的”,不要从仓库首页开始逐个文件翻,用下面四个入口效率最高:

入口操作能看到什么
从命令出发C-h f 命令名,再点击帮助缓冲区里的文件名这个命令的实现,以及它调用了哪些内部函数
从变量出发C-h v 变量名,尤其是 defcustom作者认为用户可能想改什么,这是设计的窗口
从目录结构出发M-x find-library RET 包名 RET,或直接打开 elpa/包名-版本/包的模块划分与文件头规范
从调用关系出发M-x elisp-refs-function RET 函数名 RET某个内部函数被哪些地方调用,快速画出逻辑主干

对新手来说,C-h f 出发最省力:用某个包的某个命令时顺手看一眼实现,一次只看二十行,几个月下来常见写法就都熟悉了。这比”读完一本书再动手”的效率高得多。


四、视频资源

视频的优势是”能看到操作过程”,这对 Emacs 尤其重要——很多技巧靠看别人怎么按比读文字快得多。

网络提示:以下 YouTube 与 Bilibili 之外的资源在国内可能需要网络代理才能访问;Bilibili 上的中文内容不受影响。

4.1 英文频道

资源链接特点
System Craftersyoutube.com/@SystemCrafters目前最系统的 Emacs 教学频道,节奏平稳、注重原理。站点 systemcrafters.net 有配套文字版
Emacs From Scratch 系列播放列表System Crafters 的招牌系列:从空配置开始,一集一个主题,最终搭出一套完整环境。这是最推荐给”想自己写配置”的人的视频系列
Protesilaos Stavrouyoutube.com/@protesilaosEmacs 核心贡献者、modus-themes 与 ef-themes 作者。内容偏”如何把 Emacs 用得更正统”,对理解内置能力帮助极大
Uncle Dave’s Emacsyoutube.com/@UncleDavesEmacs短小精悍的单点技巧,适合碎片时间看
Emacs Elementsyoutube.com/@EmacsElements以”某个具体功能怎么用”为主,覆盖面广
Mike Zamanskyyoutube.com/@mikezamansky系列名 “Using Emacs”,从用户视角讲日常使用,配套博客 cestlaz.github.io
EmacsConfemacsconf.org每年一次的 Emacs 会议,全部演讲录像免费。适合在已经会用的阶段拓宽视野

4.2 中文视频

资源链接特点
子龙山人的 Spacemacs Rocksbilibili.com/video/BV1fE411x7jc简体中文,配套仓库见上一节的 zilongshanren/Spacemacs-rocks。虽然以 Spacemacs 为载体,但讲的操作与概念适用于所有 Emacs

中文视频资源整体偏少,且不少内容基于较老版本的 Emacs。建议把中文视频用于建立整体印象,把英文频道用于学习具体技术,遇到版本差异时以 C-h v 的实际结果为准。

4.3 按目标的观看顺序

视频很多,但不需要都看。按你的目标选一条线:

你的目标建议看的看的方式
想自己从零写一份配置Emacs From Scratch 系列顺序看,每一集都跟着敲,看完一集就提交一次配置
想搞懂某个内置功能(Dired、Org、窗口管理)Emacs Elements、Uncle Dave’s Emacs按标题检索单集,看完立刻在自己的 Emacs 里练一遍
想理解 Emacs 的设计取舍与”正统用法”Protesilaos 的频道不必顺序看,挑感兴趣的主题;他的观点常与主流配置习惯不同,值得对照
刚上手,连键位都不熟中文视频(子龙山人的系列)先建立整体印象,之后转到英文频道学具体技术
已经会用,想拓宽视野EmacsConf 历年演讲按主题挑选,适合了解别人怎么用 Emacs 解决非编程问题
想了解生态动态Sacha Chua 的 Emacs News当作周报浏览,不必逐条精读

4.4 视频的正确用法

看视频最大的陷阱是”看懂了但不会用”。建议:

  1. 打开视频的同时打开自己的 Emacs,跟着做,不要只观看。
  2. 每看完一集,把学到的键位或配置立刻写进自己的 init.el 并提交一次 Git。
  3. 重要的操作重复三遍,直到不看视频也能做出来。
  4. 视频里出现的包名、变量名,一律在自己的 Emacs 里用 C-h f / C-h v 核对一遍——视频可能基于较老版本,而内置文档永远与你的版本一致。

五、书与博客

资源链接说明
Mastering Emacsmasteringemacs.org同名书籍的官方博客。作者 Mickey Petersen 的文章以严谨著称,适合在”会用”之后深入理解 Emacs 的设计
Sacha Chua 的博客sachachua.com/blogEmacs 社区最著名的长期记录者,每周发布 Emacs News 汇总,是了解生态动态的最佳入口
System Crafters 站点systemcrafters.net视频的文字版与进阶专题

书籍方面,除 GNU 官方的 eintr 与 Elisp 参考手册外,上面这份清单基本覆盖了公开可获取的优质内容。实体书的价值主要在”系统性”,如果时间有限,优先把官方手册的目录读一遍,知道自己以后该去哪查。


六、英文文档阅读速成

Emacs 最好的资料是英文的,这无法回避。但好消息是:Emacs 领域的英文技术写作词汇量很小,把下面这三张表记住,阅读速度会有明显变化。

6.1 常用术语对照

英文中文说明
buffer缓冲区文本的载体,不一定对应磁盘文件
window窗口frame 内部的视图区域
frame框架操作系统的窗口
minibuffer迷你缓冲区底部输入命令与参数的地方
mode line模式行窗口底部的状态栏
point光标位置
mark标记与 point 一起界定 region
region区域point 与 mark 之间的文本
kill剪切对应的内部动作是”存入 kill-ring”
yank粘贴Emacs 的 yank 相当于 Vim 的 paste
kill-ring剪切环剪切历史
prefix argument前缀参数C-uM-数字 提供的参数
keymap键位图按键到命令的映射
binding绑定某个按键对应的命令或键位图
hook钩子特定时机执行的一组函数
face字体外观文本显示属性的集合
font-lock语法高亮Emacs 的语法高亮子系统
syntax table语法表告诉 Emacs 哪些字符是词、括号、注释
overlay覆盖层依附于一段文本范围的显示修饰
text property文本属性直接写在文本上的显示属性
fringe边缘区窗口左右两侧的窄条,用于显示断点、diff 等
autoload自动加载用到时才加载函数定义
advice建议在不改源码的前提下包装已有函数
narrowing收窄把编辑范围限制在缓冲区的一部分
indirect buffer间接缓冲区与主缓冲区共享文本、但视图独立的缓冲区
dabbrev动态缩写补全从当前缓冲区中找词补全
isearch增量搜索C-s 触发的搜索
regexp正则表达式Emacs 的正则语法有自己的转义规则
transient临时菜单内置的弹出式命令面板(Magit 使用)
stretch空白填充显示层用来占位的空白
glyph字形屏幕上的一个显示单元
obsolete已废弃仍可用但不推荐,通常有替代函数

6.2 常见报错原文的含义

看不懂报错是新手最大的挫败源。Emacs 的报错信息其实非常规范,用词固定:

报错原文含义排查方向
Symbol's function definition is void: foo函数 foo 不存在包没加载、拼写错误、忘了 require
Symbol's value as variable is void: foo变量 foo 未定义变量名拼错,或在定义前就使用了
Wrong type argument: stringp, nil需要字符串却收到了 nil上游函数返回了 nil,没有处理失败分支
Wrong number of arguments参数个数不对C-h f 核对函数签名
Args out of range: 5, 3位置越界对空缓冲区做字符操作,或 goto-char 超出范围
End of file during parsing括号不配平M-x check-parens 检查
Invalid read syntax: ")"多了一个右括号同上
Search failed: "xxx"搜索没找到(search-forward "xxx" nil t) 让失败返回 nil
Buffer is read-only缓冲区只读(let ((inhibit-read-only t)) ...) 临时解除
Text is read-only文本带只读属性由 text property 或 overlay 设置,需找到设置方
File is missing文件不存在检查路径,注意 expand-file-name
No catch for tagthrow 没有对应的 catch检查 catch/throw 配对
Failed to verify signature包签名校验失败执行 M-x gnu-elpa-keyring-update,详见包管理章节
Package 'xxx' is unavailable包仓库里没有这个包刷新包列表,或确认仓库地址与包名
Quit用户按了 C-g属正常中断,不是错误

6.3 在 Emacs 里读 Info 手册

官方手册有离线版本,用 Emacs 自带的 Info 阅读器打开,比浏览器更方便:C-h i 打开手册目录,进入目录后选择 ElispEmacs Lisp Intro 节点即可开始阅读;C-h r 则直接打开 Emacs 用户手册。

键位作用
d回到手册目录
m 节点名 TAB按菜单项跳转到某个节点(支持补全)
g (手册) 节点按名字直接跳转
n / p下一个 / 上一个节点
u回到上一层
l回到刚才看过的节点
i 关键词 RET索引中查找,这是最快的检索方式
s 正则 RET在当前节点内搜索
TAB跳到下一个链接
q退出

i(索引查找)是最高效的入口。 手册的索引覆盖了几乎所有的函数名、变量名与概念名,输入 kill-ringoverlay 就能直接跳到讲它的那一节,比翻目录快得多。养成”遇到不懂的函数先 C-h f,不懂的概念先 C-h ii”的习惯。


七、社区:怎么提问才能得到答案

Emacs 社区的技术水平普遍较高,但也很在意提问方式。一个好问题应该包含:

  1. Emacs 版本与操作系统M-: emacs-version RET 的结果。
  2. 最小复现:用 emacs -Q(不加载配置)能否复现;如果能,给出触发命令;如果不能,说明是配置问题。
  3. 完整报错信息*Messages*C-h e)里的原文,不要只截取一半。
  4. 你已经尝试过什么:这能避免别人重复你已经走过的路。
  5. 期望行为与实际行为:把”我想让它做 A,它做了 B”说清楚。

渠道:

  • Emacs 中文社区论坛:中文提问首选,有活跃的核心用户。
  • Emacs Stack Exchange:英文问答,历史积累极其丰富,先搜索再提问,八成问题已有答案。
  • Reddit 的 r/emacs 版块:偏资讯与讨论,问题类内容不如 Stack Exchange 集中。
  • 项目自己的 issue 区:如果是某个具体包的问题,直接去它的仓库提问最快。

如果确认是 Emacs 本身的缺陷,用 M-x report-emacs-bug 提交,它会自动带上你的版本与环境信息,这是官方推荐的反馈方式。


八、练习:把资源用起来

光读不写等于没读。下面这套练习按本模块章节顺序设计,每完成一个就说明你掌握了对应的知识点。

序号练习对应章节验收标准
1M-: 里求出 (+ 1 2)(car '(1 2 3))(format "%s-%d" "a" 1) 的值01 求值与数据类型能解释为什么 (car '(+ 1 2)) 得到 + 而不是 3
2写一个用 let 绑定局部变量并返回其值的函数02 变量作用域与绑定能解释把 let 换成 let* 后行为是否变化
3写一个带 interactive "r" 的命令,对选中区域做大写转换03 函数闭包与宏M-x 能调用,选中文本后执行有效
4seq-filterseq-map(1 2 3 4 5) 中取出偶数并求平方04 列表序列与哈希表结果为 (4 16)
5写一个函数:遍历当前缓冲区所有行,删掉完全空白的行05 控制流与 06 缓冲区文本与点在测试缓冲区中结果正确,且不破坏光标位置
6用 overlay 把当前行高亮成自定义颜色07 文本属性与 Overlay移动光标后高亮跟随,且关闭模式后清理干净
7把练习 5 的函数绑到 C-c C-d 上,并加进 prog-mode-hook08 命令与键位映射与 09 Mode与HookC-h k C-c C-d 能看到你的命令
8把前面所有函数组织成一个 my-utils.el,加上文件头与 provide10 包与命名空间实践M-x byte-compile-file 无警告
9profiler-start 找出练习 5 中性能最差的一行并优化11 调试与性能剖析能用 benchmark-run 给出优化前后的数字

这些练习的答案不需要和别人一致——Elisp 里同一个功能通常有三种写法,能跑通且能解释清楚就是合格。


九、按顺序使用这些资源

flowchart LR
    A["第 1 步<br/>eintr 或 elisp-guide<br/>建立整体认知"] --> B["第 2 步<br/>本模块 01 到 11 章<br/>系统学语法与 API"]
    B --> C["第 3 步<br/>读 purcell 或 Redguardtoo 的配置<br/>看真实写法"]
    C --> D["第 4 步<br/>读 Emacs 源码<br/>C-h f 跳转 + helpful"]
    D --> E["第 5 步<br/>emacs-package-dev-handbook<br/>写自己的包"]
    E --> F["第 6 步<br/>EmacsConf 与社区<br/>长期参与"]

配套建议:

  • 写代码时:内置文档(C-h f / C-h v)加源码跳转,够用九成。
  • 卡住时:先用 emacs -Q 排除配置干扰,再去 Emacs Stack Exchange 搜索报错原文。
  • 想系统补课时:读 eintr 的对应章节,或看 Emacs From Scratch 的相关集数。
  • 想拓宽视野时:读 Sacha Chua 的周报、看 EmacsConf 录像。

小结

  • Elisp 的学习资料分四类:内置文档(最高频)、官方手册(最权威)、入门教程(建立认知)、源码与仓库(学真实写法)。混用会低效,按问题性质选资源。
  • 最容易被忽略、但价值最高的是内置文档加源码跳转C-h f 查文档、M-. 跳到定义、配合 helpfulelisp-refs,这一套组合比任何网页教程都更贴近你的实际版本。
  • 视频的最佳用法是”边看边做”,Emacs From Scratch 系列最适合想要自己写配置的人。
  • 中文资源里,《一年成为 Emacs 高手》讲方法,子龙山人的教程与视频讲使用,emacs-document 与 Emacs 中文社区解决具体问题。
  • 资源本身不是能力。做完第八节那九个练习,比收藏一百个仓库有用。

相关章节