todo tree最实用在于将todo等标记实时聚合成侧边栏树形结构,支持点击跳转、图标分类、右键标记完成,真正解决“找不到、忘清理、难协作”问题;而todo highlight仅做行内高亮,缺乏结构化管理能力。

用 Todo Tree 插件最醒目,不是因为颜色多,而是它把所有 TODO、FIXME 等标记实时聚合成侧边栏树形结构,点击即跳转,还能带图标、分类、过滤——高亮只是副产品,真正解决“找不到、忘清理、难协作”这三件事。
为什么 Todo Tree 比 TODO Highlight 更实用
TODO Highlight 只做行内背景色渲染,而 Todo Tree 是基于 VSCode 的 TextDocument API 实时解析注释结构,能准确区分 // TODO 和字符串里的 "todo",也不会被 /* TODO */ 或 # FIXME 这类多格式搞乱。它默认就支持 .vue、.astro、.md 里的注释块,不用手动补 languages 或 include 路径。
- 侧边栏常驻,不依赖你记得按
Ctrl+Shift+P呼出列表 - 右键节点可直接加 ✅ 前缀标记完成,操作闭环
- 默认识别
TODO、FIXME、XXX,大小写敏感但可配正则覆盖 - 不扫描
node_modules、dist等目录,性能影响极小
Todo Tree 自定义关键词必须配正则才能匹配小写或带标点的变体
写 // todo: 或 // TODO : 不会进树,因为插件默认只认紧贴注释符后的大写词 + 可选冒号。要让它生效,得改 todo-tree.general.tags:
- 纯字符串数组只做精确匹配:
["TODO", "FIXME", "todo", "fixme"]→ 仍不匹配// TODO :中的空格 - 必须用正则开启忽略大小写:
["(?i)todo", "(?i)fixme", "(?i)review"] - 如果团队用
## BUG这种 Markdown 风格,得额外配todo-tree.general.tagRegex,例如:/##\s*(BUG|REVIEW):?\s+(.*)$/,确保(.*)是第 2 组,否则跳转错位
Todo Tree 高亮颜色和图标要靠 customHighlight 控制
todo-tree.highlights.customHighlight 是对象,不是数组;每个 key 必须是纯标签名(不能带 // 或空格),值里 icon 必须是 VSCode 内置 codicon 名称(如 eye、bug、zap):
"todo-tree.highlights.customHighlight": {
"REVIEW": { "icon": "eye", "color": "#FFA500", "foreground": "#000000" },
"BUG": { "icon": "bug", "color": "#FF3B30", "foreground": "#FFFFFF" }
}
- 漏掉
foreground会导致文字在深色主题下看不清 - 误写成数组(如
[{"REVIEW": {...}}])会完全失效 - 图标只在侧边栏显示,不影响编辑器内行高亮样式
扫描不到某些文件?先查 VSCode 的 files.exclude 而不是插件设置
Todo Tree 默认继承 VSCode 全局和工作区的 files.exclude 和 search.exclude 配置。如果你在 src/utils/ 下写了 // TODO 却没出现在树里,大概率是这些路径被某层 exclude 规则挡住了:
- 检查
.vscode/settings.json里有没有类似"**/utils/**": true的误配 - 检查用户设置中
Files: Exclude是否包含通配符如"**/src/**" - 插件自身的
todo-tree.general.includeGlobs和todo-tree.general.excludeGlobs优先级更高,适合精准控制,例如:["**/src/**", "**/docs/**"]
真正容易被忽略的是:即使插件配置全对,只要 VSCode 层面把某个目录 exclude 了,Todo Tree 就压根不会读取那些文件——它不绕过编辑器的文件系统访问策略。











