todo highlight 失效主因是插件冲突或配置错误:语言服务未激活、keywords 字段名/格式错误、语言白名单缺失、正则捕获组错位及设置层级覆盖。

装了 TODO Highlight 插件但 // TODO 还是灰色?不是插件没装对,而是它大概率被其他插件静默拦截或配置被覆盖——高亮失效的根因从来不在“要不要装”,而在“谁在抢控制权”和“配置有没有真正生效”。
为什么 TODO Highlight 明明启用却完全不触发
最常见的情况是另一个插件劫持了文本解析链路,导致 TODO Highlight 根本收不到文档内容。比如 Volar 或 TypeScript Server 启动失败时,VS Code 会退化为纯 TextMate 语法解析,所有基于语义层的高亮(包括 TODO Highlight 的关键词扫描)都会跳过。
- 打开
Output → Log (Extension Host),搜failed to activate或language server crashed,常能看到某服务卡在 waiting 状态 - 右下角语言模式显示正确(如
vue),但实际未激活对应语言服务:点击语言名 → “Configure vue language based settings” → 确保没被files.associations错误覆盖 -
TODO Highlight依赖TextDocumentAPI,而某些插件(如旧版 GitLens 或 Remote-SSH)会在启动阶段阻塞该 API 初始化,重启 VS Code 无效,必须关掉整个窗口再重开
keywords 配置写对了但 REVIEW/BUG 仍不亮
字段名拼错一个字母就彻底静默失效,且 VS Code 不报任何提示。2026 年主流版本用的是 todoHighlights.keywords,不是 todo.highlight.keywords 或 todo.keywords。
- 打开
Preferences: Open Settings (JSON),确认你加的是"todoHighlights.keywords",不是带点的旧字段名 - 值必须是对象数组:
[{"text":"REVIEW","color":"#007acc"}],不能是字符串数组["REVIEW"]或单个对象 -
text值必须全大写、无空格、无标点;// review或# BUG:不匹配,但// REVIEW:和# BUG可以 - 已打开的文件需手动关闭再重开,配置才生效;新建文件自动识别
.vue / .md 文件里 TODO 就是不亮
默认只扫描 javascript、typescript、python 等语言 ID,.vue 被识别为 vue,.md 是 markdown,都不在白名单里。
- 补全
"todoHighlights.languages": ["javascript", "typescript", "vue", "markdown"] - 确保
.vue文件右下角显示的是Vue,不是HTML;若显示 HTML,点击切换,或在文件顶部加// @ts-check辅助推断 - 想让
.md中的<!-- TODO -->也被扫到,还得加"todoHighlights.include": ["**/*.md"] - 注意:插件默认不解析代码块内的字符串字面量,
```js // TODO ```里的不会触发
高亮了但光标跳转停在 // 上而不是文字后
这是正则捕获组错位导致的。插件靠正则第 3 组((.*))定位跳转锚点,如果正则把注释符也包进去了,光标就卡在斜杠上。
- 除非必要,别动
todoHighlights.regex;优先用keywords数组方式扩展 - 如果必须自定义正则,确保只捕获 tag 后的内容,例如:
/(//|#)\s*(TODO|FIXME):?\s+(.*)$/,其中(.*)是第 3 组 - 避免写成
/(// TODO)/这种全匹配式,它会把//一起捕获,跳转目标就错了 - JSON 中反斜杠要双写:
"\s*",写成"s*"会解析失败
真正麻烦的不是配不配得出来,而是不同项目里 .vscode/settings.json 和全局设置互相覆盖,改了这里忘了那里。每次调完记得检查状态栏是否显示 TODO Highlight 字样——没这个,说明插件压根没挂载成功。











