改了 window.title 没反应是因为 macos 原生标题栏拦截:需关闭 window: native tabs 和 window: native full screen,设 window: title bar style 为 custom,且必须完全退出 vscode 进程后重启。

改了 window.title 没反应,八成是被 macOS 原生标题栏拦住了——关掉 Window: Native Tabs 和 Window: Native Full Screen,再设 Window: Title Bar Style 为 custom,否则所有变量都白配。
为什么改了 window.title 标题栏还是只显示“Visual Studio Code”
这不是配置写错了,而是 VSCode 主动绕过了自定义逻辑:
- macOS 上只要启用了
Window: Native Tabs或Window: Native Full Screen,标题栏就完全交由系统渲染,window.title变量彻底失效 -
Window: Title Bar Style必须是custom,设成native(默认值)时同样不生效 - 改完设置后必须完全退出 VSCode 进程(不是关闭窗口),再重新打开;热重载或刷新设置不触发标题栏重绘
- 如果用
code /path/to/file.js打开单个文件,${folderName}、${branch}、${rootName}全为空——这是设计行为,不是 bug
window.title 变量怎么拼才有效
它不是自由文本,而是严格匹配的模板变量。拼错一个字母,比如把 ${activeEditorShort} 写成 ${activeEditorShortt},那一段就原样输出或留空:
-
${activeEditorShort}:仅文件名(index.ts) -
${activeEditorMedium}:文件名 + 一级父目录(src/index.ts) -
${activeEditorLong}:相对工作区根的完整路径(src/components/App.tsx) -
${filePath}:绝对路径(/Users/me/project/src/index.ts),但未保存的临时文件(Untitled-1)返回空字符串 -
${branch}:仅当项目根下有.git目录且 VSCode 已加载 Git 状态时才有效;多根工作区只取第一个文件夹的分支 -
${separator}是条件分隔符——前后内容都存在时才插入,默认为空格;想强制用—就直接写字符,别依赖它
哪些组合实用,哪些容易踩坑
目标不同,变量组合策略完全不同:
- 想快速区分同名文件?用
"${activeEditorShort} — ${folderName} — ${rootName}",语义清晰、兼容性好,${folderName}在单文件场景虽为空,但不影响主文件名显示 - 真要绝对路径?用
"${filePath} — ${rootName}",但注意:${filePath}在未保存文件中为空,且 Windows 路径里的\可能被截断或转义,建议只在 macOS/Linux 下稳定使用 - 加 Git 分支?写
"${activeEditorShort} [${branch}] — ${rootName}",但别指望它在远程开发(SSH/Dev Container)刚启动时立刻出现——Git 状态加载有延迟,标题要等几秒才更新 - 避免用
${fileBasename}或${fileDirname}:它们属于旧版变量,在最新 VSCode 中已弃用,部分版本会静默失效
最常被忽略的一点:变量是否生效,和你编辑的是用户级还是工作区级 settings.json 强相关。工作区配置优先级更高,可能覆盖你的修改——检查右下角状态栏是否显示“Workspace Settings”,再确认对应 JSON 文件里有没有冲突项。











