还在用 iTerm2?来体验一套现代终端配置

还在用 iTerm2?分享下我的现代终端配置

iTerm2 配一套默认 zsh,我用了好几年没怎么动过。最近抽时间把终端从里到外换了一遍------终端本身、提示符、到天天敲的那些命令,每一层都换成了更现代、更快的替代,用下来顺手太多。

这篇就记录我现在这套:Ghostty 做终端,oh-my-zsh 加 Powerlevel10k 管 shell 和提示符,再加 ripgrep、fd、eza、zoxide 这批 Rust 工具替掉 grep、find、ls、cd。Mac 和 Linux 通用,三层相互独立,你挑想要的抄。

举个最直观的:同一个 4 万文件、1.3G 的仓库,grep -r 搜一次 8 秒,换成 rg 是 0.03 秒。这类提速来自命令行工具、跟终端本身无关,但确实是日常体感差距最大的一块。


懒人版:把这段丢给 AI

不想一步步手动装,可以把下面整段复制给能跑命令的 AI(Claude Code、Cursor、Gemini CLI 等),它会按这套配置帮你装好、改好 ~/.zshrc 并验证。它会先备份你的 .zshrc、按你的系统选安装命令,也不会覆盖 cat / ls / grep 这些标准命令。

text 复制代码
帮我在这台机器上配置一套现代终端环境。先检测系统(macOS 还是 Linux)和包管理器,
据此选安装命令;每步先说要做什么,改 ~/.zshrc 前先备份成 ~/.zshrc.bak.<时间戳>。
所有往 .zshrc 追加的内容都用 command -v 守卫,保证重复运行不会重复添加。

按以下清单做:
1. 终端 Ghostty(macOS: brew install --cask ghostty;已装跳过)。
2. 字体 MesloLGS NF(Nerd Font);装完提醒我去终端设置里手动把字体选成它。
3. oh-my-zsh(已装跳过)。
4. Powerlevel10k 主题,设 ZSH_THEME="powerlevel10k/powerlevel10k",
   装完让我自己跑 p10k configure。
5. omz 插件 zsh-autosuggestions、zsh-syntax-highlighting,clone 到 custom/plugins,
   写成 plugins=(git zsh-autosuggestions zsh-syntax-highlighting),
   syntax-highlighting 必须放最后。
6. 现代命令行工具:eza bat fd fzf zoxide git-delta bottom ripgrep。
   macOS 用 brew;Debian/Ubuntu 用 apt(注意 bat 装出来叫 batcat、fd 叫 fdfind);
   Arch 用 pacman。
7. 在 ~/.zshrc 末尾追加工具初始化:batcat/fdfind 的 fallback 别名、zoxide init、
   fzf init、eza 别名(ll/la/lt)、bat 别名(catp)。
   关键原则:绝不用别名覆盖 cat/ls/find/grep/cd 等标准命令,现代工具只挂独立别名。
8. git diff 用 delta:配 core.pager=delta、interactive.diffFilter、delta.navigate、
   delta.line-numbers、merge.conflictStyle=zdiff3。
9. 如果装了 nvm,把它改成懒加载;并在 source oh-my-zsh.sh 之前加 ZSH_DISABLE_COMPFIX=true。
10. 如果之前用过 omz 的 z 插件,从 plugins 删掉 z,
    并提示我可以用 zoxide import --from z ~/.z 导入旧跳转历史。

全部做完后验证一遍:各工具 --version、新开 zsh 测启动耗时、确认别名生效,
把结果列给我。过程中不要覆盖任何标准命令,不确定的地方先问我再动。

想自己一步步来、或者只取其中几样,接着往下看。


准备:包管理器和字体

macOS 装 Homebrew:

bash 复制代码
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Linux 用自带的 apt / dnf / pacman

字体得装 Nerd Font,不然提示符和文件图标会显示成方块。我用的是 MesloLGS NF:

bash 复制代码
# macOS
brew install --cask font-meslo-lg-nerd-font

# Linux:从 github.com/ryanoasis/nerd-fonts 下 Meslo,
# 放进 ~/.local/share/fonts/ 后 fc-cache -f

装完在终端设置里把字体选成 MesloLGS NF


终端:Ghostty

GPU 渲染,滚动和大量输出比 iTerm2 顺。

bash 复制代码
# macOS
brew install --cask ghostty
# Linux:官网有 GTK 版,部分发行版有仓库包,也可源码编译

默认就能用。我额外写了个配置 ~/.config/ghostty/config 让字体和 p10k 对齐:

ini 复制代码
font-family = MesloLGS NF
font-size = 14
theme = catppuccin-mocha
background-opacity = 0.96
window-padding-x = 12
window-padding-y = 8
copy-on-select = true

改完 Cmd+Shift+, 重载。主题用 ghostty +list-themes 看。


shell 框架:oh-my-zsh

Linux 上先 sudo apt install zshchsh -s $(which zsh),macOS 自带。

bash 复制代码
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

omz 启动开销大概 20ms,我觉得为了插件生态这点不算什么。拖慢启动的其实是 nvm 和补全系统,往下第七、第九节会处理。想要更精简的框架,第八节有 Zimfw 的写法。


提示符:Powerlevel10k

bash 复制代码
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

~/.zshrc 里设:

bash 复制代码
ZSH_THEME="powerlevel10k/powerlevel10k"

重开终端进配置向导,或手动 p10k configure,结果存在 ~/.p10k.zsh

p10k 有 instant prompt,提示符在 shell 没加载完时就先画出来,所以体感零延迟;git 状态交给后台守护进程 gitstatusd 异步算,大仓也不卡。这也是我没换 Starship 的原因------Starship 跨 shell、配置简单,但每次渲染都同步跑一遍 git,纯速度不如 p10k。


补全和高亮

一个补全(输入时灰字提示历史命令,右方向键接受),一个语法高亮(对的绿、错的红)。这俩是我最离不开的:

bash 复制代码
git clone https://github.com/zsh-users/zsh-autosuggestions \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-syntax-highlighting \
  ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

~/.zshrc 插件行,syntax-highlighting 放最后:

bash 复制代码
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

现代命令行工具

bash 复制代码
# macOS
brew install eza bat fd fzf zoxide git-delta bottom ripgrep

# Debian / Ubuntu
sudo apt install bat fd-find fzf zoxide ripgrep
# eza / git-delta / bottom 旧仓库里可能没有,用 cargo 或下 release 二进制

# Arch
sudo pacman -S eza bat fd fzf zoxide git-delta bottom ripgrep
工具 替代 用途 备注
ripgrep(rg grep -r 搜代码 大仓快两三个数量级
fd find 找文件 语法是正则,不是 -name
eza ls 列目录 带图标和 git 状态
bat cat 看文件 语法高亮
zoxide(z cd 目录跳转 按访问频率记忆
fzf --- 模糊查找 Ctrl-R 搜历史、Ctrl-T 找文件
git-delta git 默认 diff 看 diff 彩色带行号
bottom(btm top 系统监控 ---

我只给这些工具挂独立别名(llzcatp),不覆盖 lscatfindgrep。这样脚本和自动化工具拿到的还是标准命令的行为,不会被花哨输出搞乱。

rg 和 fd 有两个默认行为得记住:它们默认跳过 .gitignore 和隐藏文件,搜 node_modules、dist 会查无结果,全量搜分别加 -uu-HI;rg 默认把 pattern 当正则,搜带括号点号的字面串(config.get())要加 -F


.zshrc 里接好工具

加到 ~/.zshrc 末尾。头两行让同一份配置在 Mac 和 Linux 都能用------Debian/Ubuntu 上 bat、fd 被装成了 batcat、fdfind:

bash 复制代码
# Debian/Ubuntu 上 bat/fd 改了名,透明 fallback
command -v batcat >/dev/null && ! command -v bat >/dev/null && alias bat='batcat'
command -v fdfind >/dev/null && ! command -v fd  >/dev/null && alias fd='fdfind'

# zoxide:智能 cd,提供 z 和 zi
command -v zoxide >/dev/null && eval "$(zoxide init zsh)"

# fzf:Ctrl-R 历史 / Ctrl-T 文件 / Alt-C 目录
command -v fzf >/dev/null && source <(fzf --zsh) 2>/dev/null

# eza:只加别名,不动 ls
if command -v eza >/dev/null; then
  alias ll='eza -l --git --icons --group-directories-first'
  alias la='eza -la --git --icons --group-directories-first'
  alias lt='eza --tree --level=2 --icons'
fi

# bat:只加别名,不动 cat
if command -v bat >/dev/null; then
  alias catp='bat -pp'
  export BAT_THEME="ansi"
fi

用过 omz 的 z 插件的话,从 plugins=(...) 删掉 z,不然和 zoxide 抢命令。旧跳转历史可以导过来:zoxide import --from z ~/.z


可选:Zimfw 替代 oh-my-zsh

想要更快的启动和更干净的配置,可以用 Zim 替掉 omz。它把模块预编译成字节码,冷启动常在 50ms 以内,配置是声明式的,换机器丢一份 .zimrczimfw install 就装齐,做 dotfiles 比 omz 省事。生态比 omz 小是它的代价。

我前面最看重的补全和跳转换框架不会丢:zoxide 是独立二进制跟框架无关,autosuggestions 在 Zim 里也有同款模块。

bash 复制代码
curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh

~/.zimrc 里声明模块,提示符仍用 p10k:

bash 复制代码
zmodule romkatv/powerlevel10k --use degit
zmodule git
zmodule zsh-users/zsh-completions --fpath src
zmodule zsh-users/zsh-autosuggestions
zmodule zsh-users/zsh-syntax-highlighting
zmodule zsh-users/zsh-history-substring-search

然后 zimfw install。第六、七节那批工具和 zoxide/fzf 的初始化照搬,跟框架无关。

omz 现在用着顺手的话其实不用折腾,换 Zim 省下的就几十毫秒。


git diff:delta

bash 复制代码
git config --global core.pager "delta"
git config --global interactive.diffFilter "delta --color-only"
git config --global delta.navigate true
git config --global delta.line-numbers true
git config --global merge.conflictStyle zdiff3

git 检测到输出不是终端时会自动关 pager,所以管道和脚本里 git diff | xxx 不会被 delta 干扰。


启动提速(装了 nvm 的话)

nvm 每次启动全量加载,拖大概 50ms。改成用到时才加载,把 ~/.zshrc 里原来的 nvm 块换成:

bash 复制代码
export NVM_DIR="$HOME/.nvm"
nvm() {
  unset -f nvm
  [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"  # macOS
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"                            # Linux
  nvm "$@"
}

再在 source $ZSH/oh-my-zsh.sh 之前加一行,跳过补全目录的安全审计:

bash 复制代码
ZSH_DISABLE_COMPFIX=true

启动从约 190ms 到约 110ms。体感其实不强,instant prompt 早把提示符画出来了,顺手做掉而已。


可选:给 AI 工具写使用约定

用 Claude Code、Kiro CLI 这类工具的话,它们也会调这些命令行工具,但常因不懂默认行为而用错。写份约定给它们读:Claude Code 放 ~/.claude/CLI-TOOLS.md,在 ~/.claude/CLAUDE.md 加一行 @CLI-TOOLS.md;Kiro CLI 放 ~/.kiro/steering/modern-cli-tools.md,默认 agent 会自动加载。

讲清三件事就够:rg/fd 默认跳过 .gitignore 和隐藏文件,全量搜加 -uu / -HI;rg 默认按正则解释,字面串加 -F;解析内容用标准 cat 不用 bat。


Mac 和 Linux 的差异

通用为主,要留意的就几处:装法 brew 换成 apt/dnf/pacman,eza/delta/bottom 旧发行版可能得用 cargo 或下二进制;Debian/Ubuntu 上 bat 是 batcat、fd 是 fdfind,第七节的 fallback 别名已经兜住;.zshrc/opt/homebrew 和 nvm 的 Homebrew 路径是 Mac 专属,Linux 改成 ~/.nvm 那套;字体在 Linux 手动装到 ~/.local/share/fonts/


速查

想做的事 命令
列目录(详细 / 含隐藏 / 树) ll / la / lt
看文件(解析 / 阅读) cat 文件 / bat 文件
搜代码 rg 关键词,字面串 rg -F
搜被忽略的文件 rg -uu 关键词
找文件 fd 名字,全量 fd -HI
跳目录 / 交互选 z 项目名 / zi 项目名
搜历史命令 Ctrl-R
看 git diff git diff
系统监控 btm

踩过的坑

图标变方块:Nerd Font 没装或终端没选它。

z 跳不准:zoxide 要先学习,手动 cd 进几次,或 zoxide import --from z ~/.z 导旧数据。

rg 搜不到 node_modules:默认跳过 .gitignore,加 -uu

改完 .zshrc 没生效:exec zsh 或新开终端,改前先 cp ~/.zshrc ~/.zshrc.bak

相关推荐
XIAOHEZIcode4 天前
进程、会话与终端——一次真实的 Linux Session 解剖
linux·后端·命令行
好好风格5 天前
【一行代码】查看本机公网 IP
linux·命令行
大大杰哥7 天前
Windows 批处理语法笔记:从入门到一键部署项目
脚本·命令行
AllenSu06138 天前
ghostty配置(还原iterm2配色 and without starship)
命令行
海市公约11 天前
Linux核心基础命令与权限管理实战指南
linux·运维·服务器·vim·权限管理·系统监控·命令行
ZTStory13 天前
mise 一款可以在项目中独立管理语言、环境变量和任务的工具
前端·rust·命令行
Patrick_Wilson18 天前
CLI 工具突然变慢了?别急着怀疑网络,按这四步排查
网络协议·性能优化·命令行
孟陬19 天前
一个小小 alias,提升开发幸福感
前端·后端·命令行
来尔君19 天前
Git Bash 提示符简化(就是每次敲命令时上面显示的那一行信息)
git·命令行