Todo Tree插件默认仅识别大写TODO、FIXME、XXX,小写或带标点的变体需自定义正则;扫描范围受VSCode exclude配置影响;跳转错位源于tagRegex捕获组不准确;团队需统一配置至.settings.json。

Todo Tree插件为什么扫不到我的 TODO 注释
默认只识别大写的 TODO、FIXME、XXX,小写 todo 或带空格/标点的变体(比如 // todo:)直接被忽略。
常见错误现象:写完 // todo 优化这里,左侧树里空空如也;或者用 Python 的 # TODO 能扫到,但 # todo 就不出现。
- 打开设置(
Ctrl+,),搜todo-tree.tree.showTags,确保为true - 搜
todo-tree.general.tags,改为你需要的正则数组,例如:["TODO", "FIXME", "todo", "fixme"]
- 注意:值是字符串数组,不是单个字符串;大小写敏感,想匹配大小写混用就用正则,比如
"(?i)todo" - 如果项目用了自定义注释前缀(如
## BUG),也要加进这个数组,否则不会进树
扫描范围总漏掉某些文件或文件夹
不是插件“没扫”,而是 VSCode 默认跳过 node_modules、.git 等目录,且 Todo Tree 会继承 VSCode 的 files.exclude 和 search.exclude 配置。
使用场景:你在 src/utils/ 下写了 TODO,但面板里没显示,大概率是该路径被某层 exclude 规则挡住了。
- 检查工作区设置里的
search.exclude,删掉误配的通配符(比如"**/utils/**": true) - 确认没有在
.vscode/settings.json里写死排除了目标目录 - Todo Tree 自身有
todo-tree.general.includeGlobs和todo-tree.general.excludeGlobs,优先级高于全局 search 排除,适合精准控制 - 如果只查当前打开的文件,记得关掉
todo-tree.general.scanMode的workspace模式,切到openFiles
点击树节点跳转错行或定位偏移
本质是正则捕获组没对齐 —— 插件靠正则从注释行提取内容,如果正则把注释符号(//、#)也包进去了,光标就会停在斜杠上,而不是文字开头。
性能影响不大,但每次点击都要手动挪光标,积少成多很烦。
- 检查
todo-tree.general.tagRegex设置,默认值通常够用,别乱改成/(//|#)s*(TODO|FIXME)/这种全捕获写法 - 正确写法应只捕获 tag 后的文字部分,例如:
/(//|#)\s*(TODO|FIXME):?\s+(.*)$/
,其中(.*)是第 3 组,才是跳转锚点 - 如果用了自定义 tag,务必同步更新正则,否则匹配失败会导致整行无法跳转
- Markdown 文件中
<!-- TODO -->这类注释需额外配置正则,原生不支持
多人协作时 Todo Tree 面板显示不一致
根本原因:todo-tree 的配置项没进 .vscode/settings.json,有人本地改了 tags 却没提交,别人拉代码后还是旧规则。
容易踩的坑是以为“装了插件就自动同步”,其实插件行为完全由用户配置驱动,和代码无关。
- 把关键配置写进项目级
.vscode/settings.json,至少包括:todo-tree.general.tags、todo-tree.general.includeGlobs - 避免用
todo-tree.tree.autoRefresh的默认true,它会在文件保存时触发扫描,可能干扰 Git 暂存(尤其大仓库) - 如果团队用 Prettier 或 ESLint,确认它们没格式化掉
TODO前的空格——有些规则会删行首空格,导致正则匹配失败 - CI 或预提交检查里没法跑 Todo Tree,它纯属编辑器侧功能,别指望它替代代码审查
正则写错、exclude 配置嵌套太深、跨语言注释前缀不统一——这三处最容易反复出问题,调一次不等于一劳永逸。


















