以本地
ohmyzsh-master快照为对象,对 Oh My Zsh 的启动链、配置系统、插件/补全、主题、更新机制与扩展边界做一次工程化拆解。
🌐 GitHub Pages(MkDocs Material):https://hanqing.github.io/ohmyzsh-source-notes/
仓库地址:https://github.com/Hanqing/ohmyzsh-source-notes
Oh My Zsh 常被理解成“很多主题和插件的集合”,但源码真正提供的是一套很轻量的 shell 运行时:它接管 fpath、补全缓存、启动时加载顺序、更新检查和一组约定式扩展目录,然后把具体功能交给可组合的 .zsh 文件。
本教程沿着一次交互式 zsh 启动的时间线展开:
~/.zshrc
│
└── source $ZSH/oh-my-zsh.sh
├── 运行环境与路径解析
├── 更新检查与缓存目录
├── fpath + compinit/compaudit
├── lib/*.zsh
├── plugins=(...)
├── custom/*.zsh
└── $ZSH_THEME.zsh-theme
| 章节 | 主题 | 你会得到什么 |
|---|---|---|
| 01 | 项目全貌 | 目录职责、关键数字、设计取舍 |
| 02 | 启动链 | 从 .zshrc 到第一个 prompt 的完整时序 |
| 03 | 配置与优先级 | ZSH、ZSH_CUSTOM、zstyle 和覆盖规则 |
| 04 | 插件系统 | 插件发现、fpath 注入、别名隔离和加载顺序 |
| 05 | 补全系统 | compinit、compaudit、缓存与 _command |
| 06 | 主题与提示符 | theme 如何组合公共 prompt API 和 Git 状态 |
| 07 | lib/ 标准库 |
22 个运行时模块的分工与典型实现 |
| 08 | 更新与安装 | 安装脚本、更新状态机、锁与升级边界 |
| 09 | 扩展开发 | 如何写 custom plugin/theme,如何安全覆盖 |
| 10 | 安全、性能与诊断 | shell 加载的攻击面、启动性能和排障方法 |
本拆解基于 /Users/hanqing/CliX/ohmyzsh-master 的本地快照,快照本身不包含 .git 元数据,因此不会冒充某个精确 commit。文件中的行号是快照分析时的定位;文中链接默认指向 Oh My Zsh 官方仓库的 master 分支,随着上游演进可能发生漂移。
快照统计:约 1,089 个文件、320 个带 .plugin.zsh 的插件入口、90 个补全入口、142 个主题文件和 22 个 lib/*.zsh 运行时模块。数字用于帮助建立规模感,不等同于上游长期稳定的 API。
阅读源码时建议始终区分三层:
- zsh 本身的机制:
fpath、autoload、compinit、hook、zstyle、prompt expansion。 - Oh My Zsh 的编排约定:目录名、文件名、加载顺序、
ZSH_*变量。 - 插件或主题的业务内容:别名、函数、命令补全和 prompt 文本。
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
mkdocs serve浏览器打开 http://127.0.0.1:8000。生产构建使用:
mkdocs build --strict本拆解文档采用 CC BY-SA 4.0;Oh My Zsh 源码及其许可证归原项目所有。