Emacs 入门到进阶:可扩展的文本编辑器

FreeGuideOnline 最新 2026-06-13

Emacs 入门到进阶:可扩展的文本编辑器

Emacs 不仅仅是一个文本编辑器,它是一套可编程、可自举的集成环境,能够管理文件、编写代码、规划日程、阅读邮件甚至播放音乐。本教程将带你从零开始,逐步掌握 Emacs 的核心操作与进阶技巧,并学会利用其扩展性打造属于自己的工作流。

认识 Emacs

Emacs 是什么?

Emacs(Editing MACroS)最初由 Richard Stallman 于1976年在MIT开发,现由 GNU 项目维护。其最大特点是可扩展性——用户可以通过 Emacs Lisp(Elisp)语言修改编辑器的任何行为,添加全新功能。经过近50年的发展,Emacs 已成为程序员、作家和研究人员的生产力平台。

Emacs 的哲学

  • 自我记录:几乎所有功能都带有内置帮助,输入 C-h C-h 即可查看所有帮助命令。
  • 一致性:无论是编辑文本、管理文件还是收发邮件,交互方式高度统一。
  • 可定制:用户能自由重新绑定快捷键、编写命令、改变界面,即所谓“编辑器即操作系统”。

版本选择

主流版本是 GNU Emacs,当前最新稳定版为 29.x。避免使用过旧的系统自带版本,建议从 GNU官网 或包管理器安装最新版。对于 Windows 用户,可直接下载官方安装程序;macOS 推荐通过 Homebrew 或 Emacs For Mac OS X 安装;Linux 发行版通常提供较新的包。

安装与初次启动

各平台安装方法

  • Windows:前往 https://www.gnu.org/software/emacs/download.html 下载 .exe 安装器,按提示安装。建议勾选“添加 Emacs/bin 到 PATH”。
  • macOS
    brew install --cask emacs
    
    或使用 Emacs for Mac OS X
  • Linux (Debian/Ubuntu)
    sudo apt install emacs
    
    如需更接近上游的版本,可添加 ppa:kelleyk/emacs 仓库。

安装完成后在终端输入 emacs 启动,初次启动可能会进入一个欢迎界面。建议在图形界面下学习,因为菜单栏和工具栏对新手更友好(终端内使用 emacs -nw 进入文本模式)。

初始界面解读

  • 菜单栏:顶部标准菜单,提供大部分命令的图形入口。
  • 工具栏:常用操作图标,可按需隐藏。
  • 模式行(Mode Line):底部倒数第二行,显示当前缓冲区名称、主模式、位置等信息。
  • 回显区(Echo Area):最底部一行,显示状态消息和输入的命令。

在图形界面中,你可以先用鼠标点击探索,但真正高效的操作依赖键盘快捷键。

Emacs 核心概念

为了流畅使用,必须先理解几个抽象概念:

  • 缓冲区(Buffer):内存中编辑的内容,一个文件打开后对应一个缓冲区,但缓冲区可以不对应任何文件(如 *scratch*)。所有编辑都在缓冲区中完成,保存时才写回文件。
  • 窗口(Window):屏幕上用于显示一个缓冲区的区域。可以分割出多个窗口,同时查看不同缓冲区。
  • 框架(Frame):通俗说就是操作系统级别的窗口,一个 Emacs 实例可以有多个框架。
  • 模式(Mode)
    • 主模式(Major Mode):每个缓冲区只有一个,决定编辑行为、缩进规则、语法高亮等,如 python-modeorg-mode
    • 副模式(Minor Mode):可选附加功能,可以同时激活多个,如行号显示 display-line-numbers-mode、拼写检查 flyspell-mode

基础操作:不再被按键“卡住”

按键约定

Emacs 教程中常用下列表示法:

  • C-x:按住 Ctrl 再按 x
  • M-x:按住 Meta(通常为 Alt 键)再按 x,若没有 Alt 键可用 Esc 后按 x
  • RET:回车键。
  • TAB:制表键。

放弃命令与退出

这两个操作是求生必备。

  • C-g:取消正在执行的命令(例如不小心输入一半的快捷键序列时救命)。
  • C-x C-c:退出 Emacs。若有未保存缓冲区,会询问。

移动光标

虽然方向键可用,但推荐掌握更高效的键位,让手保持在主键盘区。

  • C-f:前进一个字符(Forward)
  • C-b:后退一个字符(Backward)
  • C-n:下一行(Next)
  • C-p:上一行(Previous)
  • M-f:前进一个单词
  • M-b:后退一个单词
  • C-a:行首
  • C-e:行尾
  • M-a:句首
  • M-e:句尾
  • C-v:向下翻页(Page Down)
  • M-v:向上翻页(Page Up)
  • M-<:缓冲区开头
  • M->:缓冲区末尾

编辑与删除

  • C-d:删除光标后字符
  • Backspace(或 DEL):删除光标前字符
  • M-d:删除光标后单词
  • M-Backspace:删除光标前单词
  • C-k:删除从光标到行尾的内容(Kill)
  • M-k:删除到句尾
  • C-SPC:设置标记(开始选区),然后移动光标选择区域
  • C-w:剪切选中区域
  • M-w:复制选中区域
  • C-y:粘贴(Yank)
  • M-y:粘贴后再按可循环替换之前剪切的内容(历史粘贴)

撤销与重做

  • C-/C-x u:撤销。多次按下继续撤销。
  • C-gC-/:通常用于重做;更精确定义的“redo”可配合 undo-tree 包,后文介绍。

搜索与替换

  • C-s:增量向前搜索。输入字符即时跳转,再次 C-s 跳到下一匹配。RET 结束搜索。
  • C-r:增量向后搜索。
  • M-%:查询替换(Query Replace)。输入原字符串,按 RET,再输入新字符串,y 替换一处,n 跳过,! 全部替换。

使用内置帮助系统

Emacs 最强大的文档就是它自身。学会求助就能自学一切。

  • C-h t:启动交互式入门教程(强烈推荐花半小时完成)。
  • C-h k 按键:描述该按键绑定的命令及其功能。
  • C-h f 函数名:描述某函数(命令)的作用。
  • C-h v 变量名:描述某变量的值和文档。
  • C-h m:显示当前主模式和所有激活的副模式的帮助。
  • C-h ?:查看所有帮助相关命令。

配置你的 Emacs

初始化文件

Emacs 启动时会加载 ~/.emacs.d/init.el(早期版本可能使用 ~/.emacs)。所有自定义设置都写在这里,用 Elisp 语法组织。以下是初学者友好的配置示例:

;; 关闭工具栏和菜单栏(适应键盘操作)
(tool-bar-mode -1)
(menu-bar-mode -1)

;; 显示行号
(global-display-line-numbers-mode 1)

;; 高亮当前行
(global-hl-line-mode 1)

;; 关闭启动画面
(setq inhibit-startup-screen t)

;; 将 yes/no 显示为 y/n
(fset 'yes-or-no-p 'y-or-n-p)

;; 启用括号匹配高亮
(show-paren-mode 1)

;; 自定义主题
(load-theme 'tango-dark t)

修改后重启生效,也可以在缓冲区中执行 M-x eval-buffer 立即加载当前配置。

包管理器与 MELPA

内置的 package.el 可以连接 ELPA(Emacs Lisp Package Archive)和 MELPA 社区仓库。要启用 MELPA,将以下代码加入 init.el 顶部:

(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

之后执行:

  • M-x package-refresh-contents 刷新包列表。
  • M-x package-install RET package-name 安装包。

常用模式与工作流

Org mode:你的第二大脑

Org mode 是 Emacs 最著名的生产力模式,支持大纲笔记、任务管理、日程规划、表格计算、文学编程。

  • 新建文件并保存为 .org 扩展名,自动启用。
  • * 创建一级标题,** 二级标题,用 TAB 折叠展开。
  • - [ ] 创建待办事项,C-c C-t 切换状态(TODO -> DONE)。
  • C-c . 插入时间戳,用于计划。
  • C-c C-e 导出为 HTML/PDF/LaTeX 等多种格式。

Magit:Git 的终极界面

Magit 提供可视化、键盘驱动的 Git 客户端。 安装:M-x package-install RET magit 使用:M-x magit-status 进入 Magit 状态缓冲区。

  • s 暂存变更(Stage)
  • u 取消暂存
  • c 提交,再次 c 确认
  • P 推送(Push)
  • F 拉取(Pull)
  • l 查看日志

? 可随时显示当前上下文所有可用按键。

Dired:文件管理器

C-x d 打开 Dired 模式,在 Emacs 内管理文件。

  • RET 打开文件或进入目录
  • + 创建目录
  • C 复制
  • R 重命名/移动
  • D 删除
  • d 标记待删除,x 执行

Dired 允许批量重命名、操作远程文件(通过 TRAMP),非常灵活。

编程相关模式

Emacs 通过内置或第三方包提供强大的编程支持:

  • projectile:项目管理和路径导航。
  • company-mode:自动补全框架。
  • flycheck:实时语法检查。
  • eglot:内置 LSP(语言服务器协议)客户端,提供代码跳转、重构等功能。

配置示例(适合 Python 开发):

(add-hook 'python-mode-hook 'eglot-ensure)
(add-hook 'python-mode-hook 'flymake-mode)

进阶:初探 Emacs Lisp

即使不成为 Elisp 专家,了解一些基础知识能极大提升定制能力。

自定义快捷键

global-set-key 可以定义全局快捷键:

(global-set-key (kbd "C-c a") 'org-agenda)

这里 'org-agenda 是一个命令名。(kbd ...) 将易读字符串转为 Emacs 内部按键表示。

编写简单命令

defun 定义新命令:

(defun my-insert-timestamp ()
  "插入当前日期时间。"
  (interactive)
  (insert (format-time-string "%Y-%m-%d %H:%M")))

(interactive) 使得该函数可以被 M-x my-insert-timestamp 调用。然后将其绑定到快捷键:

(global-set-key (kbd "C-c t") 'my-insert-timestamp)

变量定制面面观

许多包通过 setqcustomize 接口提供配置。M-x customize-group 可以图形化发现大量可调选项,最终会将定制写入 init.el

常用第三方扩展推荐

  • which-key:按下前缀键后自动显示可能的后续命令,极大降低记忆负担。
  • ivy / helm:增强型补全和命令搜索框架,让 M-x 更智能。
  • avy:快速跳转到屏幕上任意可见位置。
  • undo-tree:可视化撤销树,再也不用担心丢失历史。
  • use-package:声明式包配置宏,让 init.el 更整洁。

学习资源与下一步

  • 内置教程C-h t,优先级最高。
  • Emacs Wiki:https://www.emacswiki.org/ ,海量用户贡献。
  • 官方手册C-h r 在 Emacs 内直接阅读。
  • 社区:Reddit 的 r/emacs、Stack Overflow 的 emacs 标签。
  • 书籍:《Mastering Emacs》(Mickey Petersen)、《Writing GNU Emacs Extensions》(Bob Glickstein)。

Emacs 的学习曲线可能陡峭,但每次掌握一个快捷键、安装一个包、写下一段配置,都让你离“编辑器即是环境”的理想更近一步。记住:从实际需求出发,一次学一点,不必追求全知全能。开始用 Org mode 记笔记,用 Magit 管理代码,用 Dired 整理文件,慢慢的,你会离不开它。