todotree插件默认不识别@todo标记,因其仅匹配大写的todo、fixme、bug等且大小写敏感;需手动配置正则表达式,如"(//|#|/|^)s(todo|fixme|bug|@todo)",并注意转义和关键词大小写。

TodoTree插件为什么找不到@todo标记?
默认情况下,TodoTree不会识别所有常见待办标记,比如@todo、// TODO:或/* FIXME */——它只启用了一小部分(如TODO、FIXME、BUG),且大小写敏感。如果你写了@todo却没出现在侧边栏,大概率是正则没配。
解决方法是手动扩展todo-tree.regex.regex配置:
"todo-tree.regex.regex": "(//|#|/\*|^)\s*(TODO|FIXME|BUG|@todo|@fixme|XXX)"
注意几点:
-
@todo要加在括号里,和其它关键词并列,不能写成@TODO(除非你额外加todo-tree.general.ignoreCase: true) -
/\*要双反斜杠转义,否则正则解析失败,插件直接不工作 - 如果项目用 TypeScript 或 JSX,还需确认
todo-tree.general.includeGlobs包含**/*.ts、**/*.tsx等后缀
如何让TodoTree只显示当前文件夹的待办,而不是整个工作区?
默认行为是扫描整个打开的文件夹(即 VSCode 的 root folder),但大型单体仓库里,你可能只想关注子模块里的TODO。这时候靠todo-tree.filtering.excludeGlobs硬排除不现实,更可靠的是切换“作用域”。
操作路径:点击 TodoTree 侧边栏右上角的三个点 → Change Scope → 选 Folder(不是Workspace)。这个选项只对当前打开的文件夹生效,且会记住上次选择。
补充说明:
- 如果项目是多根工作区(multi-root workspace),
Folder模式下每个根目录单独计算,互不影响 -
todo-tree.filtering.excludeGlobs仍会生效,比如加上**/node_modules/**能避免卡顿 - 别误点
File模式——它只显示当前编辑器标签页的内容,基本没实用价值
点击TodoTree条目跳转失败,提示“Unable to open ‘xxx’: File not found”
这是路径解析错位导致的,常见于使用符号链接(symlink)的项目、WSL 路径映射、或 Git 子模块嵌套结构中。TodoTree 解析出的文件路径是相对工作区根目录的,但如果实际文件被软链到别处,VSCode 就找不到物理位置。
验证方式:右键某条目 → Copy full path,粘贴进终端看是否存在;或者打开该条目所在文件,对比地址栏显示的路径和复制出来的是否一致。
临时缓解办法:
- 在设置里开启
todo-tree.general.followSymlinks: true(仅限 VSCode 1.85+) - 改用绝对路径匹配:把
todo-tree.regex.regex中的行首锚点^删掉,配合todo-tree.general.expandGlobPatterns: true - 最稳妥的是避免在 symlink 目录下直接打开工作区,改用真实路径打开
为什么修改了todo-tree.tree.showCountsInTree没反应?
这个配置控制是否在树形节点旁显示数字(如 src/utils/ (3)),但它依赖另一个前提:todo-tree.tree.showInExplorer 必须为 true。如果关掉了 Explorer 面板集成,计数就完全不渲染——不是 bug,是设计如此。
检查顺序建议:
- 先确认
todo-tree.tree.showInExplorer是true - 再确认
todo-tree.tree.showCountsInTree设为true - 重启 VSCode(部分 UI 配置热更新不生效)
- 如果用了自定义图标主题(如 Material Icon Theme),某些主题会覆盖计数样式,可临时禁用测试
另外,计数只统计当前作用域(Folder / Workspace)下的匹配行数,不是文件个数。一行两个TODO算两条,不是一条。











