最直接有效的办法是修改 editor.tokencolorcustomizations,但需用 developer: inspect editor tokens and scopes 确认真实 scope,配置须写在 settings.json 中,避免主题覆盖或 scope 不匹配。

VSCode 里改注释颜色,最直接有效的办法是改 editor.tokenColorCustomizations,但 90% 的人配完没反应,不是配置写错了,而是 scope 没抓准、主题覆盖了、或者改到了错误的配置层级。
怎么确认注释的真实 scope
别猜 comment 或 comment.line ——不同语言、不同主题下,注释实际触发的 TextMate scope 可能完全不同。比如 Python 的 # 注释在某些主题里归到 punctuation.definition.comment,而 JavaScript 的 // 可能是 comment.line.double-slash。
必须用 VSCode 内置命令定位:
- 把光标停在任意一段注释上
- 按
Cmd+Shift+P(macOS)或Ctrl+Shift+P(Windows/Linux) - 输入并执行
Developer: Inspect Editor Tokens and Scopes - 看右上角 “Scope” 列表,优先取带语言后缀的(如
comment.line.number-sign.python)
面板右侧的 foreground 值就是当前生效的颜色,改完可立刻比对是否命中。
配置位置和格式不能错
editor.tokenColorCustomizations 必须写在 settings.json 里,不是 UI 设置界面,也不是 workbench.colorCustomizations ——后者只管 UI 元素(侧边栏、状态栏),对注释无效。
常见有效写法有三种:
- 全局统一:在顶层
"editor.tokenColorCustomizations"下加"textMateRules"数组,每条规则含"scope"(可为字符串或数组)和"settings": {"foreground": "#xxx"} - 按语言隔离:用
"[python]"或"[javascript]"作为 key,再嵌套"comments"对象(注意这里是comments,不是comment) - 混合使用:比如先全局设
comment,再为 Python 单独覆盖comment.line.number-sign.python,避免 JS 注释被误影响
值必须是十六进制色码(如 #6a9955),不支持 blue 或 rgb(106,153,85)。
为什么改了没反应?三大典型原因
多数人卡在这三步,不是配置不会写,是环境没理清:
-
第三方主题锁死了注释样式:One Dark Pro、Material Theme 等主流主题自带高优先级的
comment规则,会直接覆盖你的textMateRules。临时换回 VSCode 自带的Default Dark+测试,如果变色了,就确认是主题冲突 -
scope 写得太宽或太窄:只写
"comment"可能被更具体的 scope(如comment.line.double-slash)覆盖;反过来,写comment.line.double-slash.javascript又对 Python 无效。建议先用 Inspect 工具看实际触发链,再决定用单个 scope 还是数组 -
没重启编辑器窗口:改完
settings.json后,必须执行Developer: Reload Window(Cmd+Shift+P→ 输入执行),热更新不保证生效,尤其涉及 token 颜色时
要不要用 Better Comments 扩展?
它和原生注释着色是两回事:Better Comments 是给 TODO:、FIXME: 这类语义化标记加图标和颜色,靠的是自定义前缀(如 !、?),不是改 // 或 # 本身的颜色。
如果你要的是:
- 所有
//统一变灰 → 走editor.tokenColorCustomizations - 让
// TODO显示成橙底白字 + ⚠️ 图标 → 装Better Comments并配"better-comments.tags"
两者可以共存,但别混淆目标。扩展配置在 settings.json 里是独立字段,不影响语法高亮逻辑。
真正难的不是写那几行 JSON,而是搞清当前文件里“这段注释到底被识别成了什么”,以及“哪个主题/插件正在悄悄覆盖你”。Inspection 工具不是可选项,是必经步骤。











