在 macOS 的 zsh 中,可通过 OSC 序列 \033]2;标题\007 在 iTerm2 中动态设置窗口标题,利用 precmd 钩子调用函数实时更新,显示当前目录名与路径(或加 Git 分支),系统 Terminal 不支持动态刷新。
在 macos 的 zsh 环境中,让终端窗口标题(不是标签页或提示符)动态显示当前路径,关键在于利用 osc 控制序列 向 iterm2 或原生 terminal 发送标题更新指令,并在每次命令执行后自动触发。
确认你用的是 iTerm2(推荐)还是系统 Terminal
iTerm2 对窗口标题控制更灵活、文档更清晰,原生 Terminal 支持有限(仅基础标题设置,不支持动态刷新)。以下方案默认基于 iTerm2 + zsh:
- iTerm2 支持
\033]2;标题内容\007(仅窗口标题)和\033]0;标题内容\007(窗口标题+标签) - 系统 Terminal 只能在「偏好设置 → 描述文件 → 窗口」里静态设置标题,无法实时响应路径变化
在 ~/.zshrc 中添加自动更新函数
编辑配置文件:nano ~/.zshrc,在末尾加入以下内容:
function update_terminal_title() {
local dir=$(basename "$PWD")
local fullpath="$PWD"
# 可选:截断长路径,只保留最后两层,避免标题过长
if [[ ${#fullpath} -gt 60 ]]; then
fullpath="…$(echo "$fullpath" | sed 's/.*\(\/[^\/]\{1,30\}\)$/\1/')"
fi
echo -ne "\033]2;${dir} — ${fullpath}\007"
}
autoload -Uz add-zsh-hook
add-zsh-hook precmd update_terminal_title
-
precmd钩子确保每次命令执行前刷新标题 -
\033]2;...\007是 iTerm2 识别的「仅设置窗口标题」序列 -
basename "$PWD"提取当前目录名,$PWD是完整路径
配合 Git 分支增强实用性(可选)
如果你常在 Git 项目中工作,可以进一步把分支也加进标题:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
function update_terminal_title() {
local dir=$(basename "$PWD")
local branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
local title="${dir}"
[[ -n "$branch" ]] && title="${title} (${branch})"
echo -ne "\033]2;${title} — $PWD\007"
}
- 分支信息只在 Git 仓库内生效,非仓库目录不会报错
- 标题效果示例:
myapp (main) — /Users/me/dev/myapp
立即生效与验证
保存 ~/.zshrc 后运行:
source ~/.zshrc
然后执行 cd 切换目录,观察窗口标题是否实时变化。如无效,检查是否已启用 iTerm2 的「Allow terminal to report cursor position」等兼容选项(一般默认开启,无需调整)。

















