能显示路径和分支,但必须关掉 macOS 原生标题栏、确保项目是 Git 仓库、配置变量全小写,且改完必须完全重启 VSCode;最常见失效原因是启用了 nativeTabs 或 nativeFullScreen,导致 window.title 被系统绕过,变量不解析。

直接说结论:能显示路径和分支,但必须关掉 macOS 原生标题栏、确保项目是 Git 仓库、配置变量拼写全小写,且改完必须完全重启 VSCode。
为什么改了 window.title 没反应
最常见原因是 VSCode 正在用系统原生标题栏(尤其是 macOS)。只要启用了 Window: Native Tabs 或 Window: Native Full Screen,window.title 就彻底失效,连变量都不解析。
- 检查设置里这两个选项是否为 disabled;
- 同时确认
Window: Title Bar Style是custom,不是native; - 改完配置后,必须退出所有 VSCode 进程再重开——热重载不刷新标题栏;
- 如果用
code .打开单个文件(而非文件夹),${folderName}和${branch}都为空,属正常限制,不是配置错。
${branch} 显示不出来?先看 Git 状态
${branch} 不是万能变量,它只在满足三个条件时才展开为分支名(如 main)或 commit hash(分离头指针时):
- VSCode 内置 Git 扩展已启用(默认开启);
- 当前工作区根目录下存在
.git文件夹; - Git 仓库状态可读(比如没被权限锁住、没卡在 fetch 中)。
否则它就返回空字符串,标题栏里对应位置直接“消失”,不会报错也不会提示。多根工作区下,${branch} 只取第一个根的分支,和当前编辑器无关。
路径类变量怎么选:别硬塞 ${file},优先用 ${activeEditorMedium}
${file} 是绝对路径,但标题栏宽度有限,一长就截断成 /Users/xxx/.../index.tsx,反而更难识别;${fileDirname} 也不带盘符或根路径,在跨平台协作时容易歧义。
-
${activeEditorShort}:纯文件名(index.tsx),适合简洁场景; -
${activeEditorMedium}:文件名 + 一级父目录(components/index.tsx),辨识度高且不冗长; -
${activeEditorLong}:相对工作区根的完整路径(src/components/index.tsx),适合深层嵌套项目; -
${rootName}是工作区文件夹名,不是路径;${folderName}在单文件打开时为空,不稳定。
推荐组合:"${activeEditorMedium}${separator}${branch}${separator}${rootName}" —— 它兼顾可读性、稳定性与 Git 上下文。
分隔符和格式细节容易踩坑
${separator} 是变量,不是字符串。写成 " - " 或 " | " 字面量会直接导致整个模板失效,标题栏回退到默认值。
- 想用竖线分隔?写成
"${activeEditorShort}${separator}|${branch}",让${separator}控制前后是否显示; - 大小写敏感:
${Branch}、${BRANCH}、${gitBranch}全无效,只能是${branch}; -
${dirty}(●标记)不占视觉宽度,但有未保存修改时才出现,比加文字提示更轻量; - Windows 下避免在标题里硬写反斜杠
\,可能被转义或截断。
真正难搞的不是配置本身,而是变量生效的隐含前提:Git 仓库状态、窗口渲染模式、工作区打开方式——这三者任一不满足,标题栏就“假装没看见”你的配置。


















