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

Emacs 完全指南 / 第 01 章:Emacs 简介

第 01 章:Emacs 简介

1.1 Emacs 的历史

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

时间线

年份 事件
1976 Richard Stallman 在 MIT 人工智能实验室编写最初的 Emacs(Editor MACroS)
1984 Stallman 启动 GNU 项目,开始开发 GNU Emacs
1985 GNU Emacs 13.0 发布,首个广泛传播的版本
1994 GNU Emacs 19.x 引入了 X Window 支持
2001 GNU Emacs 21.x 引入了字体渲染和图片支持
2009 GNU Emacs 23.x 支持 Unicode 和 daemon 模式
2012 GNU Emacs 24.x 引入内置包管理器(package.el)
2018 GNU Emacs 26.x 引入线程支持、行号显示模式
2019 GNU Emacs 27.x 原生支持 JSON 解析
2021 GNU Emacs 28.x 引入原生编译(native-comp)和 Tree-sitter 支持
2023 GNU Emacs 29.x 全面集成 Tree-sitter、内置 use-package
2025 GNU 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 是编辑器世界中两大"宗教"。以下是客观的对比:

功能对比表

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

哲学差异

维度 Emacs Vim
设计理念 万物皆可 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 Emacs 或 Prelude 开始, 等熟悉了 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-x Ctrl + x C-x C-f 表示 Ctrl+x 然后 Ctrl+f
M-x Alt + x(Meta) M-x 表示 Alt+x
S-x Shift + x S-<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 章:安装与配置