FunTester 用 iTerm2 Badge 随时了解当前位置

FunTester · January 07, 2026 · 671 hits

使用场景与痛点

在日常开发中,我们经常同时打开多个 iTerm2 窗口或 Tab,在不同项目之间频繁切换。窗口一多,很容易分不清当前终端到底指向哪个项目或目录。尤其是在执行构建、部署、清理脚本时,一旦跑错目录,后果往往不小——比如你想清理测试环境的缓存,结果手一抖把生产环境的数据目录给干掉了,这酸爽可不是一般人能承受的。

如果每次都要靠 pwd 或盯着 prompt 来确认位置,不仅打断思路,也不够直观。就像开车导航,明明可以抬头显示,却非要低头看仪表盘,体验自然大打折扣。

什么是 iTerm2 的 Badge

iTerm2 的 Badge 是显示在终端窗口右上角的一小段文字,用于标识当前终端的 上下文 。它不占用命令行空间但始终可见,非常适合显示一些辅助信息,比如当前项目名、目录、Git 分支或运行环境。

我们今天要做的事情很简单:让 Badge 自动显示当前文件夹名称,并在切换目录时同步更新。

最终效果预览

想象这样一个场景:你正在开发多个项目,同时打开了多个 iTerm2 标签页。假设你当前所在目录是:

~/projects/funtester

那么在 iTerm2 窗口右上角,会出现一个简洁醒目的 Badge 标识:

funtester

这个 Badge 采用半透明背景,字体清晰可见,不会干扰你的工作焦点。更妙的是,当你执行 cd ~/projects/user-service 切换到其他项目目录时,Badge 会瞬间自动更新为 user-service,无需任何手动操作。

这种无缝的上下文感知,让你在多任务切换时始终保持清晰的方向感,避免了频繁查看 pwd 或解析复杂 prompt 的烦恼。

实现思路简介

iTerm2 通过一个强大的扩展控制序列 OSC 1337,让 Shell 命令能够动态操控 Badge 显示。这个控制序列就像是终端与应用程序之间的秘密通信协议,其中 SetBadgeFormat 指令专门负责设置 Badge 内容,但有个小要求——内容必须经过 Base64 编码处理,确保数据传输的稳定性和兼容性。

整个实现流程其实相当直观,可以分解为三个清晰步骤:首先获取当前工作目录的完整路径,然后提取出最后一级目录名称,最后将这个名称进行 Base64 编码并通过控制序列发送给 iTerm2。理解这些技术细节并非强制要求,但当你知道背后的原理时,会对这段配置的使用更有信心,也更容易根据需要进行自定义调整。

推荐方案:自动随目录变化(Zsh)

在 macOS 默认配备的 Zsh 环境中,我们可以巧妙地利用 chpwd hook 来实现 Badge 的智能更新。每当目录发生变化时,这个钩子函数就会自动触发,让 Badge 始终显示最新的位置信息。

配置过程超级简单:只需要在 ~/.zshrc 文件中添加一小段函数和钩子配置即可。既不会影响终端的启动速度,也不需要复杂的安装步骤。

配置完成后,无论你是新打开一个终端标签页,还是在项目间执行 cd 命令切换目录,Badge 都会悄无声息地保持最新状态,就像一个贴心的导航助手。

这是一种 设置后就忘记 的完美体验——在日常工作中你几乎察觉不到它的存在,但当你需要快速确认当前上下文时,它总是在右上角静静等待着你的目光。

# 定义设置 Badge 的函数
function iterm_set_badge() {
  # 仅在 iTerm2 环境中生效,避免其他终端报错
  if [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
    # 使用 OSC 1337 控制序列设置 Badge,内容需要 Base64 编码
    printf "\e]1337;SetBadgeFormat=%s\a" \
      "$(echo -n "$(basename "$PWD")" | base64)"
  fi
}

# 加载 Zsh 钩子系统
autoload -Uz add-zsh-hook
# 将函数绑定到目录变化钩子
add-zsh-hook chpwd iterm_set_badge
# 立即执行一次,确保新终端也有 Badge
iterm_set_badge

写在最后

Badge 真正的魅力不在于功能多么丰富,而在于它那恰到好处的设计。它把你最关心的上下文信息,优雅地放在了右上角这个最不会分散注意力的位置。不用频繁低头查看 pwd,不用敲命令确认位置,也不会干扰你正常的终端交互。等你习惯了这种 无声的守护 后,再回到没有 Badge 的终端,反而会觉得心里空落落的,像是少了点安全感。

很多看似高深的效率优化,其实并没有那么复杂,只不过是被我们忽视了或者没有被系统性地整理出来。iTerm2 的 Badge 就是这样一个不起眼的 小技能 ,但它能为你带来长期稳定的收益。如果你经常需要在多个项目间切换,频繁执行 cd 命令,那这几分钟的配置绝对值得尝试。更有趣的是,你还可以在此基础上进行扩展——显示 Git 分支状态、环境标识,甚至与 tmux 联动,让你的终端变得越来越 懂你


FunTester 原创精华
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up