带历史包袱的 zsh 默认起点
ohmyzsh/ohmyzsh 是长期维护的 zsh 配置社区框架。它给新 zsh 用户一套现成结构:安装器、更新工具、默认 .zshrc 模板、插件加载器、数百个内置插件、大量内置主题,以及围绕终端配置的 wiki 生态。
这种便利正是 Oh My Zsh 多年后仍排在 GitHub 前列的原因。它也是大多数取舍的来源。Oh My Zsh 会碰你的登录 shell,改写启动文件,把插件代码加载进每个交互式终端,并可能影响 prompt 延迟。它不只是好看的提示符。它会变成你每天命令环境的一部分。
真正的问题不是“Oh My Zsh 好不好”。对很多开发者来说,它确实有用。更好的问题是:你想要一个大型社区 zsh 框架,还是想要一套更小、每一行都能解释清楚的 prompt 和插件配置。
它给了你什么
核心价值是打包。Oh My Zsh 收集了一批原本需要自己拼装的 zsh 习惯:aliases、completions、prompt themes、helper functions、更新行为、自定义插件目录、自定义主题目录,以及内置插件的可读文档。
README 写明项目支持 macOS、Linux、FreeBSD、Android 和 WSL2。先修条件很普通:zsh、curl 或 wget、git。README 更偏好 zsh 5.0.8 或更新版本,虽然 zsh 4.3.9 也被列为可接受。安装后,用户通常编辑 ~/.zshrc 来选择主题并列出插件。
插件是主要吸引力。一个 plugins=(git docker ruby macos ...) 块就能带来 aliases、completions、helper functions 和 shell integrations。主题是可见层。有些内置主题需要 Powerline fonts 或 Nerd Fonts,README 也提醒:没有正确字体时,截图效果可能和本地显示不同。
它还有自定义覆盖模型。以 .zsh 结尾的文件可以放在 custom/ 下,自定义插件可以放在 custom/plugins/ 下,和内置插件同名的自定义插件会覆盖内置版本。这很有用,但也意味着长期使用后,配置可能长成一套私有 shell 框架。
可以安装,但先读脚本
README 给了三条主要安装路径:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
它也列出 https://install.ohmyz.sh/ 这个镜像,用于 raw.githubusercontent.com 被阻断的网络。更要紧的是命令表后面的内容:README 说,安装你还不了解的项目脚本前,最好先检查脚本。它建议先下载 tools/install.sh,读完后再运行 sh install.sh。
这个建议很重要,因为安装器会改变 shell 设置。README 说,已有 .zshrc 会被重命名为 .zshrc.pre-oh-my-zsh。如果旧文件里有 PATH exports、proxy settings、language managers、conda blocks、aliases 或 shell functions,你需要把仍然要用的部分迁移到新的 .zshrc。
README 也写了手动安装:把仓库 clone 到 ~/.oh-my-zsh,可选备份 ~/.zshrc,复制模板到 ~/.zshrc,再用 chsh -s $(which zsh) 改默认 shell。对不喜欢 pipe-to-shell 安装方式、或用 git 管理 dotfiles 的人来说,这条路更合适。
它容易咬人的地方
最大的第二天问题是启动和 prompt 性能。根因不一定是 Oh My Zsh。终端模拟器、Apple Git、主题代码、shell integration、插件数量和慢外部命令,都可能表现为“Oh My Zsh 很慢”。但项目处在热路径上,所以每次 prompt 变慢时,用户自然会先怀疑它。
issue 区能看到真实案例。2026 年有 macOS Tahoe 用户报告,在 curl 和 git 命令后 prompt 有数秒延迟。维护者没有直接猜测,而是要求 debug logs 和 trace logs。另一个围绕 jonathan 主题和 Ghostty 的问题里,有用户给出 patch,维护者让大家用 omz pr test 测试对应 pull request。
aliases 也是张力来源。贡献指南说,有些插件超过 100 个 aliases,而有些用户完全不想要 aliases。项目现在要求新增 alias 必须服务很多人、用于常见任务,并优先选择更通用的名称。README 也写了 zstyle 设置,可以跳过全部 aliases、lib aliases 或 plugin aliases,并且更具体的 scope 优先。
更新也要留意。默认情况下,Oh My Zsh 每两周提示检查更新。用户可以把 update mode 设为 auto、reminder 或 disabled,也能调频率。README 明确说旧的 unattended update flag 已移除,因为它有副作用。自动化场景应直接调用 $ZSH/tools/upgrade.sh。
谁适合用
如果你想快速得到熟悉的 zsh 环境,尤其是在 macOS 或 WSL2 上,Oh My Zsh 是很强的默认选项。当你想要常见 aliases 和 completions,又不想手工收集每个插件时,它很省事。团队里如果很多人都理解相同的插件名和 .zshrc 结构,它也容易沟通。
如果 shell 启动时间已经是问题,如果你希望每一行 shell config 都显式可控,或者你的终端设置由严格 dotfiles 仓库管理,它就没那么合适。此时更小的组件可能更好:Starship 这样的 prompt,Powerlevel10k 这样的专注主题,或者 zsh-users 里的单个插件。
先用 Oh My Zsh,再缩小配置,也很常见。很多开发者把它当学习脚手架:先安装,知道自己真正用哪些插件后,再迁移到更小的配置。
和附近 shell 项目对比
| Repository | Stars | Language | License | Best use |
|---|---|---|---|---|
| ohmyzsh/ohmyzsh | 187,925 | Shell | MIT | 带插件、主题、更新器和约定的完整 zsh 框架 |
| starship/starship | 58,257 | Rust | ISC | 不想要完整 zsh 框架时的快速跨 shell prompt |
| romkatv/powerlevel10k | 54,408 | Shell | MIT | 主要关心 prompt 体验的 zsh 用户 |
| fish-shell/fish-shell | 33,649 | Rust | NOASSERTION | 另一种 shell,而不是 zsh 框架 |
| zsh-users/zsh-autosuggestions | 35,673 | Shell | MIT | 只要一个 zsh 功能,不要整套框架 |
截至 2026-06,Oh My Zsh 的 stars 明显高于这些更聚焦的 zsh 组件。这不表示所有人都应该选最大那个。它表示 Oh My Zsh 是社区默认项。默认项的好处是文档、issues 和示例都多。默认项也会带着更多历史决定。
Star 曲线和维护信号
抽样 star-history 显示,它从 2009 年到 2016 年持续增长,之后直接跳到当前总量点。这个粒度不足以讲清每个阶段,但足以支撑一个耐久判断:Oh My Zsh 是长期默认项,不是短期终端热潮。仓库创建于 2009 年,2026 年 6 月仍有 push,并且有很大的 issues 和 pull requests 表面。
open issues 数也是信号。数百个 open issues 不自动代表没人维护。对一个覆盖许多插件、主题、操作系统、终端模拟器和用户 dotfiles 的 shell 框架来说,issue tracker 同时是支持队列、兼容性日志和 feature request 入口。应该按这个方式读它。
相关仓库
- sindresorhus/awesome 对应开发者工具里的 curated-list 模式。
- microsoft/vscode 因为很多终端和 shell 工作流发生在编辑器内部。
- apple/container 是另一个平台假设会影响使用体验的开发环境工具。
- anomalyco/opencode 和 voideditor/void 对应现代 coding-agent 工作流,它们同样依赖 shell 和 terminal ergonomics。
FAQ
用 curl pipe shell 安装 Oh My Zsh 安全吗?
README 给了 curl、wget 和 fetch 安装命令,但也建议手动检查。先下载 tools/install.sh,读完后再运行。比起盲目把任何安装脚本 pipe 进 sh,这更稳妥。
我的旧 .zshrc 会怎样?
README 说,已有 .zshrc 会被重命名为 .zshrc.pre-oh-my-zsh。安装后,把还需要的 PATH exports、language-manager blocks、aliases、functions 或 proxy settings 迁移到新的 .zshrc。
为什么 Oh My Zsh 变慢?
原因可能是 Oh My Zsh、主题、插件、git status、终端 integration 或操作系统问题。先减少插件,换回默认主题,检查外部命令;如果要报 issue,按项目 troubleshooting 日志流程提供信息。
应该用 Oh My Zsh 还是 Starship?
想要 zsh 框架、插件、主题、更新行为和约定,用 Oh My Zsh。主要想要快速跨 shell prompt,并且愿意单独管理 zsh 插件,用 Starship。
怎么禁用 Oh My Zsh aliases?
README 写了 zstyle 设置,可以跳过全部 aliases、只跳过 lib aliases、或只跳过 plugin aliases。把这些设置放在 ~/.zshrc 里,并确保它们出现在 Oh My Zsh 加载之前。
怎么更新 Oh My Zsh?
交互使用可以运行 omz update。自动化场景下,README 建议直接调用 $ZSH/tools/upgrade.sh。它也说明旧的 unattended update flag 已移除,因为它有副作用。