macOS 自带终端(Terminal.app)提效配置:最小工具链与工作流
你现在用的是 macOS 自带终端 Terminal.app(TERM_PROGRAM=Apple_Terminal)。这篇文章只做一件事:让终端更"好用",少走弯路、少翻屏、少重复敲命令。
不写主题、不写配色、不写"看着更酷"的那类折腾;全部是能直接提升效率的工具与习惯,且改动可控、可随时回退。
摘要(先看结论)
- 终端提效的核心是四件事:找命令、跳目录、搜文件/内容、读输出(文件/日志/diff)。
- 最小高性价比工具链:
fzf+zoxide+ripgrep+fd+bat+eza+git-delta+jq。 - 你只需要改一个地方:
~/.zshrc,把 fzf/zoxide 的初始化接上,再加少量 alias。
快速导航(按问题定位)
| 现象 | 你真正想要的 | 最有效的动作 |
|---|---|---|
| 反复敲长命令 | 快速复用历史命令 | fzf(Ctrl-R) |
| 总在找目录 | 秒级跳转到常用目录 | zoxide(z <片段>) |
| 找文件慢 | 模糊找文件/目录 | fzf + fd(Ctrl-T / Alt-C) |
| grep 很慢/很难用 | 高速搜代码/日志内容 | ripgrep(rg) |
| cat/ls/diff 不可读 | 输出更清楚可扫读 | bat / eza / delta |
| JSON 一团糟 | 快速筛选/格式化 | jq |
1)确认你的终端与 shell
在终端里执行:
bash
echo "TERM_PROGRAM=$TERM_PROGRAM"
echo "SHELL=$SHELL"
echo "TERM=$TERM"
你当前环境的关键点:
TERM_PROGRAM=Apple_Terminal表示你在 macOS 自带 Terminal.app- macOS 默认 shell 多数是 zsh(
/bin/zsh) TERM=xterm-256color很常见,表示"至少支持 256 色"的终端类型;下文这套配置不依赖你手动改它
下文以 zsh 为例;如果你是 bash,配置位置从 ~/.zshrc 改到 ~/.bashrc(或 ~/.bash_profile)。
2)Terminal.app 的最小设置(不折腾也能稳定好用)
Terminal → Settings/Preferences → Profiles:
- 复制一个你喜欢的暗色 Profile(避免改坏默认)
- 把新 Profile 设为 Default(后续所有窗口都用它)
- Keyboard 里把 Option 键设为 Meta(很多命令行快捷键更顺手)
- Window 里把 Scrollback 调大一点(排查日志、看输出更舒服)
3)装一组"少但每个都高频"的工具
如果你还没装 Homebrew,先把 Homebrew 装好;下文所有安装命令都依赖 brew。
bash
brew update
brew install fzf zoxide ripgrep fd bat eza git-delta jq
它们分别负责:
fzf:模糊搜索(历史/文件/目录)zoxide:更聪明的cdripgrep(rg):高速内容搜索(替代grep的主力)fd:更顺手的找文件/目录(替代find的主力)bat:更好读的cateza:更好读的lsdelta:更好读的git diffjq:JSON 格式化与筛选
3.1)按需增强:这些工具不是必需,但很值
如果你只想"最小闭环",到上一节就够了。下面这些是按场景增强,装不装都不影响主流程。
bash
brew install direnv atuin tldr gh httpie
direnv:按目录自动加载环境变量(进项目目录自动切环境,出目录自动恢复)atuin:更强的历史命令检索(跨设备同步属于可选能力)tldr:命令"常用例子速查"(比 man 更适合日常)gh:GitHub CLI(开 PR/看 issue/查 workflow 更顺手)httpie:更好用的 HTTP 客户端(很多场景替代 curl,输出更可读)
其中 direnv 需要额外接一行初始化(可选,放 ~/.zshrc 末尾):
bash
eval "$(direnv hook zsh)"
3.2)这些工具到底解决什么:用途、替代与最佳实践
fzf:模糊搜索(历史/文件/目录)
- 解决什么:把"翻历史、找文件、找路径"从手动滚屏变成秒级定位
- 替代了什么:手动翻 shell 历史、靠
find | grep一层层筛 - 常规使用(装好 key bindings 后基本靠快捷键):
Ctrl-R:搜索命令历史并回填到命令行Ctrl-T:在当前目录树里选文件/路径插入到命令行Alt-C:模糊选择目录并cd过去
- 最佳实践:
- 先把 key bindings 接好(见本文第 4 节)
- 习惯用
Ctrl-R复用长命令,别再反复敲
zoxide:更聪明的 cd(用频率排序的目录跳转)
- 解决什么:把"我经常去的目录"变成带记忆的跳转,不需要完整路径
- 替代了什么:反复
cd ~/xxx/yyy/zzz,或靠手动补全路径 - 常规使用:
z repo:跳到你历史里最匹配repo的目录z -:跳回上一次目录
- 最佳实践:
- 让它自然学习,不要手动维护"书签"
- 目录命名越规范(project 名清晰),命中率越高
ripgrep(rg):高速内容搜索
- 解决什么:在一堆代码/日志里快速定位关键字
- 替代了什么:
grep -R(慢、参数多、体验差) - 常规使用:
rg keyword:在当前目录递归搜索rg -n "keyword" path:带行号、指定目录rg -S "camelCase":大小写智能匹配
- 最佳实践:
- 把
rg当作日常主力搜索,配合编辑器/终端输出快速跳转
- 把
fd:更顺手的 find
- 解决什么:找文件、找目录、按扩展名过滤
- 替代了什么:
find(语法反直觉、容易写错) - 常规使用:
fd name:按名称模糊匹配文件/目录fd -t d name:只找目录fd -e md:按扩展名过滤
- 最佳实践:
- fd + fzf 是"找文件/找目录"的黄金组合(见下文工作流)
bat:更好读的 cat(高亮 + 分页 + 行号)
- 解决什么:看配置、看日志片段、看代码时更清晰(高亮、行号、分页)
- 替代了什么:
cat - 常规使用:
bat file- 纯输出(脚本/管道场景):
bat --plain file
- 最佳实践:
- 日常用 alias 把
cat映射到bat;遇到脚本解析输出问题再用--plain回退
- 日常用 alias 把
eza:更好读的 ls(更清晰的列表与属性)
- 解决什么:目录列表更易读(权限/大小/时间等),常用参数更现代
- 替代了什么:
ls - 常规使用:
ezaeza -lah
- 最佳实践:
- 不要一上来覆盖系统
ls,先用ll养成习惯(见本文第 5 节)
- 不要一上来覆盖系统
delta:更好读的 diff(尤其是 git diff)
- 解决什么:让 diff 更像"可读文档",减少你在红绿块里找信息的成本
- 替代了什么:
git diff默认 pager(通常是less+ 纯色块) - 常规使用:
- 命令不变:继续
git diff/git show/git log -p
- 命令不变:继续
- 最佳实践:
- 先把它设成 git pager(见本文第 5 节),再决定要不要深度定制
jq:JSON 格式化与筛选
- 解决什么:把 JSON 从"一坨字符串"变成可读、可筛选的结构
- 替代了什么:手动肉眼看 JSON、临时写脚本 parse
- 常规使用:
cat data.json | jq .:格式化输出jq '.items[0].id' data.json:提取字段
- 最佳实践:
- 把 jq 当作终端里看接口返回/配置文件的标准动作
4)把工具"接上":只改 ~/.zshrc
这一步的目标是:fzf 的快捷键能用、zoxide 的 z 生效、常用 alias 生效。你只需要改 ~/.zshrc。
把下面这段追加到 ~/.zshrc 靠近末尾的位置(不要写进 conda init 那种"自动生成区块"里,避免下次被覆盖):
bash
if command -v zoxide >/dev/null 2>&1; then
eval "$(zoxide init zsh)"
fi
if command -v fzf >/dev/null 2>&1; then
if fzf --zsh >/dev/null 2>&1; then
source <(fzf --zsh)
elif command -v brew >/dev/null 2>&1; then
source "$(brew --prefix)/opt/fzf/shell/completion.zsh"
source "$(brew --prefix)/opt/fzf/shell/key-bindings.zsh"
fi
fi
if command -v eza >/dev/null 2>&1; then
alias ll="eza -lah --group-directories-first"
fi
if command -v bat >/dev/null 2>&1; then
alias cat="bat"
fi
重新打开一个终端窗口,或执行:
bash
source ~/.zshrc
5)把 git diff 变得可读:启用 delta 作为 pager
让 git diff 默认走 delta(命令习惯不需要改):
bash
git config --global core.pager delta
git config --global interactive.diffFilter "delta --color-only"
6)常用工作流:把"提效"落到每天的动作里
6.1 复用历史命令(别再重复敲)
- 按
Ctrl-R,输入关键词,回车即可把命令回填到命令行
6.2 秒级跳转目录(告别长路径)
z <目录片段>:跳到最常用的匹配目录z -:回到上一个目录
6.3 找文件/找目录(fd + fzf)
Ctrl-T:选文件/路径插入到命令行(例如给cat/bat/vim/脚本传参)Alt-C:选目录并直接cd(Terminal.app 里需要把 Option 设为 Meta;如果还不行,用Esc再按c代替)
如果你想"搜到文件后直接打开",可以用最小组合命令:
bash
fd --type f | fzf
6.4 搜代码/搜日志(rg)
bash
rg -n "keyword" .
6.5 看 JSON(jq)
bash
cat data.json | jq .
7)发布前自检
-
Ctrl-R能搜到历史命令(fzf 生效) -
z <片段>能跳到常用目录(zoxide 生效) -
ll输出可读(eza 生效) -
cat file有高亮/分页(bat 生效) -
git diff走 delta(diff 可读) -
rg keyword能快速搜到内容(ripgrep 生效) -
jq .能格式化 JSON(jq 生效)