强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

第 01 章:Emacs 简介

第 01 章:Emacs 简介

1.1 Emacs 的历史

Emacs 是最古老的、至今仍在活跃开发的文本编辑器之一。它的历史可以追溯到 1976 年。

时间线

年份事件
1976Richard Stallman 在 MIT 人工智能实验室编写最初的 Emacs(Editor MACroS)
1984Stallman 启动 GNU 项目,开始开发 GNU Emacs
1985GNU Emacs 13.0 发布,首个广泛传播的版本
1994GNU Emacs 19.x 引入了 X Window 支持
2001GNU Emacs 21.x 引入了字体渲染和图片支持
2009GNU Emacs 23.x 支持 Unicode 和 daemon 模式
2012GNU Emacs 24.x 引入内置包管理器(package.el)
2018GNU Emacs 26.x 引入线程支持、行号显示模式
2019GNU Emacs 27.x 原生支持 JSON 解析
2021GNU Emacs 28.x 引入原生编译(native-comp)和 Tree-sitter 支持
2023GNU Emacs 29.x 全面集成 Tree-sitter、内置 use-package
2025GNU Emacs 30.x 发布,进一步优化性能和现代功能

名字的由来

Emacs 全称是 Editor MACroS,最初是为 TECO 编辑器编写的一组宏命令集合。 后来它演变为一个独立的编辑器,但名字保留了下来。

GNU Emacs 中的 GNU 来自 “GNU’s Not Unix”——这是 Stallman 发起的自由软件项目名称。


1.2 Emacs 的设计哲学

Emacs 的设计哲学与其他编辑器截然不同,理解这些理念有助于你更好地使用它。

核心理念

┌─────────────────────────────────────────────────┐
│              Emacs 设计哲学金字塔                  │
├─────────────────────────────────────────────────┤
│                                                 │
│                  自由软件                         │
│                 ╱        ╲                       │
│              可扩展性    可定制性                  │
│             ╱                ╲                   │
│          自文档化          内部统一性              │
│         ╱                        ╲              │
│       ┌──────────────────────────────┐          │
│       │    一切都是文本缓冲区          │          │
│       └──────────────────────────────┘          │
│                                                 │
└─────────────────────────────────────────────────┘

1. 一切都是文本缓冲区(Everything is a Buffer)

Emacs 中的邮件、文件、终端输出、调试信息……统统以"缓冲区"的形式呈现。 这意味着你可以在任何地方使用相同的编辑命令。

2. 可扩展性(Extensibility)

Emacs 的核心几乎完全用 Emacs Lisp(Elisp)编写。你不仅可以通过配置来定制行为, 还可以通过编写 Elisp 代码来修改或扩展 Emacs 的任何功能。

3. 自文档化(Self-Documenting)

Emacs 的每个功能都有文档。你可以随时:

  • C-h k — 查看某个按键绑定的是什么命令
  • C-h f — 查看某个函数的文档
  • C-h v — 查看某个变量的含义
  • C-h m — 查看当前主模式的文档

4. 内部统一性(Uniformity)

所有操作都遵循相同的模式:移动光标、编辑文本、执行命令。学了一套操作, 就能在所有场景中使用。


1.3 Emacs vs Vim

Emacs 和 Vim 是编辑器世界中两大"宗教"。以下是客观的对比:

功能对比表

特性EmacsVim
学习曲线陡峭(但更平滑入门路径)陡峭(模态编辑需要适应期)
扩展语言Emacs Lisp(完整编程语言)Vimscript / Lua
模态编辑默认无(可通过 Evil 插件获得)原生支持
GUI 功能窗口分割、图片、浏览器、终端主要面向终端,GVim 有限支持
内置功能极其丰富(邮件、日程、终端……)精简(聚焦编辑)
启动速度较慢(可通过 daemon 模式优化)
内存占用较高较低
社区生态包数量多,深度广包数量多,配置多样
多平台Linux/macOS/Windows 全平台全平台
许可证GPLv3Vim License(慈善软件)

效率对比

;; Emacs 思维:用 Elisp 扩展一切
(defun my/open-project-readme ()
  "打开当前项目的 README 文件。"
  (interactive)
  (let ((readme (locate-file "README.md" (list (projectile-project-root)))))
    (when readme
      (find-file readme)
      (message "已打开项目 README: %s" readme))))
" Vim 思维:用 Vimscript 配置
function! OpenProjectReadme()
  let l:readme = findfile('README.md', getcwd() . ';')
  if !empty(l:readme)
    execute 'edit ' . l:readme
  endif
endfunction

哲学差异

维度EmacsVim
设计理念万物皆可 Emacs(集成环境)专精编辑,配合外部工具
键位风格修饰键组合(Ctrl/Meta)模态切换(Normal/Insert)
扩展方式运行时动态修改一切通过插件和 autocmd
配置语言一等公民(Elisp)二等公民(Vimscript)
与系统集成深度集成(TRAMP、Dired)通过 shell 管道

注意: 没有绝对的好坏。选择哪个编辑器取决于你的工作流和个人偏好。 许多用户在 Emacs 中使用 Evil 模式获得了两全其美的体验。


1.4 Emacs 的核心概念

在深入学习之前,需要理解 Emacs 的几个核心概念:

核心术语

术语英文说明
缓冲区Buffer内存中的文本块,对应一个文件或临时数据
窗口Window显示缓冲区的视图区域(可以有多个窗口)
框架Frame操作系统级别的窗口(包含若干个窗口)
主模式Major Mode决定当前缓冲区的行为(如编辑 Python、Org 文件)
次模式Minor Mode可叠加的辅助功能(如行号显示、自动补全)
Point光标在缓冲区中的位置
区域Region标记(Mark)到光标(Point)之间的文本范围
杀环Kill Ring类似剪贴板的历史记录栈
键序列Key Sequence一组按键的组合,绑定到某个命令

模式系统

                    ┌─────────────┐
                    │  缓冲区     │
                    └──────┬──────┘
                           │
              ┌────────────┼────────────┐
              ▼            ▼            ▼
        ┌──────────┐ ┌──────────┐ ┌──────────┐
        │ 主模式   │ │ 次模式 1 │ │ 次模式 2 │
        │ (唯一)   │ │ (可叠加) │ │ (可叠加) │
        └──────────┘ └──────────┘ └──────────┘
              │            │            │
              ▼            ▼            ▼
        python-mode   display-line   company-mode
        org-mode      flycheck       which-key
        lisp-mode     hl-todo        evil-mode
  • 每个缓冲区恰好有一个 主模式(Major Mode)
  • 可以同时开启多个 次模式(Minor Mode)
  • 主模式决定了基本的编辑行为和按键绑定

1.5 Emacs 发行版

由于 Emacs 的高度可定制性,社区创建了多种"开箱即用"的发行版。

主流发行版对比

发行版风格启动时间学习曲线适合人群
原版 Emacs极简中等喜欢从零构建的用户
Doom Emacs类 Vim(Evil)中等较低Vim 转 Emacs 的用户
Spacemacs类 Vim(Evil)较慢较低全栈开发者
Prelude纯正 Emacs中等经典 Emacs 爱好者
Centaur Emacs现代化中等追求美观的用户
Crafted Emacs教学向想深入学习 Elisp 的用户

Doom Emacs

Doom Emacs 是目前最受欢迎的 Emacs 发行版之一:

  • 核心优势:速度快、外观精美、Evil 优先
  • 模块系统:通过 init.el 中的 :tools:lang 等模块快速启用功能
  • 包管理:使用 straight.el 从 Git 源安装包
  • 社区活跃:Discord 社区、完善的文档
# 安装 Doom Emacs
git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs
~/.config/emacs/bin/doom install

Spacemacs

Spacemacs 是最早的"batteries-included" Emacs 发行版:

  • 核心优势:完善的 layer 系统、丰富的文档
  • 层次系统:每个语言或工具是一个独立的 layer
  • 社区成熟:大量教程和预配置
# 安装 Spacemacs
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

选择建议

你是 Vim 用户?
  ├── 是 → 选择 Doom Emacs
  └── 否 → 你喜欢折腾吗?
        ├── 是 → 从原版 Emacs 开始
        └── 否 → 选择 Prelude 或 Centaur

建议:初学者可以从 Doom EmacsPrelude 开始, 等熟悉了 Emacs 的概念后再考虑自定义配置。


1.6 为什么选择 Emacs

适用场景

场景Emacs 的优势
编程开发LSP、Tree-sitter、DAP、项目管理
写作与笔记Org-mode(比 Markdown 更强大)
知识管理Org-roam(类似 Roam Research)
邮件管理mu4e、Notmuch
终端操作Eshell、Vterm、Shell
远程编辑TRAMP(透明远程编辑)
版本控制Magit(最好的 Git 客户端之一)
文档排版LaTeX 集成、Org 导出
数据科学Org-babel(可执行代码块)

用户案例

案例 1:全栈开发者小明

小明使用 Doom Emacs 作为主力编辑器:

  • eglot(LSP)编写 TypeScript 和 Python
  • Magit 进行 Git 操作和代码审查
  • Org-mode 记录项目笔记和待办事项
  • TRAMP 连接服务器修改配置文件
  • Vterm 作为终端模拟器

案例 2:学术研究员小红

小红使用 Emacs 撰写论文:

  • Org-mode 撰写论文大纲和初稿
  • Org-babel 混合 LaTeX 和 Python 代码
  • Org-ref 管理文献引用
  • pdf-tools 阅读和标注 PDF
  • Org-roam 建立知识网络

1.7 本教程的使用方法

快捷键约定

本教程使用以下约定来表示键序列:

符号含义示例
C-xCtrl + xC-x C-f 表示 Ctrl+x 然后 Ctrl+f
M-xAlt + x(Meta)M-x 表示 Alt+x
S-xShift + xS-<tab> 表示 Shift+Tab
RET回车键C-x C-s RET
SPC空格键SPC f s 表示依次按空格、f、s
-连续按键C-x C-f 表示先后按两组键

代码约定

;; 这是可以直接在 Emacs *scratch* 缓冲区中执行的 Elisp 代码
;; 执行方式:将光标放在代码末尾,按 C-x C-e

(message "Hello, Emacs!")

图标说明

  • 📝 练习:动手练习的内容
  • 💡 提示:有用的技巧和建议
  • ⚠️ 注意:需要特别注意的内容
  • 🔗 扩展阅读:深入了解的参考链接
  • 📋 表格:信息汇总表
  • 🏗️ 场景:真实业务使用场景

1.8 本章小结

要点说明
历史悠久从 1976 年延续至今,持续活跃开发
设计哲学可扩展、可定制、自文档化、万物皆缓冲区
与 Vim 对比集成环境 vs 专精编辑,无绝对优劣
发行版选择Doom(Vim 风格)、Prelude(纯正)、Spacemacs(全栈)
核心概念缓冲区、窗口、框架、主模式、次模式

1.9 扩展阅读


下一章 → 第 02 章:安装与配置