我的 Emacs 开发之旅:从起源说起
速览
本文是作者关于 Emacs 使用经历的个人回忆录。内容聚焦于作者与这款编辑器结缘的起点及其背后的故事。虽然涉及开发者工具,但主要属于个人技术叙事,而非行业重大新闻。
AI 深度解读
Emacs,我是如何开始使用它的(个人视角)
背景
这篇文章源自 Hacker News 社区的一篇个人技术叙事,作者回顾了自己从 2008 年左右开始(尽管初期使用得并不熟练)接触 Emacs 的心路历程。这并非一篇关于如何配置或使用 Emacs 的技术教程,而是一段带有自嘲性质的“个人编年史”。
作者明确表示,尽管他经常对编程语言等话题持有强烈观点,但在经典的“编辑器战争”(Editor War)中,他并不想卷入情感争论。事实上,他从未尝试过 Vi/Vim 及其变体。他的选择并非出于对 GNU 哲学或自由软件运动的意识形态认同,也不是出于对 Visual Studio Code 等其他编辑器的敌意(尽管他在维护 OCaml 语言支持时曾对 VS Code 的扩展难度感到沮丧),而是一个纯粹基于实用主义的决策过程。
文章灵感部分来源于 2026 年 4 月的 Emacs Carnival 主题,旨在通过描述那些看似笨拙、但在 hindsight(后见之明)中却带来益处的选择,来解释 Emacs 如何成为他主要的文本和代码编辑器。
核心内容
前史:从 Microsoft Word 到 Notepad++
作者回顾了自己作为自学程序员早期的“愚蠢选择”。在 2000 年代末,他主要学习 PHP。由于当时缺乏稳定的网络连接,他主要依靠书籍自学,且没有电脑的管理员权限,导致他无法真正运行代码。
- Microsoft Word 时代:根据一本 PHP 教程的建议,作者认为任何文本编辑器都可以写代码。由于年轻且从未执行过代码,他误将富文本编辑器 Microsoft Word 当作代码编辑器使用。
- Notepad 时代:通过一张包含 EasyPHP 安装程序的 CD-ROM,他终于能够运行代码,并意识到富文本格式会破坏代码结构,于是切换到了 Windows 记事本(Notepad)。此时他仍未完全理解语法高亮和缩进的重要性。
- Notepad++ 的启蒙:随着野心增长,他发现了 Notepad++。这对他来说是一次真正的“顿悟”,让他体验到了语法高亮和代码缩进带来的便利。
- 工具探索:此后,他短暂尝试过 SciTE、Eclipse(尽管功能强大,但在 LSP 出现前配置极其困难,让他倍感挫败),最终被 Sublime Text 的美学和人体工程学所吸引,一度认为这将是他终身使用的编辑器。
转折点:Le Site du Zéro 与语言多样性
在通过 PHP 解决实际问题后,作者开始出于兴趣探索编程,并活跃于法国知名技术社区 Le Site du Zéro(后转型为 OpenClassrooms)。
- 视野的开阔:在这个活跃的论坛中,他接触到了 OCaml、Erlang、Forth、Haskell、Io、Smalltalk 以及各种 Lisp 方言等主流 PHP 圈子之外的语言。
- 认知的冲击:在 2026 年的今天,这些语言可能已不再小众,但在当时,这对只懂 PHP 的作者来说是一次巨大的认知冲击。这种好奇心后来直接导致他职业生涯中深入使用了 Erlang 和 OCaml。
- 学习策略:为了理解这些语言并避免陷入“手里只有锤子,看什么都是钉子”的工具定律陷阱,他制定了一个激进的学习计划:尝试为列表中的每种语言寻找编译器或解释器,并尝试用它们编写一个 Brainfuck 解释器。
Emacs 的介入:Windows 上的救星
在探索多种编程语言的过程中,作者面临两个主要障碍:
- 环境限制:他当时重度使用 Adobe Creative Suite 和 Windows,这限制了编程学习的灵活性。
- 编辑器需求:习惯了语法高亮后,他需要一个支持多种语言模式的编辑器。
在 LSP(语言服务器协议)和 TreeSitter 等标准化交互协议成熟之前,作者发现 Emacs 是当时的“事实标准”:
- 模式全覆盖:即使是他认为晦涩难懂的语言,几乎总能找到对应的 Emacs 模式(Mode)。
- Windows 支持:令人惊讶的是,Emacs 在 Windows 上的支持非常出色(且至今依然如此)。
尽管作为 Windows 新手,他在配置 $PATH 和环境变量上花费了大量时间,但 Emacs 的多语言支持能力让他坚持了下来。
从 Windows 到 Linux 的迁移
随着实验的深入,Windows 系统的局限性日益明显。作者首先通过虚拟机,随后通过双系统尝试 Linux 发行版。最终在 2014 年,他彻底删除了 Windows 分区,从一个“糟糕的 Windows 用户”变成了一个“糟糕的 Linux 用户”。这一迁移也标志着他与 Emacs 关系的深化,因为 Emacs 在 Linux 环境下的生态更为丰富。
关键要点
- 实用主义而非意识形态:作者选择 Emacs 并非出于对 GNU 哲学或自由软件运动的忠诚,而是因为它在特定历史时期提供了最佳的多语言开发体验。
- 工具认知的渐进性:从 Word 到 Notepad,再到 Notepad++ 和 Sublime Text,作者的经历展示了开发者对“代码编辑器”本质理解的逐步深化。
- 社区与好奇心驱动:Le Site du Zéro 社区引入的多种编程语言(OCaml, Erlang 等)是作者技术栈转型的关键,这种好奇心最终引导他走向了更专业的函数式编程领域。
- Emacs 的“模式”优势:在 LSP 普及之前,Emacs 通过其高度可定制的“模式”系统,为各种小众或新兴语言提供了即时支持,这是其他编辑器难以比拟的优势。
- Windows 到 Linux 的自然过渡:对多语言编译器和解释器的需求,以及对更灵活开发环境的需求,促使作者从 Windows 迁移至 Linux,而 Emacs 在这两个平台上都提供了良好的支持,平滑了这一过渡。
意义与影响
这篇文章提供了一个非典型的 Emacs 用户画像。与许多 Emacs 资深用户不同,作者并非 Emacs 的原生拥护者,也不是 Vi/Vim 的叛逃者。他的故事揭示了工具选择背后的深层逻辑:工具的价值在于它如何适应学习者的认知路径和技术探索需求。
- 对“编辑器战争”的去魅:作者强调其选择是务实的,这有助于缓解围绕编辑器选择的意识形态对立,提醒开发者关注工具是否真正服务于当前的技术目标。
- 多语言学习的启示:作者通过“为每种语言写一个 Brainfuck 解释器”这种极端方式学习语言,虽然略显笨拙,但体现了对编程本质(编译器/解释器、语法结构)的深刻理解。这种跨语言视野最终使他在 OCaml 和 Erlang 等专业领域取得了职业成就。
- Emacs 的长期生命力:文章指出,即使在 LSP 和 TreeSitter 尚未成熟的年代,Emacs 凭借其“一模式一问题”的架构和优秀的跨平台支持(尤其是 Windows),依然能够吸引并留住用户。这解释了为何 Emacs 在现代化编辑器层出不穷的今天,依然拥有忠实的用户群体——它的核心架构具有极强的适应性和扩展性。
- 个人技术演进的缩影:从 PHP 初学者到 OCaml/Erlang 专家,从 Windows 用户到 Linux 用户,作者的经历映射了过去十几年 Web 开发和技术栈演变的典型路径。他的故事表明,早期的“错误”选择(如使用 Word 写代码)往往是通向更深刻理解必经的弯路,而这些弯路最终构成了个人技术 lore(传说/轶事)的一部分。
