终端是每天打开次数最多的开发工具之一。它不需要炫技,但应该让路径、分支、错误状态和常用操作一眼可见,同时不能因为插件太多而拖慢每一个新窗口。
这次我把配置拆成两个文件:configs/ghostty/config 负责窗口和渲染,configs/zsh/.zshrc 负责 shell 的行为。两者都可以独立复制,配置本身不依赖 Oh My Zsh 或其他主题框架。
1. 先定义目标:少干扰,强反馈#
终端美化最容易走偏的地方是把注意力放在颜色和动画上。我的取舍是:
- 信息密度适中:提示符显示用户、主机、当前目录和 Git 分支,不显示每次命令都在变化的冗余信息。
- 失败可感知:上一条命令成功显示绿色
❯,失败显示红色✗。 - 启动可控:补全是 zsh 原生能力,可选工具全部用
command -v检测后再加载。 - 配置可迁移:不把绝对路径、机器名称和私有 token 写进仓库。
这四条原则比“装多少插件”更重要。终端是高频工具,启动时多 200ms、每次补全多一次卡顿,累积起来都会影响体验。
2. Ghostty:把视觉设置集中在窗口层#
Ghostty 配置放在 macOS 的 ~/.config/ghostty/config。仓库里的示例使用 Catppuccin Mocha 和 JetBrains Mono:深色背景降低长时间阅读的眩光,等宽字体让日志和表格更容易对齐。
theme = Catppuccin Mocha
font-family = JetBrains Mono
font-size = 15
window-padding-x = 14
window-padding-y = 12
background-opacity = 0.94
background-blur-radius = 24ini透明度只保留到 0.94,避免背景图片干扰代码。window-padding-balance 让左右留白一致,代码不会贴着边框。字体大小不追求越大越好,15px 是在 14 英寸屏幕上兼顾信息量和可读性的起点,外接显示器可以按个人距离调整。
Ghostty 的 shell integration 负责同步当前目录、命令状态和窗口标题:
shell-integration-features = cursor,sudo,title
copy-on-select = clipboard
macos-option-as-alt = trueinimacos-option-as-alt 对 Vim、tmux 和 readline 用户尤其有用;复制即选中则减少了一次 ⌘C,但仍然保留系统剪贴板行为。
最后用快捷键解决高频动作:⌘T 新建标签页,⌘⇧Enter 向右分屏,⌘⌥方向键 在分屏之间移动。快捷键只覆盖窗口级操作,编辑器内的快捷键仍由编辑器自己管理,避免冲突。
3. zsh:先把原生能力用好#
3.1 历史记录要可靠#
多标签终端最常见的问题是历史记录互相覆盖。下面几项组合起来,能让历史实时追加、跨窗口共享、重复命令自动去重,并忽略以空格开头的临时命令:
HISTSIZE=50000
SAVEHIST=50000
setopt append_history inc_append_history share_history
setopt hist_ignore_all_dups hist_ignore_space hist_reduce_blankszsh历史文件放在 ~/.zsh_history,没有把它放进仓库。配置里也没有关闭历史扩展,因此需要时仍可用 !! 和 !$。
3.2 补全与提示符保持轻量#
compinit 是 zsh 自带的补全系统。把 dump 文件放进 ~/.cache/zsh,既避免污染主目录,也避免每次启动重复生成。大小写不敏感匹配对文件名和 Git 分支都很友好。
提示符使用 vcs_info 获取 Git 分支,不执行网络操作:
autoload -Uz vcs_info
precmd() { vcs_info }
PROMPT='%F{cyan}%n@%m%f %F{blue}%~%f${vcs_info_msg_0_} %(?.%F{green}❯%f.%F{red}✗%f) 'zsh它的关键信息顺序是“我是谁、在哪台机器、当前目录、哪个分支、上一条命令是否成功”。进入深层目录时 zsh 会自动缩短路径,长路径不会把命令输入区挤没。
3.3 别名解决重复动作,函数解决带参数动作#
简单命令用别名:gs 查看状态、gd 查看差异、gl 查看最近提交。eza、bat、rg 只是增强项,只有检测到命令存在才创建别名,因此新机器上不会出现 command not found。
带参数的动作使用函数更清楚。例如 mkcd project 会创建目录并进入,extract archive.zip 会根据扩展名选择解压命令。函数对参数数量和文件存在性做校验,错误会返回非零状态,适合放进脚本或组合命令中。
4. 可选工具的加载策略#
fzf 提供历史搜索和文件搜索,zoxide 改善目录跳转,direnv 为项目注入环境变量。这些工具都不是基础依赖,配置采用同一个模式:
command -v zoxide >/dev/null && eval "$(zoxide init zsh)"
command -v direnv >/dev/null && eval "$(direnv hook zsh)"zsh这样配置可以在个人电脑、CI 容器和远程服务器之间共享。需要注意,direnv 会执行项目里的 .envrc,只应对自己信任的目录执行 direnv allow。
5. 安装、验证与回滚#
先备份本地文件。Ghostty 配置可以直接替换;如果已有 nvm、Homebrew 或其他环境初始化,请把 zsh 示例中的增强段合并到现有 ~/.zshrc,不要无条件覆盖:
mkdir -p ~/.config/ghostty
cp ~/.zshrc ~/.zshrc.backup.$(date +%Y%m%d-%H%M%S)
cp configs/ghostty/config ~/.config/ghostty/config
# 将 configs/zsh/.zshrc 中的内容合并到 ~/.zshrcshell打开新的 Ghostty 窗口,依次验证补全、Git 分支提示、mkcd /tmp/demo 和 extract。如果某个可选工具行为不符合预期,删除对应的 command -v ... 行即可,不会影响 zsh 主体。
这套配置的重点不是“看起来像某个主题”,而是让终端在高频使用下保持稳定:颜色服务于状态,留白服务于阅读,插件服务于明确的工作流。把配置放进仓库后,换电脑只需要复制两个文件,就能恢复同样的工作台。