Doom Emacs 配置的核心思路是把所有定制收敛到 ~/.doom.d 目录下三个文件init.el 声明模块、config.el 写个人配置、packages.el 管理额外插件,配合 doom sync 命令完成依赖自动拉取和编译。
Doom Emacs 安装配置:从零搭建你的专属编辑器
上手 Doom Emacs 之前,先确认系统里已经装好基础工具,Emacs 版本建议在 27.1 以上,顺手装上 Git、ripgrep 和 fd,后两个工具负责文件搜索和内容检索,Doom 的很多命令都依赖它们,macOS 用户可以用 Homebrew 安装,Linux 发行版直接走包管理器,Windows 用户推荐在 WSL 里操作,可以避开不少路径和符号链接的坑。
克隆主仓库是第一步,把 Doom Emacs 放到 Emacs 默认配置目录:
git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.emacs.d
克隆完成后进入目录,执行安装命令:
~/.emacs.d/bin/doom install
这个命令会自动生成 ~/.doom.d 目录,并创建 init.el、config.el、packages.el 三个核心文件,如果之前已经有旧配置,建议先备份再操作,安装过程中会自动拉取一批依赖包,国内网络环境下可能会比较慢,可以先把 GitHub 访问问题解决掉,后面有专门章节讲国内源配置。
装完以后把 doom 命令加到 PATH 里,在 ~/.bashrc、~/.zshrc 或对应 shell 配置文件中加入:
export PATH="$HOME/.emacs.d/bin:$PATH"
这样后续在终端直接敲 doom 命令就行,不用每次输入完整路径,重启终端后可以跑一下 doom doctor 检查环境是否正常。
Doom Emacs 和 Spacemacs 对比:为什么选 Doom 的人越来越多
很多从 Spacemacs 转过来的用户会直接问这个对比问题,两者都是 Emacs 配置框架,目标也相似把零散配置整合成开箱即用的工具集,但路线差异很大。
先看配置结构,Spacemacs 用 layer 组织功能,每个 layer 是一组相关包和键位,Doom Emacs 用 module 管理,模块声明更简单,一行就能开启一个语言或工具集合:

lang python
:tools magit
:editor evil
再看启动速度,Doom Emacs 采用懒加载机制,多数模块在第一次真正使用时才加载,Spacemacs 默认加载的层较多,启动时间往往更长,多数情况下 Doom Emacs 的冷启动体验明显更利落。
包管理机制也不同,Doom 使用 straight.el 管理包,支持直接克隆 Git 仓库、锁定版本、重现代码环境,Spacemacs 主要依赖 package.el,包来源更传统,处理 Git 依赖相对繁琐。
| 对比维度 | Doom Emacs | Spacemacs |
|---|---|---|
| 配置入口 | ~/.doom.d 下三个文件 | ~/.spacemacs 单文件为主 |
| 模块声明 | doom! 宏,简短直观 | layer 列表,需了解命名规则 |
| 包管理器 | straight.el | package.el |
| 启动策略 | 懒加载为主 | 默认加载较多层 |
| 学习成本 | 初期更低,概念集中 | 需理解 layer 层级关系 |
行业共识认为,Doom Emacs 在当前 Emacs 配置框架中的启动速度和模块扩展性上已经形成明显优势,据 GitHub 公开信息,近年来其仓库活跃度和社区讨论量在同类项目中处于第一梯队。
Doom Emacs 怎么配置:核心文件与模块管理
Doom Emacs 的配置逻辑非常直白:在 init.el 里声明你想要什么,在 config.el 里写具体怎么调,在 packages.el 里加额外插件,三个文件各管一摊事,界限清楚。
init.el 声明模块
打开 ~/.doom.d/init.el,会看到 doom! 宏下面列着一堆模块,每一行代表一个类别。
doom! :completion
vertico
:ui
doom
doom-dashboard
:editor
evil
snippets
:lang
python
markdown
:tools
magit
修改完模块后必须跑 doom sync,Doom 会根据声明自动安装缺失包、生成编译缓存,这个命令是配置流程里的固定动作。

config.el 个性化定制
config.el 里使用 after! 宏针对某个模块或包做覆写,例如开启行号显示并更换一部分键位:
(after! doom
(setq display-line-numbers-type 'relative))
(after! evil
(setq evil-want-C-u-scroll t))
这里有个细节,不要把所有 setq 直接堆在 config.el 顶层,能放进 after! 的尽量放进去,加载顺序更可控,也不容易因为包还没加载就引用变量导致启动报错。
packages.el 管理额外插件
Doom 自带模块覆盖不了需求,就用 packages.el 添加外部包,格式很简单:
(package! cheatsheet)
(package! org-roam
:recipe (:host github :repo "org-roam/org-roam"))
加完再跑 doom sync,Doom 会自动拉取源码并编译。
主题切换实操
Doom Emacs 怎么配置主题也是高频需求,默认主题是 doom-one,在 config.el 中修改:
(setq doom-theme 'doom-one)
想要换官方其他主题,doom-dracula,直接改这个变量即可:
(setq doom-theme 'doom-dracula)
但前提是主题包已经加载,Doom 内置了一批主题,如果要用第三方主题,需要先在 packages.el 里声明对应的主题包,再在 config.el 中设置 doom-theme。
常用维护命令
- doom sync:同步模块、安装包、编译配置
- doom doctor:检查环境依赖,找出缺失工具
- doom upgrade:升级 Doom Emacs 本身
- doom purge:清理未使用的包和缓存
这几个命令组合起来就能覆盖日常维护,sync 和 doctor 就够应付八成场景。
Doom Emacs 国内源配置:让同步速度起飞
国内用户最头疼的无非是拉取 GitHub 仓库和 Elpa 源时的龟速,这个问题可以通过两边一起解决:一边改 Git 协议转发,一边换国内镜像。
Git 全局 URL 重写
在 ~/.gitconfig 中添加 URL 重写规则,让所有 GitHub 请求走加速前缀,选择一个当前可用的 GitHub 加速服务前缀,替换下面的示例地址:

[url "https://加速前缀/https://github.com/"]
insteadOf = https://github.com/
这样 Doom 内部用 straight.el 克隆 GitHub 仓库时会自动走加速通道,需要注意的是,不同加速服务稳定性不同,如果同步失败,可以换一个前缀再试。
Elpa 源镜像
Doom 大量使用 straight.el 直接拉 GitHub 源码,但部分包仍然会走 Elpa 源,在 init.el 或 config.el 中设置包源镜像即可,以清华镜像为例:
(setq package-archives
'(("melpa" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")
("gnu" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")))
如果使用 straight.el 时出现某些包拉取失败,也可以单独给 straight 设置协议和仓库路径,但多数情况下,Git URL 重写配合 Elpa 镜像已经能让同步时间大幅缩短。
Doom Emacs 常见问题快问快答
Doom Emacs 配置文件在哪?
主配置目录是 ~/.doom.d,init.el、config.el、packages.el 是最核心的三个文件,Windows WSL 用户注意,这个路径位于 Linux 子系统的家目录,不是 Windows 文件系统下的家目录。
Doom Emacs 怎么配置主题?
在 config.el 中设置 doom-theme 变量,(setq doom-theme ‘doom-one),保存后执行 doom sync,使用第三方主题前,需要先在 packages.el 中用 package! 声明主题包。
Doom Emacs 国内源配置有哪些推荐?
推荐通过 Git 全局 URL 重写加上 Elpa 镜像双管齐下,在 ~/.gitconfig 中配置 GitHub 加速转发,在 config.el 中设置清华或中科大包源镜像,多数情况下同步时间会从几十分钟缩短到几分钟,具体效果依赖网络环境和镜像服务状态。
把配置全部收敛到三个文件管理,保持 init.el 只声明、config.el 只定制、packages.el 只加包,Doom Emacs 就能长期保持可维护、可迁移,配置越简单,后期踩坑越少。
