文章的 TOC 太多了,看起来不方便?PC 端可以看看我的 《两个 TamperMonkey 脚本,解决掘金阅读体验的三点不爽》,可以解决一些掘金阅读体验问题。
我写的「入坑」系列文章:
- 《入坑 Mac,看这一篇就够了》
- 《入坑 iTerm + OMZ,看这一篇就够了》← 本文
- 《入坑 Firefox Developer Edition 及 Mobile 版,看这一篇就够了》
- 《入坑 WebStorm,看这一篇就够了》
- 《入坑 VSCode,看这一篇就够了》
- 《入坑 Vim,看这一篇就够了》
- 《入坑 Git,看这一篇就够了》
- 《入坑 Docusaurus,看这一篇就够了》
🎼 前言
跟着本文章节,一步一步操作(设置、插件、快捷键等),你可以将 iTerm 搭配 OMZ 打造成又美又酷的提效神器,更可以了解一些在终端的提效装 B 小技巧。
入坑 iTerm + OMZ,看这一篇就够了。
作为开发人员,使用命令行工具 CLI,不仅可以提升效率,更是逼格的体现。
有一款得心应手的终端软件,并且知道怎么玩是很有必要的。
iTerm + OMZ 搭配好的话,你会拍大腿:相见恨晚。
TL;DR
iTerm 和 OMZ 必要的设置,让其成为你理想中的 Terminal,提效装 B 两不误。
最最推荐:
- 必装主题:
p10k - 必装插件:
z、autosuggestions、syntax-highlighting - 必装软件:
fig(也可以认为它是一个插件) - 必装 CLI:
tig
主要内容

适合读者
- Mac 用户
- 用系统或软件自带 Terminal 的用户:用 iTerm
- iTerm 小白用户:安装配置 iTerm + OMZ 是我根据实际操作做的记录,跟着这几个章节操作下来,一定能够把你的 iTerm 配置到一个好看好用的状态;另外你可以学到不少提效和装 B 小技巧
- iTerm 深度用户:交流学习,批评指正
你将获得
- iTerm 和 OMZ 如何一步一步设置才能让它又美又酷又好用
- 快捷键和其他提效技巧
- 非常好用的 CLI 工具推荐
历史
| 日期 | 版本说明 |
|---|---|
| 2023/09/02 | V2,由《玩转...》重命名为《入坑...》 |
| 2023/08/13 | V1 |
🧠 基础知识
Before we start...来了解一些基础知识吧。
Shell
我们知道,计算机的核心是操作系统,而操作系统的核心是它的内核(kernel)。
跟差不多所有的「核」一样,内核有一层「壳」,英文就是 shell。用户想要跟系统交互,就必须经过这层壳,于是 shell 就慢慢成了内核与用户交互的脚本语言的总称。
常见的 Shell 有:
你可以:
- 敲命令
echo $SHELL查看当前用的是哪个 Shell - 敲命令
cat /etc/shells可以查看其他可用 Shell

自 macOS Catalina 起,Apple 将 默认 shell 从 bash 改成了 zsh。不过,也有可能(估计是公司的系统镜像问题)预设是 bash,会有提示:

bash的提示符是$,zsh是%。
如果你想试一下别的 shell,直接敲其名字即可,如果你想永久改成某 shell,可以 chsh -s /bin/<name>。
终端
以上说了,「shell」是语言层面的概念,可以说是一个解释器,很抽象,而「终端」则是一个具象的概念,是一个软件,用以接受 shell 指令,并将结果回显给用户。
终端就更多了,Mac / Linux 自带的 Terminal 就是。一般自带的都无法满足刁钻的口味,不然就不会有这么多更好用更好看的替代品了:
| Terminal | 亮点 | 缺点 | 截图 |
|---|---|---|---|
| iTerm | 配置项丰富、状态栏小组件 | 初始状态简陋,需要配置很多 | ![]() |
| Warp | Warp AI(强烈推荐)、团队协作、提示丰富、便捷操作多、区块展示、多点编辑、命令面板 | 需注册登录(不麻烦)、配置项不够丰富 | ![]() |
| Hyper | - | 没有图形界面的偏好设置、除了图标好看,别的几乎都不好看 | ![]() |
| Tabby | 开源、跨平台、Web 版、好看 | - | ![]() |
| Electerm | - | - | ![]() |
| Royal TSX | 跨平台、主攻 SSH | 免费版 + 收费版 | ![]() |
| Termius | 主攻 SSH | 免费版 + 收费版 | ![]() |
| kitty | - | - | |
| WezTerm | - | - | |
| Alacritty | 简单用了一下,没什么亮点 | 没有配置界面 | |
| Starship | 快(基于 Rust)、功能丰富、跨平台 | - |
我选择 iTerm,一来比较熟,二来够用,三来配置项足够丰富,四来原生 ssh 命令对我来说已经够用,五不然我写这篇干啥。
另外,🔥 强烈推荐 Warp,虽然需要注册登录,但不麻烦,关键是它有 Warp AI,每日免费 20 问。点击我的 推荐链接,给个 AI 截图:

Warp 开箱自带了很多在 iTerm 上需要配置或插件才能用的能力,比如自然编辑、命令提示,而且它的主题配色柔和,又不像 iTerm,经常有些字体会看不见,自定义主题只需要一张图,即可按照图的色调制作出完美的主题。我用了几天 Warp 之后,已经感觉有些想对 iTerm 「出轨」了 🔞。
CLI & TUI
使用 Terminal,你一定会听说一些概念,比如 CLI,以及 TUI。
- CLI = Command-Line Interface
- TUI = Text-based User Interface(或者也可以理解为 Terminal User Interface)
TUI 也可以认为是一种特殊的 CLI,毕竟它需要通过命令行的形式触发,但它比普通的 CLI 具有更强大的能力,且更易上手。
有人收藏了一堆 TUI,有浏览器、编辑器、开发工具、游戏等等,推荐去淘一淘 github.com/rothgar/awe…,我在文章后面也推荐了一些我常用的 TUI 工具。
Powerline / Nerd 字体

自定义的 Prompt 的样式需要特殊的字体:Powerline Font。未设置的情况,通常会显示成带方框的问号,iTerm 自带有 Powerline 字体,在 Settings → Profiles → Text → Text Rendering 下勾选「Use built-in Powerline glyphs」即可(但效果可能没有自己装 Nerd Font 好):
Powerline Fonts 是一个字体集,本质是对一些现有的字体打 Patch,把 Powerline Icon 字符添加到这些现有的字体里去(原理类似 Icon Font)。
但 Powerline Font 只管 Powerline 需要的字体,如果你用 Vim,肯定知道 NERDTree 这个插件,它需要文件夹和各种类型的文件图标,Powerline 就不够用了,而需要 Nerd Font。
Nerd Font 的图标涵盖了 Powerline Font。
可以自行选择喜欢的字体,尽量不要用以 Mono 结尾的字体(比如,用 JetbrainsMono Nerd Font,而不是 ),JetbrainsMono Nerd Font MonoXx... Mono 渲染的图标偏小,不和谐。
所有的 Nerd Font 支持 nvim tree 的图标。
💻 安装 / 配置 iTerm
📦 安装 iTerm
下载安装,或者命令行 brew install --cask iterm (个人很少用 brew cask),安装后初始态打开长这样,比原生 Terminal 并没有好看多少:

🚦 启动 / 退出
恢复上次窗口
Settings → General → Startup 下可能有个刺眼的黄色警告,消灭它后可以在打开时恢复上次关闭时的窗口状态。

可能它的提示的配置路径是老一些的系统下的,在 iTerm 3.4.20 下无法直接对应到准确的配置路径,在我的《入坑 Mac》调教全局窗口行为一节 有提到。

设置完成后,重启 iTerm 效果:

调优关闭提示
此时关闭 iTerm 会被提示,很不丝滑,毕竟当前并没有任何进程,按 ⌘Q 的目的已经很明确了,但被拦一道就是很不爽:

Preferences → General → Closing:
- 取消勾选「Confirm closing multiple sessions」
- 取消勾选「Confirm "Quit iTerm2 (⌘Q)"」

但这样又有一个新的问题,如果有进程还在运行,比如开发的时候开了 Dev Server,或者有个更重要的长时任务正在进行,会引起误关。我们希望这种情况下,按 ⌘Q 可以有提示。
该配置藏在 Preferences → Profiles → Session → Closing 下:
- 将「Prompt before closing」改为「If there are jobs besides:」
- 点击 + 号添加「zsh」(不然可能经常碰到阻碍)

这样设置之后,⌘Q 将丝般顺滑,注意需要为每个 Profile 单独作设置。
💄 长相
接下来我们给它整整容。
窗口大小
首先不满意的是窗口大小,虽然以后基本都是全屏模式,但默认大小和样式也得些微调教一下:
Preferences → Profiles → Window,将默认 80x25 的大小改成 114x28:

窗口样式

Preferences → Appearance → General:
- Theme 改为「Minimal」
- Status bar location 改为「Bottom」,目前还用不到
改完后长这样(相较于之前更酷一些):

分屏样式
由于之前选的 Minimal 主题,因此后边的 Windows 不需要调整,一般我不用也不推荐你以 Tab 的形式使用 iTerm,因此 Tabs 选项卡下也不需要调整。
Preferences → Appearance → Panes:
- 取消勾选「Show per-pane title bar with split panes」
- 取消勾选「Separate background images per pane」,后面要设一个性感一点的背景图

改完后的效果(分屏):

全屏 + 背景图
Preferences → Profiles → Window:
- 修改「Settings for New Windows」下「Style」为「Full Screen」
- 启用背景图,并选一张喜欢的性感的图作为背景,图片的整体颜色尽可能暗色系
- 按实际情况修改模式
- 调整图片混合比例
配置与效果如下:

注意,iTerm 不会复制背景图,只是路径引用,所以不要重命名、移动或删除背景图原文件。
字体
Preferences → Profiles → Text 下,推荐设置如下:
- 「Use thin strokes for anti-aliased text」由「On Retina Displays」改为「Always」,否则在外接显示器上(非 4K)可能显示得不那么精致
- 选择一款自己喜欢的字体
我曾经非常喜欢 Operator Mono 这款字体,可惜它的 Nerd 版并不好用。 后边我会用 Nerd Font,所以字体可以暂时不设。
默认字体 v.s.「Operator Mono」效果对比(推荐 Operator Mono Book 13px,比 Monaco 字体略大):

颜色主题
Preferences → Profiles → Color Presets... 下拉菜单,点击「Visit Online Gallery」,下载主题包,解压后使用菜单「Import...」选择「schemes」目录下的文件进行安装(你可以全部安装,但删除主题不是很便利,也可以选择性地安装某些个):

推荐:
- 暗色模式
- FirefoxDev ← 我常用
- Rebecca
- Dracula
- Grape
- MaterialDarker
- OceanicMaterial
- 亮色模式
- Github
- Novel
- Material
- Man Page
关闭小三角标记
可能大概也是 3.5 版本出的新 Feature 吧,可以看到每个 Prompt 前边都有个小三角,不知道它是干什么的,但又不想不注意到它都不行:
我反正挺烦这玩意儿的。搜「mark」,在 Preferences → Profile → Terminal → Shell Integrition 把「Show mark indicators」关掉即可:
🚖 便利性
开启自然编辑
推荐设置
你或许已经习惯了操作系统在文字编辑上提供的便捷,方向键、Delete 搭配 Cmd、Shift、Alt 等辅助键能够极大地帮助我们提升文字编辑的幸福感。
Warp 天然就支持这种更人性化的文字编辑方式。你因发现 iTerm 下不能这么做而略感沮丧?其实不必,简单设置一下,Preferences → Profile → Keys → Key Mappings,选择 Presets 下的「Natural Text Editing」即可:
Terminal 原生支持的快捷编辑比如 ⌃U(删除整行)、⌃W(向前删除到词首)等不受影响。
自动获得焦点
Preferences → Pointer,勾选「Focus follows mouse」,这样,鼠标在滑动到某个 Pane 之后便会自动获得焦点,省去多点击一次的麻烦。

使用前次工作路径
分屏或新开 Tab,保持工作路径在刚刚工作的路径(这是 Warp 的默认设置),在 Settings → Profiles → General → Working Directory,选择「Reuse previous session's directory」:
状态栏
状态栏默认在顶部,之前已经改成放在底部了。配置项有些难找,在 Preferences → Profiles → Session 下:
- 勾选「Status bar enabled」
- 点击「Configure Status Bar」进行配置

拖拽和配置你想要的状态栏小组件:

效果:

Command Selection
升级到 3.5 版本后,会发现有个明显的新功能,就是一个命令及其输出,能够被选中(很有可能借鉴自 Warp)。这在其 1000 多行的 CHANGELOG 中排在 Top3:
You can click a command to select it. Search, Filter, and Select All will then be restricted to the selected command. You can disable this feature in Settings > General > Selection.
原本这是一个很好的功能,奈何细节没有像 Warp 那样自然:
每行命令前都会出现一个小三角,跟主题可能不搭这好像跟 Command Selection 是否关闭无关未选中的区域丢了背景图最近已经修复了这个问题- 多个 Pane 中的 Selection 会共存,按理跟焦点的行为类似,应该是全局的
- 未选中的区域还是太突兀了

所以,我暂时禁用了它(Settings → General → Selection 下):

👻 Guake 模式
有的人会很喜欢 Guake 模式,个人不是很常用,但却是一门装逼利器。
通过以下步骤,可以让 iTerm 模拟 Guake 模式:
- 新建 Profile,给个名字,比如就叫「Guake」

- Window 面板:调整透明度、模糊度,并选择 「Style」 为「Full-Width Bottom of Screen」(个人喜好)或「Full-Width Top of Screen」(标准 Guake 位置)

- Keys 面板:启用快捷键呼出,我设的是 ⇧⌘F12

- Session 面板:取消状态栏,让它看起来更纯粹
- Colors 面板:可以选一个别的颜色 Preset,比如「Ubuntu」
效果:

Guake 模式在某些全屏应用界面下好像不会出现,尚未知道如何调。
🫥 隐藏设置
除了通过设置面板之外,你还可以通过命令行调整 iTerm 的一些隐藏默认选项,参考它的 官文 - Hidden Settings。
😱 安装 / 配置 OMZ
重头戏来咯。
不搭配 oh-my-zsh (以下简称 OMZ)的 iTerm 是没有灵魂的。
安装 OMZ 的理由有很多:
- 对色彩的支持似乎更好
- 只需要路径,不需要
cd即可跳转到相应的路径,更人性化 - 自带了很多命令别名,可大大提效,敲命令
alias可以查看所有别名 - 强大且丰富的插件
📦 安装 OMZ
从官网找 安装方法,或者用下面的命令:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
遇到报错「curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 21 ms: Couldn't connect to server」,简单的办法就是在 URL 前拼上 https://mirror.ghproxy.com/:
sh -c "$(curl -fsSL https://mirror.ghproxy.com/https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
装完后长这样:
- 命令提示精简了不少,也美观了
- 小试牛刀,输入命令
l(ls -lah的别名),十分常用 - 文件和目录变得有颜色了

🎓 基础知识
首先,我们需要知道该如何 自定义 OMZ,大致知道以下几点即可:
- OMZ 在本地其实就是一个 git 仓库
~/.oh-my-zsh ~/.zshrc是总的配置文件- 由于是 git 仓库,我们只碰被它设置为 ignore 的部分即可避免冲突,
$ZSH_CUSTOM,即/.oh-my-zsh/custom在.gitignore中,是给用户放置自定义插件、主题的地方 - OMZ 的主题不是色彩主题,而是命令行状态栏的展示风格
- 很多主题需要安装 Powerline 字体,否则会有乱码
在 iTerm 配置项 Preferences → Profiles → Text 下设置 Non-ASCII Font 为 Powerline 字体(或 Nerd 字体),注意可能需要调整字体的大小。
OMZ 的主题多到它不得不强调「不要给我提交主题」:
(Don’t) Send us your theme! (for now)
We have enough themes for the time being. Please fork the project and add on in there, you can let people know how to grab it from there.
具体有多少主题,每个主题长什么样,可以去下面看:
没有必要一个个试过来,我推荐两个,自带的 agnoster,和三方的 p10k,目前我用的是 p10k。
🎭 推荐主题 - agnoster
OMZ 默认的主题是 robbyrussell,长这样:

更多人喜欢 agnoster,需要安装 Powerline 字体。
我用了很久 agnoster,却在邂逅 powerlevel10k(后文简称 p10k)后立即「移情别恋」,可以跳过这一章节直接看 p10k 的设置。
修改主题
ZSH_THEME="agnoster"
不经过任何调整,agnoster 长这样:

配置 Powerline / Nerd 字体
问号说明缺少字体,去 Nerd Fonts 下几个,推荐 MesloLGS Nerd Font、SauseCode Nerd Font 或 iMWritingMono Nerd Font。安装后,如下设置字体:
- 勾选「Use a different font for non-ASCII text」
- 选择一款 Nerd Font
- 由于不同的字体大小基数不一,可能需要调整字体大小
- 也可以不用勾选「different」,直接设默认字体

效果:

修改命令行 Prompt
这样的展示太啰嗦,机器名、路径什么的,不需要关心,这些自定义需要编辑主题文件,有两种方式:
- 直接编辑
$ZSH/themes/agnoster.zsh-theme:本地 git 永远是脏的,也可能在升级时产生冲突(很少) - 副本修改,
cp $ZSH/themes/agnoster.zsh-theme $ZSH_CUSTOM/themes/:git 干净且不会产生冲突,但享受不到升级
去除用户名、机器名
将 prompt_context 方法下的内容注释掉即可:
prompt_context() {
# if [[ "$USERNAME" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
# prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m"
# fi
}
当前路径仅保留最末一级目录名
prompt_dir() {
# prompt_segment blue $CURRENT_FG '%~'
prompt_segment blue $CURRENT_FG '%c'
}
效果对比(分支名变黄了是因为 git 被我弄脏了的缘故):

🐡 推荐主题 - p10k
powerlevel10k 是一款极其有质感的主题(以下简称 p10k),开箱即用,有很棒的逐步设置向导,五星推荐。
安装
执行 官文 中的安装命令即可完成安装:
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
然后修改 ~/.zshrc 下设置 ZSH_THEME="powerlevel10k/powerlevel10k",执行 zsh 命令,它会提示你进行初始化,会帮你下载所需的字体(可能失败,也可以跳过,自行下载安装),完成后会提示你重启和执行 p10k configure,通过一步一步的向导引导你初步达成自己想要的行为和展示。
P10k 官方推荐字体为 MesloLGS NF,注意不是官方的 Nerd Font。
如果向导推荐的字体下载失败,可以用 https://mirror.ghproxy.com 手动下载 mirror.ghproxy.com/https://raw…,也可以在 github.com/kalaschnik/… 下载,安装字体后自行在 Profile 下设置。
这是我根据它的向导,最后出来的效果:

配置项字段说明
p10k 的配置项在 ~/.p10k.zsh,我们可以用它做更多的自定义。
配置项一般命名为 POWERLEVEL9K_{对象}_{属性后缀}(可见代码命名中带上版本号是一种很难搞定的设计错误):
- 对象(很多)
- 重要属性后缀
BACKGROUND背景色,三位数字表示FOREGROUND文字色,三位数字表示ICON图标VISUAL_IDENTIFIER_EXPANSION还是图标CONTENT_EXPANSION好像也是图标- 还有很多
如果需要改颜色,可以根据喜好从 000-255 之间进行选择(可以使用命令 for code ({000..255}) print -P -- "%F{$code}Code = $code%f" 预览每个代码的色值)。
如果需要改图标,可以在 www.nerdfonts.com/cheat-sheet 找相应的图标的 Code。
调校当前路径
尚未找到永远仅展示最末一级目录的方法。
还是有路径过长的问题。
# typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false
typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER="last"

但不是仅展示最近目录名,而是跟当前所在路径下的某些文件有关,比如以上因为 .oh-my-zsh 下有 package.json 故以它为根。
分支图标
配置向导中我选了「少图标」,但 git 分支,我还是希望可以有个图标:
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\UE0A0 '

奇怪的展示

在分支名末有个星号加数字,一直去不掉,挺烦人的,查了好久才知道,它原来是 git stash 的个数,一下就觉得它不烦人了。
🐌 为其他 Terminal 设置字体
虽然 iTerm 已经看起来很美了,但偶尔会用到的系统或其他软件自带的 Terminal 依然还是挺丑的,需要至少修改一下字体。
系统 Terminal
图标还是展示成问号,已改 Profile 为 Pro:

调整对应的 Profile 下字体:

但效果总归没有 iTerm 下看着舒服:

WebStorm Terminal
WebStorm 或其他 JB 产品的 Terminal,有乱码:

可以在 Settings → Editor → Color Scheme → Console Font 下设置:

VS Code Terminal
VS Code 也需要额外设置 Powerline,否则就长这样:

设置搜素「terminal font」,修改为「MesloLGS NF Regular」:

设置后(依然有缺陷,分支图标展示不出来):

🧩 推荐插件
OMZ 自带了一堆插件,按需开启,在 .zshrc 中的 plugins 中添加需要的插件;除了 OMZ 自带的插件之外,还有很多优秀的三方插件(强烈建议收编掉啊)。
plugins=(plugin1 plugin2)
插件虽妙,但也不要贪多,最常用的就行,否则会影响性能。
官文中提到的注意事项,ZSH 数组以空格分割,不是逗号。 NOTE: elements in zsh arrays are separated by whitespace (spaces, tabs, newlines...). DO NOT use commas.
以下是我常用的插件。
fig ★★★★★ 现已成为 Amazon Q

- URL:amazon-q
https://fig.io - 推荐指数:★★★★★
- 推荐理由:IDE 式的自动补全能力,唯一不满意的是需要安装 App,实际并不是一个独立应用:「Fig isn't a standalone terminal. We integrate with the tools that you already use.」
- 安装:三方插件,需下载并安装 App,后按照提示登录和设置(它会自己改
.zshrc)
Fig 被 AWS 收购后,先成为了 CodeWhisperer 的捆绑物,后面又成了「Amazon Q」。
然而,很不幸的是,Fig 被 AWS 收购了,与它们的 CodeWhisperer 绑在了一起。可能 CodeWhisperer 没多少人气的关系吧,AWS 决定 Fig 于 2024/09/01 下线,并且 Fig 已经停止新用户注册,并且升级提示全面铺开,以此期望收编 Fig 的存量用户。而 CodeWhisperer 的问题在于它要 FQ 下载和登录,真怕又将是一个被资本毁掉了的好产品 💔。



在被升级骚扰了几个月后,我终于尝试了升级,虽然注册登录页加载很慢,但最后总算是成功升级并登录了,目前看尚可:

git ★★★★☆

- URL:github.com/ohmyzsh/ohm…
- 推荐指数:★★★★☆
- 推荐理由:常用 git 便捷命令,提效必备
- 安装:唯一自带的插件,默认就有
plugins=(git)
git-auto-fetch ★★★★☆
- URL:github.com/ohmyzsh/ohm…
- 推荐指数:★★★★☆
- 推荐理由:自动 fetch,搭配 p10k 的展示,项目更新一目了然,不必等到最后要提交的时候碰到更多的冲突才后悔
- 安装:
plugins=(... git-auto-fetch)
z ★★★★★

- URL:github.com/ohmyzsh/ohm…
- 推荐指数:★★★★★
- 推荐理由:OMZ 省掉了
cd已经是极大的便利,而z则更进一步,它就像一个任意门,任何你之前进入过的目录,只要一个关键字,z一下就跳过去了,提效神器 - 安装:
plugins=(... z)
autojump ★★★★☆
- URL:github.com/ohmyzsh/ohm…
- 推荐指数:★★★★☆
- 推荐理由:还是目录跳转提效神器,功能和
z类似,可以使用autojump --purge清理掉已经不存在的路径记录 - 安装:
plugins=(... autojump),需要额外 安装 autojump,才可以用j命令
z和autojump可以同时存在,但两者功能相同,只启用其中一个即可,我目前的选择已经从j改成了z。
autosuggestions ★★★★★

- URL:github.com/zsh-users/z…
- 推荐指数:★★★★★
- 推荐理由:类似 FishShell 的基于操作历史的提示和自动补全,但有可能造成黏贴长文本卡住(因为它加了文字动效);虽已有 fig,它还是有必要,很多时候,基于历史的补全更方便
- 安装:三方插件,clone 到
$ZSH_CUSTOM/plugins后加入列表plugins=(... zsh-autosuggestions),安装说明
syntax-highlighting ★★★★★

- URL:github.com/zsh-users/z…
- 推荐指数:★★★★★
- 推荐理由:绿色、红色,命令是否敲对提前知晓
- 安装:三方插件,
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlightingclone 到$ZSH_CUSTOM/plugins后加入列表plugins=(... zsh-syntax-highlighting),安装说明
you-should-use ★★★★☆
- URL:github.com/MichaelAqui…
- 推荐指数:★★★★☆
- 推荐理由:工具是最好的老师,它可以教你如何更高效地输入命令(You should use you-should-use.)
- 安装:三方插件,
git clone https://github.com/MichaelAquilina/zsh-you-should-use.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/you-should-useclone 到$ZSH_CUSTOM/plugins后加入列表plugins=(... you-should-use),安装说明
这个插件启用后,有一点会比较烦,就是它会不断提醒你已经很短的 git 还有个短名 g。如果你像我一样,喜欢敲 git,嫌这个提醒烦的话可以在 .zshrc 里的 source $ZSH/oh-my-zsh.sh 下方添加一行 unalias g:
source $ZSH/oh-my-zsh.sh
+unalias g
colored-man-pages ★★★☆

- URL:github.com/ohmyzsh/ohm…
- 推荐指数:★★★☆
- 推荐理由:色色的 man 才是真正的 man
- 安装:
plugins=(... colored-man-pages)
😎 必装 CLI:提效
有很多很棒的提效神器,也有很多很酷的装 B 神器,这里列举了一些我常用的。
🍺 homebrew ★★★★★
- URL:brew.sh
- 推荐指数:★★★★★
- 推荐理由:必装,无需多说
- 安装:参见官网
如果官方安装命令报错「/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"」,有以下两个方法:
第一个方法,使用 https://mirror.ghproxy.com/:
/bin/bash -c "$(curl -fsSL https://mirror.ghproxy.com/https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
注意安装后的提示:

第二个方法:使用国内源,见 gitee.com/cunkai/Home…。
以上两种方法均亲测有效。
目前仅仅是安装 homebrew 本身可能需要绕路,安装 formulae 不需要。
🦇 bat ★★★★

- URL:github.com/sharkdp/bat
- 推荐指数:★★★★
- 推荐理由:带行号、语法高亮的
cat,集成了 git 状态展示 - 安装:
brew install bat
🧮 cloc ★★★★☆

- URL:github.com/AlDanial/cl…
- 推荐指数:★★★★☆
- 推荐理由:快速查看项目代码量
- 安装:
brew install cloc
🌴 tree ★★★☆

- URL:mama.indstate.edu/users/ice/t…
- 推荐指数:★★★☆
- 推荐理由:查看文件树,写 Markdown 时如果需要文件结构,就需要用到它
- 安装:
brew install tree
🗿 eza ★★★☆
- URL:eza.rocks
- 推荐指数:★★★☆
- 推荐理由:色色的
ls,还有tree能力 - 安装:
brew install eza
🌲 broot ★★★☆

- URL:github.com/Canop/broot
- 推荐指数:★★★☆
- 推荐理由:类似 tree,但比 tree 强大
- 安装:
brew install broot
😍 超神 TUI:Play B
🐅 tig ★★★★★

- URL:jonas.github.io/tig
- 推荐指数:★★★★★
- 推荐理由:超级漂亮的文字版 git UI,看 git 历史记录常用,也是装逼利器
- 安装:
brew install tig
🌔 mc ★★★★☆

- URL:midnight-commander.org
- 推荐指数:★★★★☆
- 推荐理由:文字版的 TotalCommander,用的不多,但功能过于强大,装逼必备
- 安装:
brew install midnight-commander
如果启动慢(可能卡 2-4 秒),可以带上参数:
mc --nosubshell。
👙 htop ★★★☆

- URL:htop.dev
- 推荐指数:★★★☆
- 推荐理由:比自带的
top看起来炫酷很多 - 安装:
brew install htop
🚁 btop ★★★★★
- URL:github.com/aristocrato…
- 推荐指数:★★★★★
- 推荐理由:
top界兰博基尼 - 安装:
brew install btop
🪮 zellij ★★★

- URL:zellij.dev
- 推荐指数:★★★
- 推荐理由:强到我不知道怎么用 😂
- 安装:
brew install zellij - 用法:看 文档 学习一下
🔗 lynx ★★★

- URL:invisible-island.net/lynx
- 推荐指数:★★★
- 推荐理由:文字版网页浏览器,还有一个叫
links的据说也不错 - 安装:
brew install lynx - 用法:
lynx <url>如lynx https://www.bing.com
🦾 posting ★★★
较新,尚未支持 brew,观望中
- URL:github.com/darrenburns…
- 推荐指数:★★★
- 推荐理由:文字版 PostMan,界面很酷
- 安装:
pipx install posting - 用法:
posting --collection path/to/collection
⌨️ 快捷键
自定义
刚好系统设置的时候,我把默认显示帮助菜单快捷键从 ⇧⌘/ 改成了 ⇧⌘H,不巧和 iTerm 默认的「Open Paste History...」快捷键冲突了,而这个功能偏偏还挺实用:


正好用来演示如何自定义快捷键,在 Preferences → Keys → Key Bindings 下添加:
- 点击 + 号
- 选择 Action 为「Select Menu Item...」
- 选择「Open Paste History...」
- 设置快捷键为 ⇧⌘|

常用快捷键 - 系统 Terminal
系统原生快捷键,可以被 iTerm 等继承或覆盖。
| 快捷键 | 分类 | 说明 |
|---|---|---|
| ⌃A / fn← | 移动光标 | 至行首 |
| ⌃E / fn→ | 移动光标 | 至行末 |
| ⎋B | 移动光标 | 向左一个单词,移动完要放开 ESC 和 B 键 |
| ⎋F | 移动光标 | 向右一个单词,移动完要放开 ESC 和 F 键 |
| ⌃B | 移动光标 | 向左一个字符(等同于 ←) |
| ⌃F | 移动光标 | 向右一个字符(等同于 →) |
| ⌃D | 删除 | 光标处的字符 |
| ⌃W | 删除 | 从光标处往前删除一个单词 |
| ⌃K | 删除 | 从光标处至行末 |
| ⌃U | 删除 | 删除一整行 |
| ⌃Y | 黏贴 | 粘贴之前删除(⌃D、⌃W、⌃K、⌃U),存入 Buffer 的内容 |
| ⌃R | 历史 | 搜索使用过的命令 |
| ⌃- | 历史 | Undo |
| ⌃C | 其他 | 取消任何动作,新起一行 |
| ⌘K | 其他 | 真正的清屏,而 clear 命令是假的 |
常用快捷键 - iTerm 专属
| 快捷键 | 分类 | 说明 |
|---|---|---|
| ⌘D / ⇧⌘D | 工作区 | 快速切屏,放弃切 Tab 的愚蠢行为吧,默认为横向切屏,多加一个 SHIFT 键为纵向 |
| ⇧⌘ | 工作区 | 纵向切屏 |
| ⌘⏎ | 工作区 | 切换窗口为全屏 |
| ⇧⌘⏎ | 工作区 | 切换分屏为全屏 |
| ⌥⌘箭头 | 工作区 | 移动焦点到某个分屏 |
| ⇧⌥⌘ + 鼠标拖拽 | 工作区 | 拖拽分屏移动位置 |
| ⌥⌘/ | 历史 | 最近访问目录记录,但没有 z 和 j 好用 |
| ⌥⌘H | 历史 | 最近剪贴板记录(这个快捷键被我改成了 ⌥⌘\) |
| ⌘/ | 可访问性 | 查找光标(曾经做的很炫酷,以为是彩蛋) |
| ⌥⌘; | 可访问性 | 显示 / 隐藏光标所在的行 |
| ⇧⌘E | 可访问性 | 显示 / 隐藏右侧时间轴 |
| ⇧⌘. | 命令编辑 | 显示 / 隐藏命令编辑器 |
常用快捷键 - OMZ 专属
| 快捷键 | 分类 | 说明 |
|---|---|---|
| ⌃X ⌃E | 命令编辑 | 拷贝了一大段命令后,连续先后按下 ⌃X 和 ⌃E 可以直接进行编辑 |
🤡 技巧
🚀 在命令行中提效
Tab(OMZ 专属)
Tab 在命令行中几乎是万能的,任何时候按它都能帮你解决不少问题,OMZ 带来了更多的强化。
| 命令 | 说明 | 例子 |
|---|---|---|
cd / j / z | 只需要一些关键字 | cd wd/help-ui<TAB> → cd packages-wd/console-base-wd-help-ui |
$... | 环境变量扩展 | $ZSH_CUS<TAB> → /Users/the.user/.oh-my-zsh/custom |
kill | 以名字找进程 | kill fire<TAB> ![]() |
叹号 - 玩转历史
| 命令 | 说明 |
|---|---|
!! | 显示(注意不会执行)上一条命令 |
!n | 显示历史 history顺数第 n 条命令 |
!-n | 显示历史 history倒数第 n 条命令 |
!$ | 上一条命令的末参数 |
!^ | 上一条命令的首参数 |
!* | 上一条命令的所有参数 |
!:n | 上一条命令第 n 个参数 |
!:- | 上一条命令去掉末参数 |
!keyword | 上一条以 keyword 打头的命令 |
!?keyword | 上一条包含 keyword 的命令 |
音调符号 ^
^old^new用来替换上一命令中的old为new。
假设上一条命令为 git commit -am 'feet: .....',被 commitlint 拦截了下来。
你可能会按向上箭头 ↑ 调出上一个命令,然后按住向左箭头到 feet: 那里,把它改成 feat:。
更优雅一些的方式就是写 ^feet^feat 回车,这样一条新的命令就写好了。
📝 内置文本编辑器/查看器
- vi
- nano
- cat(bat 为其升级版,需安装)
- less
- more
🎨 颜色数字代码
主题使用的颜色代码是 0-255 的颜色编码,可以通过以下命令查看:
for code ({000..255}) print -P -- "$code: %F{$code}三位数字即颜色值 Text Color%f"

有更简单的办法:
spectrum_ls # 显示为文字色
spectrum_bls # 显示为背景色
🛴 你可能不知道的原生命令
| 命令 | 说明 |
|---|---|
- | 切换到上次的 pwd,临时通过 z 或 j 切换目录后用它非常爽 |
caffeinate | 咖啡因,让机器不休眠,执行长时间任务比如 lerna publish 的时候可以用它避免系统睡觉导致的发布中断问题 |
uptime | 看机器多久没有关机过 |
pbcopy | 复制到粘贴板,如 pwd | pbcopy、pbcopy < some.txt |
lsof -i:端口号 | 查看端口进程 ![]() |
ipconfig getifaddr en0 | 获取局域网 IP |
curl ipecho.net/plain; echo | 获取外网 IP(访问了一个外部服务) |
🔆 亮点功能
以下功能专门拎出来讲一下,虽然可能用的不多,但关键时刻真的很需要。
Instant Replay
穿越时间,回到过去。
快捷键:⌥⌘B

🙋 FAQ
❓ 如何改默认 shell 为 zsh?
前文有述,苹果已经把默认 shell 从 bash 改成了 zsh,但如果有旧的机器,可以执行 chsh -s /bin/zsh。
❓ 有哪些字体推荐?
我想你问的应该是 Powerline 字体。
如果你不用 NeoVim,或者不用 nvim tree 插件的话,P10K 推荐的 MesloLGS NF 应该是够了。不知道是机器的原因还是什么,有些字体的字符宽度会很大,比如 Ubuntu 字体。
我试了几乎所有的 Nerd Font,最后推荐:
| 名称 | 最佳大小 | 问题 | 截图 |
|---|---|---|---|
| MesloLGS NF | 11px、13px | P10K 官方推荐字体,不支持 nvim tree 图标 | ![]() |
MesloLGS Nerd Font | 13px | P10K Powerline 尾巴有高度差(但可以接受) | ![]() |
SauseCode Nerd Font | 13px | P10K Powerline 尾巴向下偏移(略难接受) | ![]() |
iMWritingMono Nerd Font | 13px | - | ![]() |
AurulentSamsM Nerd Font | 12px | - | ![]() |
CaskadiaCove Nerd Font | 12px | P10K Powerline 尾巴略高(略难接受) | ![]() |
FantasqueSansM Nerd Font | 13px | 字体本身和行高较别的字体略小,需自调 | ![]() |
Hack Nerd Font | 12px | - | ![]() |
Mononoki Nerd Font | 11px、12px、13px | - | ![]() |
注意,Powerline 尾巴的问题,有可能跟机器的分辨率等设置有关。
❓ 重要的历史输出滚没了,怎么办?
比如做构建的时候,一直在滚屏,然而最末出错了,上翻输出的时候,发现,滚没了...可以修改「Scrollback Buffer」,在 Settings → Profiles → Terminal 下,提高行数(默认 1000),或者勾选「Unlimited scrollback」:
❓ 如何临时禁用 OMZ?
为什么要禁用呢?主要是为了看原生 zsh 和带来 OMZ 强化的 zsh 有什么区别。
命令行输入 zsh -f 即可,-f 表示 --no-rcs,表示在初始化的时候不要加载各种配置(rc)文件。

❓ 如何更新 / 卸载 OMZ?
OMZ 有自动更新机制,会主动提示你更新,你也可以使用命令 omz update 手动更新:

卸载用命令 uninstall_oh_my_zsh,需要确认:

❓ 如何快速清理 node_modules?
也可以试试 npkill 这个小工具。
前端开发,可能在每个项目中安装 node_modules,久而久之,随着项目的增多,有些项目可能会保持沉睡状态,而这些 node_modules 将继续占用空间。
可以用以下命令查看当前目录下所有的 node_modules 占用了多少空间:
find . -name "node_modules" -type d -prune -print | xargs du -chs
比如以下是我的一个工作目录,node_modules 占用了可观的 10G。

逐个删除是不可能的。
在 风险可控 的前提下,你可以用以下命令删掉所有的 node_modules:
find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;
稍作解释:
-type d只找目录-prune找到最顶层的node_modules即返回,不递归-print打印查找结果-exec rm -rf '{}' \;对找到的结果逐个执行rm -rf命令,'{}'会被替换成找到的结果,\;是命令的结束
❓ 如何打印目录下的所有文件内容?
find path/to/dir -type f -exec cat {} \; > output.txt
注意,如果打印当前目录的时候,不要把 output.txt 放到当前目录,否则命令停止不了,可以这样:
find . -type f -exec cat {} \; > ../output.txt
📌 附录
Linux 系统目录
| 目录 | 英文全称 / 含义 | 备注 |
|---|---|---|
/bin | Binaries 二进制文件 | 存放可执行程序(基础命令,如 ls、cp),系统启动必需 |
/sbin | System Binaries 系统二进制文件 | 存放系统管理程序(需 root 权限,如 reboot、ifconfig) |
/etc | Editable Text Configuration 可编辑文本配置,或 Extended Tool Chest 扩展工具箱 | 传统上指 「系统配置文件目录」,名称起源有争议,但功能明确 |
/opt | Optional Application Software Packages 可选应用程序包 | 用于安装第三方可选软件,如商业软件、非系统预装程序 |
/usr | Unix System Resources Unix 系统资源,或 User Shared Resources 用户共享资源 | 存放系统级共享资源,程序、库、文档等,类似「系统级的 /home」(注意,不是 user 的略写) |
/home | Home Directories 用户主目录 | 普通用户的个人文件和配置存放目录,如 /home/username |
/root | Root's Home Directory(root 用户的家目录) | 超级用户(root)的个人目录,独立于普通用户的 /home |
/var | Variable Files 可变文件 | 存放动态变化的文件(日志、缓存、数据库数据等,内容会随系统运行改变) |
/tmp | Temporary Files 临时文件 | 临时文件存放目录,系统重启后可能清空 |
/dev | Devices 设备 | 存放设备文件,如硬盘、终端,体现 Linux「一切皆文件」的设计 |
/proc | Processes 进程 | 虚拟文件系统,反映当前进程和内核状态,非实际存储在磁盘 |
/sys | System 系统 | 虚拟文件系统,用于与内核交互,查看 / 配置硬件、系统参数 |
Mac 虽源于 Unix,和 Linux 很像,但目录结构还是有细微差别的,比如 Mac 的用户目录不在 /home,而是在 /Users 下,并且 Mac 没有 /proc 和 /sys。
Linux 常用命令
以下列举了常用的 Linux 命令(字母序)。
| 命令 | 功能 |
|---|---|
alias | 创建命令别名 |
cat | 查看文件内容(适用于小文件) |
cd | 切换目录 |
chmod | 修改文件 / 目录权限 |
chown | 修改文件 / 目录所有者 |
cp | 复制文件或目录 |
curl / wget | 下载文件或测试 HTTP 请求 |
date | 显示或设置系统时间 |
df | 查看磁盘空间使用情况 |
du | 查看目录 / 文件占用空间 |
find | 查找文件或目录 |
free | 查看内存使用情况 |
grep | 在文件中搜索匹配文本 |
gzip / gunzip | 压缩 / 解压 .gz 文件 |
head / tail | 查看文件头部/尾部内容 |
history | 查看命令历史记录 |
hostname | 显示或设置主机名 |
ifconfig / ip | 查看或配置网络接口 |
kill / pkill | 终止进程 |
ln | 创建链接(硬链接或软链接) |
ls | 列出目录内容 |
mkdir | 创建目录 |
more / less | 分页查看文件内容(适用于大文件) |
mv | 移动文件或重命名 |
netstat / ss | 查看网络连接和端口监听 |
passwd | 修改用户密码 |
ping | 测试网络连通性 |
ps | 查看进程状态 |
rm | 删除文件或目录 |
scp | 远程复制文件 |
ssh | 远程连接服务器 |
su | 切换用户 |
sudo | 以管理员身份执行命令 |
tail | 查看文件的末尾,主要用来实时查看日志 |
tar | 打包 / 解包文件 |
top | 实时监控系统进程和资源使用 |
touch | 创建空文件或更新文件时间戳 |
uname | 显示系统信息 |
useradd / userdel | 添加 / 删除用户 |
vim / nano | 文本编辑器 |
which / whereis | 查找命令位置 |
zip / unzip | 压缩 / 解压 .zip 文件 |
- 新手入门:先掌握
ls、cd、mkdir、rm、cp、mv、cat、grep、vim、ssh等基础命令 - 进阶提升:学习管道
|、重定向>、环境变量、Shell 脚本等,提高效率 - 快捷键:善用
Tab(自动补全)、Ctrl+C(中断命令)、Ctrl+Z(挂起进程)、Ctrl+D(退出 Shell)
一些链接
- Linux Commands
- Command Line Power User(系列免费视频教程)
- Starship 看起来不错的一款 Prompt,但我已经有了 P10K
- Awesome Tuis 来这里淘一些好用好玩的 TUI 工具吧
🪭 写在最后
很多同学都喜欢直接用软件(WebStorm、VS Code 等)自带的 Terminal 跑 Dev Server,我建议不要这样,一来占据宝贵的界面空间,二来 VS Code 的 Terminal 跟系统的还是有些差别(具体是什么差别我不太清楚)。
如果你认为软件自带自己的 Terminal 因为会自动切到当前路径,比较方便,那末你肯定是不知道 z 或 j。
我推荐这样用 iTerm:
- 全屏(如果你有外接显示器就更好)
- 快捷键 ⌘D 切屏(也可以用 tmux 的方式)
- 用
z或j进行快速跳转
最后的最后,iTerm 和 OMZ 太强大了,无论配置项、插件、快捷键,我都只是了解了皮毛,任何好玩实用的技巧,欢迎交流。

















