VS Code注释颜色需通过textMateRules配合精确scope设置,禁用已废弃的comments配置;须用十六进制色值,按语言ID嵌套定制,并重启窗口生效。

注释颜色不能直接搜“注释颜色”改
VS Code 没有独立的 comments.color 设置项,你在设置里搜“注释颜色”找不到开关,是因为它被包裹在主题的语法着色规则里。所有注释都属于 TextMate 语法范畴,颜色由当前启用的主题(如 One Dark Pro)定义,而非编辑器全局配置。
常见错误现象:"editor.tokenColorCustomizations": { "comments": "#ff0000" } 写了但完全没反应——这不是配置写错了,而是这个写法早已失效(自 VS Code 1.80+ 起弃用),且不匹配实际生效的 scope。
- 必须用
textMateRules+scope精准覆盖 - 颜色值只能是十六进制(如
#569cd6),不支持rgb()或英文名(如blue) - 改完必须执行
Developer: Reload Window(Cmd+Shift+P或Ctrl+Shift+P),热更新不可靠
怎么确认注释实际触发的 scope
不同语言、不同注释格式(//、#、/* */、<!-- -->)底层对应不同 TextMate scope,比如:
-
comment:通用兜底,覆盖多数情况 -
comment.line和comment.block:分别匹配行注释与块注释 -
comment.line.double-slash:JavaScript/TypeScript 的//注释(很多主题只认这个) -
punctuation.definition.comment:某些主题把注释符号本身(如//)单独归为此类
排查方法:把光标停在任意注释上,按 Cmd+Shift+P(macOS)或 Ctrl+Shift+P(Windows/Linux),运行 Developer: Inspect Editor Tokens and Scopes,右上角会列出当前激活的所有 scope。优先照着这里显示的 scope 写规则。
按语言单独设注释色更可控
如果你只想让 Python 的 # 注释变蓝、JS 的 // 注释变橙,不要全用 comment 统一覆盖,而是走语言专属路径:
- 在
settings.json中使用带语言 ID 的嵌套结构,例如:"[python]": { "editor.tokenColorCustomizations": { "textMateRules": [{ "scope": "comment", "settings": { "foreground": "#0000FF" } }] } } - 同理可加
"[javascript]"、"[typescript]"、"[css]"等块 - 这样能避免影响 Markdown 或 Shell 脚本里的注释(它们可能用不同 scope)
- 注意:语言 ID 必须和右下角状态栏显示的一致(如
shellscript不是bash)
Better Comments 插件和原生注释色是两套系统
Better Comments 不修改基础注释颜色,而是叠加一层语义高亮——它只对带特定前缀(如 TODO、FIXME、//!)的注释生效,且有自己的 color 规则,和 textMateRules 互不干扰。
- 默认只认大写字母纯 tag:
"BUG"✅,"bug"❌,"BUG_FIX"❌ - 单字符前缀(
!、?)必须紧贴//后零空格://!✅,// !❌ - 要支持
.md或.sh文件,得手动加"better-comments.languageSupport": ["markdown", "shellscript"] - 它的颜色不会覆盖你用
textMateRules设的普通注释色,两者可以共存
真正容易被忽略的是:同一个注释行里,// TODO 的 TODO 部分由 Better Comments 上色,而前面的 // 和后面的文字仍走 textMateRules;如果你发现颜色断层、局部没变,大概率是这两层规则没对齐。


















