默认安装后仅大写紧贴注释符的todo/fixme被高亮,小写或带空格变体无效;需确认插件启用、检查settings.json配置、扩展keywords或regexes、补全languages和include路径、自定义highlight样式并修正正则捕获组。

默认安装后,TODO 和 FIXME 会被高亮,但仅限大写、紧贴注释符号(如 // TODO:),小写、带空格或标点的变体(如 // todo: 或 // TODO :)不会触发 —— 这是多数人第一次用就“看不见高亮”的根本原因。
确认插件已启用且未被工作区设置覆盖
插件状态异常是高亮失效最常见源头。即使安装了,也可能被禁用或被 .vscode/settings.json 中的冲突配置压制。
- 打开扩展面板(
Ctrl+Shift+X),搜Todo Highlight,确认作者是wayou,右侧显示“已启用”而非“启用” - 检查当前项目根目录下是否存在
.vscode/settings.json;若存在,搜索"todo.highlight"相关字段,临时重命名该文件并重启 VSCode 测试是否恢复高亮 - 全局设置(
settings.json)中若写了"todo.highlight.enabled": false,需删掉或设为true
扩展关键词匹配:让 FIXME 和自定义标记真正生效
插件默认只识别 TODO 和 FIXME,但前提是它们出现在标准注释上下文中(如 // FIXME、/* FIXME */),且不区分大小写 —— 实际上默认是**区分大小写**的,这点文档常误导人。
- 在
settings.json中添加或修改"todo.highlight.keywords"字段,明确列出所有要匹配的字符串(不是正则):
"todo.highlight.keywords": [ "TODO", "FIXME", "HACK", "REVIEW" ]
- 若需匹配小写形式(如
// fixme),必须改用正则模式:"todo.highlight.regexes",例如:"/(?i)\b(fixme|todo)\b/g" - 注意:正则中
\b是单词边界,防止误命中变量名里的todo;(?i)开启忽略大小写
排除语言与路径干扰:为什么 .vue 或 .md 文件里不亮
插件默认跳过非编程语言文件(如 .json、.md、.yml),也不扫描 node_modules 或 dist —— 但这个“跳过”逻辑有时会误伤你的真实目标文件。
- 检查
"todo.highlight.languages"设置:若值为["javascript", "typescript"],那.vue文件就不会扫;应补全为["javascript", "typescript", "vue", "markdown"] -
"todo.highlight.include"控制扫描路径,推荐显式声明:["**/*.js", "**/*.ts", "**/*.vue", "**/*.py", "**/*.md"] -
"todo.highlight.exclude"建议固定写入:["**/node_modules/**", "**/dist/**", "**/build/**", "**/.git/**"],避免漏配导致性能下降
高亮颜色与跳转行为:别让红色 FIXME 和黄色 TODO 混在一起
仅靠背景色区分不够直观,尤其当编辑器主题本身偏暗时;更关键的是,点击高亮行左侧的圆点跳转,有时会停在 // 符号上而非文字开头 —— 这是正则捕获组没对齐的典型表现。
- 用
"todo.highlight.customHighlight"单独控制每种关键词样式,例如:
"todo.highlight.customHighlight": {
"TODO": {
"color": "#007acc",
"backgroundColor": "#d6eaf8",
"overviewRulerColor": "#007acc"
},
"FIXME": {
"color": "#e74c3c",
"backgroundColor": "#fadbd8",
"overviewRulerColor": "#e74c3c"
}
}
- 确保
"todo.highlight.defaultStyle"不与customHighlight冲突;后者优先级更高 - 跳转错位问题多出自
"todo.highlight.regexes"配置不当:正则中不要把注释符号(//、#)纳入捕获组,否则光标会定位到斜杠位置
真正麻烦的不是配不亮,而是配亮之后发现 FIXME 在 .vue 的 <script></script> 块里有效,但在 <template></template> 的 HTML 注释里失效 —— 这需要额外加一条正则匹配 <!-- FIXME -->,且必须确保 html 在 languages 列表中。细节多,但每一步都有明确开关可调,不需要猜。











