翻译-使用 GNU Emacs 进行自由计算(FLOSS @ Oxford)
Protesilaos Stavrou
🏆 持续至 2026 年春季,我提供关于 Emacs、Linux 或生活的一对一辅导:https://protesilaos.com/coach/ 。每小时 10 欧元。
1. 使用 GNU Emacs 进行自由计算
2026-03-13
原始链接:YouTube 或 Internet Archive
这是对 Emacs 的全面介绍:它有多么实用,以及它如何倡导自由软件。这是我为牛津大学人员组织的“FLOSS @ Oxford”活动所做的演讲的修改版本。这是我为该活动撰写的页面:https://protesilaos.com/codelog/2026-03-12-my-emacs-talk-floss-oxford/。
大家好!我是普罗特西拉奥斯,大家也可以叫我“普罗特”。
本次演示文稿是我昨晚在 FLOSS @ Oxford 活动上演讲的修改版本:https://ox.ogeer.org/event/computing-in-freedom-with-gnu-emacs-protesilaos-stavrou。
该活动由牛津大学的人员组织。我感谢他们给我机会参与他们的项目。
我在此发布这个修改版本,是为了让那些不常浏览我网站的人也能看到。他们可能不知道我在牛津的这次活动上发表了演讲。
将视频发布在这个平台上,意味着每个人都能从中受益。
2. 这是对 Emacs 的全面介绍
在这次演讲中,我将向大家介绍 GNU Emacs,或者简称为“Emacs”。Emacs 是一款可以在电脑上运行的程序。我现在就在用它进行这次演讲。
Emacs 是自由软件。它允许您阅读其全部源代码、修改代码,并分享您的定制版本。由此您既能贡献于热情友好的 Emacs 用户社区,也能从中获益。
我将告诉你这一切在实践中意味着什么,以及如何通过切换到 Emacs 来提升你的计算体验。
3. Emacs 作为一款强大的文本编辑器
当你初次开始使用 Emacs 时,它感觉就像一款普通的文本编辑器程序。
你移动光标并编辑文本。开箱即用时,并没有明显令人印象深刻之处。
作为一款文本编辑器,Emacs 功能极为强大。它拥有各类键盘快捷键,让你能高效操作文本。
如果你愿意,完全可以不依赖鼠标来操控 Emacs。
4. 支持 Unicode
Emacs 支持 Unicode 标准,这对实现人群包容性至关重要。
Emacs 可以表达世界上的各种文字。我的母语是希腊语。
我可以使用 Emacs 内置的功能切换到希腊字母来书写内容,例如写下 «καλησπέρα»,意为“晚上好”。
我甚至可以拼写出“Dao De Jing”(道德经),这是一本来自中国古代的书籍标题。
加上表情符号:🦚🦬🐉。
5. 在同一页面中包含多种字体
同一文档中可以包含多种文字。
这对于像我这样的多语言使用者或从事涉及多种自然语言研究的人来说是一个优势。
Emacs 可以在同一页面中组合多种字体以及不同的颜色。
每种字体都可以拥有自己的属性,例如相对大小和印刷强度。
色彩方面也是同样的道理。
此刻在我的屏幕上,我已经将两种不同的字体样式结合使用:标题字体与正文字体。
6. Emacs 可以在文本旁显示图形
Emacs 不仅限于纯文本界面,它还能显示图像和 PDF 文档。下面我提供了一个图像文件的链接。现在我将输入一个键盘快捷键来显示这张图像,然后再次输入以隐藏它。
顺便说一句,这是我山中某处的一个地点。
7. Emacs 是一款可扩展的文本编辑器
虽然你可以将 Emacs 作为通用文本编辑器使用并从中受益,但真正吸引像我这样的人的是扩展 Emacs 的可能性。
此处的“扩展”意指引入新功能;这些功能在您计算机上安装的默认程序中并不具备。
这些扩展采用与 Emacs 主体相同的编程语言编写。该语言名为“Emacs Lisp”或“Elisp”。
你可以通过编写 Elisp 程序来自行扩展 Emacs,或者下载社区提供的现有扩展。
8. 扩展 Emacs 会创建一个社区
例如,当我为 Emacs 创建一个新扩展时,我会根据自由软件许可证的条款发布它——这些条款与 Emacs 使用的相同。
其他人可以下载我的扩展,并按照他们的喜好使用。如果他们愿意,他们可以在其基础上进行自己的修改,这可能会引入我在原始实现中未曾想到的其他扩展。
如果这些用户效仿我的做法,那么当他们发布自己的补充内容时,我也能从他们的贡献中受益。
因此,存在着一群热心的 Emacs 用户社区,他们热衷于与全世界分享自己的作品。
9. Emacs 的可扩展性是实时发生的
用户可以通过运行一些 Emacs Lisp 程序来扩展 Emacs。这样的程序可以短至一行,也可以根据需要任意长。这无关紧要。
用户运行程序,Emacs 随即执行该程序所实现的功能。
例如,我正在 Emacs 内部进行这次演示。但 Emacs 本身并没有内置“演示模式”。因此,我开发了自己的扩展,使我能够完成现在正在做的事情。
让我切换出演示模式,以便向你展示我的意思。
10. 关闭“演示模式”后的视图
注意显示已发生变化。我现在的主字体是等宽字体。
标题比之前更小了:它们现在与正文其他部分的字号相同。标题旁边也不再显示数字。
接着,我的屏幕底部出现了一个状态栏,显示我正在处理的内容信息。侧边则显示了行号,指示光标在当前文件中的位置。此外,我当前所在的行会以独特的背景色高亮显示。让我上下移动光标来演示这一点。
所有这些元素在我编程时都非常有用。但当我希望专注于某些文本段落时,它们就显得有些分散注意力。所以,我只需按下预设的键盘快捷键——瞧!——就能切换到我偏好的样式。
11. Emacs 让你掌控自己的计算体验
你可能会想:我为什么需要一个可定制的文本编辑器呢?
答案在于掌控感。你可以决定使用什么工具以及如何使用它。你可以拼凑出一个符合自己偏好的工作流程。
我先前切换的这个演示模式完全符合我的期望。我自行决定应用哪套界面调整方案。其他用户在这方面可能有不同的偏好。
例如,他们可能喜欢在屏幕一侧显示行号。这没有对错之分。重要的是,Emacs 为我们提供了实现个人需求的方法。
12. 你的掌控力延伸至所有工作流程
现在,请将这一原则应用于你能用 Emacs 完成的所有任务:这通常会是围绕文本展开的项目。
我完全通过 Emacs 来管理我的日程安排。
我使用 Emacs 处理所有的电子邮件往来。
我进行编程,并撰写散文,比如为我的网站撰写博客文章,以及书籍或技术手册。
对于每一项任务,我都知道 Emacs 能让我在执行时不受任意限制。
Emacs 让我能够使用 Elisp 来修改处理邮件的方式,以及在我自定义的日程视图中呈现任务的方式。
13. 为了一个集成的计算环境
如果没有 Emacs,我将无法像现在这样掌控我的计算体验。
原因在于我将不得不依赖许多不同的应用程序。每个应用程序都有其自己的界面和设计范式。
每个应用程序的配置(如果存在的话)都是其特有的。一个应用程序中的自定义设置不会延续到其他应用程序。
而且,如果我们考虑重要的实现细节,每个应用程序可能使用其自己的编程语言进行配置。
换句话说,这不是一种集成的计算体验。
14. 许多应用无法良好整合
要想获得与 Emacs 同等程度的控制力,我只能寄希望于那些各不相同的应用程序能以某种方式协同配合,为我所用。
那只是一厢情愿的想法。
现实是,将众多不同应用程序拼凑在一起,只会带来挫败感,并导致生活陷入不断分心的上下文切换之中。
15. Emacs 让你的工作流程保持一致性
在 Emacs 中拥有我所需要的一切,确保了事情以一种一致的方式发生。
所有自定义设置均以同一种编程语言编写,即 Emacs Lisp。
我为某个情境(例如这个“演示模式”)所定义的内容,可以在另一个情境中使用。
例如,我可以在阅读电子邮件时启用这种演示风格。为什么?
因为它能在特定时刻让我感到更加舒适。我甚至可以通过条件逻辑实现自动化,这样在特定情况下打开新邮件时,它就会自动执行。
16. 实践中的集成计算
当你使用许多无法良好协作的应用程序时,你无法做到开发者未曾设想的事情。
例如,你的电子邮件客户端很可能没有“演示模式”这一功能。你的其他应用程序也是如此。
同样,你的众多应用程序未必能读取并理解你在某个应用程序中的配置。
假设你为自己的电子邮件客户端定义了最喜欢的配色方案。你花时间考虑色彩的协调性,并使用符合个人喜好的精确排版。
现在,你切换到日历应用,之前的工作却无法延续:你必须重新开始,假设这甚至可能实现。
17. Emacs 让集成变得更简单
色彩与样式看似是相对次要的问题,但它们揭示了一个更深刻的现实:分散的应用程序无法实现无缝协作。
Emacs 不存在这个问题。你为心中某个情境定义的东西,最终可能用于你最初未曾想到的另一个情境。
例如,在我的 Emacs 中,我编写了一个小函数来快速复制光标所在位置的“事物”。这在编程时非常有用,因为“事物”可能是一个完整的表达式,比如函数的定义。但“事物”也可能是我在电子邮件中收到的链接。
我事先并未考虑到这个使用场景。然而,在这个未曾预料的情况下,让我的函数满足需求却轻而易举。
18. 整合赋予你涌现属性
Emacs 的集成计算环境远不止其各部分之和。
这是因为你可以以原始开发者未曾预见的方式组合不同的功能模块。
你并非仅仅在 Emacs 中拥有你的写作、邮件、日程等等。
你拥有一个的功能,同时兼具另一个的功能。你可以根据需要,在它们之间建立联系。
再次思考我此刻正在进行的这场演示。我面前的是我演讲的文稿。这是一个纯文本文档,我可以实时编辑它。让我将这部分大写以阐明这一点。
19. 这是纯文本,其功能类似于幻灯片放映
我将此文件设计得有点像一系列幻灯片。
请注意,如果我上下滚动(我稍后会这样做),你只能看到我正在阅读的当前部分:你无法访问文档的其余部分。我现在将上下滚动。
这是一种被称为“聚焦”的功能。让我“放宽”视图,然后再次尝试滚动。现在你将看到文本的其余部分。
这个“缩小”功能的原始开发者并不知道像我这样的人会如何利用它。
我在这里用它来做演示。每个标题都成为它自己的伪幻灯片。我使用缩进功能来处理电子邮件,当我想更专注地阅读文本的某一部分时。这完全取决于我如何选择进行我的计算工作。
20. 一致性促进生产力
在改用 Emacs 之前的许多年里,我并不享受使用电脑的时光。
完成每项任务我都需要花费太多时间。
我永远无法及时找到任何文件,因为没有程序能为我强制执行一个可预测的文件命名方案。
我所有的笔记最终都无法检索。这让它们变得毫无用处。你保存的数据只有在能找到所需内容时才有价值。
我的音乐收藏杂乱无章,因为我需要专门的软件来编写元数据……简而言之,我的工作效率远未达到理想水平。
最重要的是,这并不有趣。
21. 一致性消除认知负担
当时我的工作主要围绕电子邮件客户端和文字处理器展开。
邮件客户端拥有独立的子系统来处理任务提醒。这些任务的格式与其他程序不兼容。
我无法用我最喜欢的文本编辑器访问任务。因此,我不得不使用电子邮件客户端笨拙的界面,它从未为任务管理而设计——并且不可配置。
接着,我不得不面对两个应用程序外观迥异所带来的认知负担和烦恼。
我的邮件不像文档那样运作,这让我在两者之间切换并继续写作变得更加困难。每次遇到这种情况,我都会翻个白眼。
22. Emacs 在实践中的一致性
Emacs 提升了我的计算体验。
自从改用它以来,我的工作效率大大提升。让我简单展示一下我每天所做的一小部分。
我将暂时退出此窗口的演示模式。
接着,我会在屏幕的下半部分打开我的电子邮件客户端,阅读我收到的一封邮件。
一旦你跟随我切换到电子邮件客户端,我将隐藏显示此演示文稿的窗口。
之后,我将切换到我的日程安排,记录一项任务并回顾我需要完成的事项。
这一切都在 Emacs 内部完成。是时候行动了!
23. 使用 Emacs Lisp 配置一切
我刚才展示的只是我日常工作中非常小的一部分。
不过,还有更多内容,尽管我无法在这次演示中涵盖所有。
然而,关键在于体验的一致性;始终如一的一致性。
我通过为我的电子邮件客户端编写一些 Emacs Lisp 代码来自定义它。对于我的自定义日程安排,我也做了同样的事情。还有更多。
每次我使用 Emacs Lisp 时,我都能获得一些技能,这些技能不仅适用于我正在解决的问题,还能应用于其他领域。
例如,通过按照我的意愿配置电子邮件,我掌握了编程技能,随后便能将这些技能应用于自定义日程的设计中。
24. 学习 Emacs Lisp 能提升使用体验
这是一项回报越来越丰厚的投资。
Emacs 将适应我不断变化的需求。因此,我在 Emacs 配置中融入的每一个新工作流程,都将受益于我积累的所有知识和功能。
我不需要重新学习一切,因为我并未转向其他应用程序。
我不必抛弃这些年所做的所有工作。它们将永远留存。
我不再感到必须尝试每日新潮应用的压力。我曾多次这样做,但每次都后悔不已。在这个过程中,我失去了数据和宝贵的时间。
由于我扎根于 Emacs 的这种稳定性,我依然保持高效和富有成效。
25. Emacs 体现了软件自由
我之前提到过,Emacs 是自由或自由软件。这意味着你可以阅读其源代码、修改它,并与他人分享你的更改。
Emacs 的许可证赋予用户权力。没有哪家公司能夺走我们的 Emacs。它属于整个社区,我们共同守护它的健康发展。
就 Emacs 而言,软件自由不仅关乎许可证。它塑造了你使用程序的方式。Emacs 将这种自由化为其功能中不可分割的一部分。
你随时可以向 Emacs 询问键盘快捷键的实际功能、函数的定义、变量的值,甚至可以亲自查看源代码进行验证。
我现在就演示给你看。
26. Emacs 的自由有助于学习
我实际上是通过实践这种自由学会了用 Emacs Lisp 编程。
我会摆弄 Emacs 并持续检查其状态。这个功能是做什么的?那个键盘快捷键调用的是哪个函数?程序如何判断文件是否未保存?
我想学习,例如,我们如何向下移动一行。从那里,我了解到我们可以一次向下移动多行。
于是我想,我们可以向下移动行,然后还可以做些其他事情,比如将光标置于行末并创建脉冲效果以引起注意。
我不仅学会了如何配置 Emacs,甚至还为它编写了数十个扩展。我还撰写了一本名为《Emacs Lisp Elements》的自由书籍。这种自由并非纸上谈兵。我虽无编程背景,却得以行动起来并实现个人成长。
27. Emacs 不仅适用于程序员
Emacs 通过 Emacs Lisp 进行扩展。如果你懂得如何用这门语言编程,就能对 Emacs 如何辅助你的工作方式持有更强烈的个人见解和特殊要求。
但即使没有任何此类专业知识,你仍然可以做很多你喜欢的事情。请记住,我开始使用 Emacs 时并没有编程背景。
Emacs 模糊了用户与开发者之间的界限。许多开发者实际上最初都像我一样是普通用户。他们在使用过程中不断学习,最终为 Emacs 的开发做出贡献。
我甚至编写过被纳入 Emacs 核心的代码:包括我的 modus-themes 以及其他几个较小的补丁。
28. 您受益于所有 Emacs 扩展
Emacs 社区已经开发了丰富的扩展库。为了高效工作,你无需立即发明任何新东西。
我们称这些扩展为“包”,因为它们以易于安装并直接使用的方式分发。
您将在计算机上下载的 Emacs 程序内置了大量包。
根据您的需求,您甚至可能无需安装社区提供的任何内容。
不过,如果你想安装一个软件包,在你的系统上获取并运行它相当容易。
Emacs 并不挑剔你的使用方式。你有权坚持自己的见解。
29. 一些强大的扩展是内置的
例如,Emacs 自带一个名为 org 或“Org 模式”的软件包。其核心是一种标记语言,我此刻正在本文档中使用它。
注意以星号开头的行如何起到标题的作用。这就是标记的功能。
Org 让你能够撰写文档(包括书籍)、处理任务、安排日程等等。它是一个功能强大的工具。
Emacs 及其更广泛的软件包生态系统中,有无数事物等待探索。
Emacs 整体提供了高质量的解释性文档,涵盖所有内容。
30. Emacs 的文档文化
安装 Emacs 时,你会获得大量技术手册。还有一个交互式教程,帮助你理解基础知识。
此外,当你向 Emacs 请求关于函数定义或变量值的帮助时,你会收到所查找内容的文档。
对官方 Emacs 程序所有贡献的期望是代码有良好文档记录,且手册会相应更新。
31. 大多数软件包都配有高质量的手册
核心 Emacs 树立了优秀文档的典范。软件包开发者遵循这一实践。
例如,我的 denote 软件包拥有一份超过 7500 行的手册,字数超过 52000。用户在其中能找到详细的说明以及可直接复制使用的代码片段。这并非特例,我所有的软件包都遵循这一原则,在必要范围内提供详尽内容。大多数其他开发者同样如此。
作为一个社群,我们能够自由且免费地获取如此丰富的知识。只要我们足够投入,就能从他人身上学习,从而提升自我。我们以分享与关怀的精神践行这一点。对我个人而言,这一切都给予了莫大的帮助。我之所以能自学成才,正是因为从社群中获得了所有这些宝贵的资源。我认为回馈社群是我应尽的义务。
32. Emacs 的学习曲线陡峭
由于 Emacs 具有可扩展性,你几乎可以用它做任何事情。至少对于所有以文本为主的任务来说,情况确实如此。
只要你能够自行扩展或借助相关软件包,Emacs 就能优雅地演进以满足你的需求。
然而,其不足之处在于精通它并非易事。如果你下定决心,可以在最初几天内掌握基础知识。
尽管你需要投入几周或几个月的时间才能变得熟练。这取决于你投入了多少努力,你从事的是哪种工作,以及你的背景如何。
我几天内就掌握了基础知识。几周后开始编写自己的 Emacs Lisp 代码。不到一年时间,我的 modus-themes 就被纳入了 Emacs 核心。
33. 不要跳过手册
市面上有多种“入门套件”可助您快速上手。它们预先配置好各项设置,让您无需一开始就摸索所有细节。
Emacs 的新版本(Emacs 31)甚至将自带一个“新手主题”,它会预先配置多项设置。
这些设置能让学习曲线变得稍微平缓一些。在我看来,任何能改善入门体验的改进都是加分项。
虽然我不认为 Emacs 会变得“即插即用”。这源于其巨大的深度和可扩展性。它功能如此强大,以至于你仍需投入时间和精力去学习它。
无论你如何开始,最可靠的学习方法都离不开手册。这些手册是为用户利益而编写的。请仔细阅读它们。
34. 调整你的期望
我可以肯定地说,Emacs 不适合浅尝辄止的用户。你不能抱着立刻就能轻松上手的期望来使用它。
不,那行不通。通往卓越之路根本没有捷径。
我鼓励你循序渐进。只要你足够耐心去发掘其几乎无限的潜力,Emacs 将助你事半功倍。
从容不迫,有条不紊。无论起点如何,都要依赖官方手册。从中阅读,并逐步将其见解融入你的工作流程。
包括我在内的社区拥有大量资源来辅助学习。博客文章、视频教程、书籍……但切勿跳过官方手册。循序渐进地学习意味着你将比预期更快地精通它。
35. 为何值得学习使用 Emacs
关于集成计算环境的技术层面,我之前已经谈过了。现在结合两个事实来看:
- Emacs 是自由软件。这意味着我们作为一个社区是它的守护者。
- GNU Emacs 自 20 世纪 80 年代问世以来,一直保持着其影响力,并将在未来数十年持续发挥作用。
Emacs 并非陈旧,而是永恒。这源于它能在自由精神的指引下不断扩展。
无论我们作为集体拥有何种新技术或新理念,最终都能将其融入 Emacs 之中。
这样,我们集成的计算环境就能与时俱进。
因此,Emacs 始终保持着其现实意义。
36. 最初的付出终将获得长远回报
用这样的说法来看,你最初投入学习 Emacs 的精力其实并不算多。
你必须对这个项目保持长远的眼光。
如果你有耐心,Emacs 将成为你一生中使用过的最可靠的工具之一。我这么说,是作为一个自己动手的人,一个使用许多工具进行体力劳动的人,我亲手建造了我现在住的房子,还有其他东西。
我于 2019 年夏天改用 Emacs。至今已近七年。如果可能的话,我看不出未来七年有什么理由不使用它。
我仍会想写文章、做编程、维护日程,或许还会做像这样的演示。
37. 祝你好运,玩得开心!
请记住,你不可能在一个周末就学会 Emacs。这是一项长期投入。放慢节奏,你将会享受这个过程。
这就是我今天要分享的全部内容了。非常感谢大家的关注!
您可以在我的网站上找到本文及我发布的所有其他内容:https://protesilaos.com。