Sublime Text 不支持语义级“提取未实现接口”,仅能通过正则匹配预设标记(如TODO、throw new Error("Not implemented"))并配合路径过滤实现;它不解析AST,无法识别接口与实现间的逻辑关系。

直接说结论:Sublime Text 本身不支持“提取未实现接口”这种语义级操作,所有所谓“提取”,本质是用正则匹配固定文本模式(如TODO、FIXME、abstract、pass、throw new Error等)+ 路径过滤 + 手动清理。别指望它理解 TypeScript 接口定义或 Java abstract method 的语法结构。
为什么interface X { ... }里没实现的方法根本搜不到
Sublime 是纯文本编辑器,不做 AST 解析。它看到 interface UserService { getUser(): Promise<user>; }</user> 和 class UserSvc implements UserService { } 之间有没有实现,完全无法判断——它只认字符序列。所谓“未实现”,必须靠你预先约定好标记方式。
- 常见可搜模式:
TODO、FIXME、UNIMPLEMENTED、not implemented、throw new Error\("Not implemented"\) - 语言特有信号:Python 里的
raise NotImplementedError;Java 里的throw new UnsupportedOperationException\("Not implemented yet"\) - 绝对不要搜
function.*?{.*?}这类“找空函数体”的正则——它在大文件里极易卡死,且误报率极高(比如匹配到注释、字符串、JSON)
Ctrl+Shift+F 中 Where 栏怎么写才不扫进 node_modules 和 dist
默认不填 Where 就等于全盘扫描,10 万文件起步的项目会卡住 UI 或直接无响应。Where 不是 shell glob,也不是 .gitignore 语法,它是 Sublime 自定义轻量路径规则。
- 正确写法:
./src/**/*.{ts,js,java,py}(显式限定目录+扩展名) - 排除写法:
!./node_modules/, !./dist/, !./build/(!开头,逗号分隔,路径相对项目根) - Monorepo 场景:
./packages/*/src/**/*.{ts,js}(单星号*匹配一级目录,双星号**才递归) - 错例:
~/project/src(绝对路径无效)、./src/**/*.ts --exclude=node_modules(不支持命令行参数)
正则怎么写才能稳定捕获“未实现”上下文整行
只输 TODO 点 Find All,结果只高亮那 4 个字母——这不是 bug,是你没告诉 Sublime “我要整行”。漏掉 ^ 和 $,就永远得不到干净结果。
- 必须锚定:
^.*\bTODO\b.*$(\b防止匹配到TODO_LIST) - 跨文件搜索时,
Ctrl+Shift+F必须勾选Regular Expression,否则^/$不生效 - 关键词含正则元字符要转义:
throw new Error\("Not implemented"\),不是throw new Error("Not implemented") - 大小写敏感默认开启;想忽略,点查找框左侧的
Aa按钮
复制结果后怎么去掉路径前缀和空行
Ctrl+Shift+F 搜索结果页右键 → Copy All,粘贴出来是带 path/to/file.ts:42: // TODO: implement login 这种格式的,不能直接当清单用。
- 先删路径前缀:用
Ctrl+H,查找^[^:]+:\d+:\s*(注意末尾空格),替换为空 - 再删空行:查找
\n\s*\n,替换为\n;或安装Remove Empty Lines插件一键处理 - 行首/行尾空格残留:查找
^\s+|\s+$(勾选正则),替换为空 - 如果结果超 1000 行,检查
Preferences → Settings是否设了"find_result_max_files": 20000,否则Ctrl+A只选中可视部分
真正麻烦的不是怎么搜,而是“未实现”在不同团队、不同语言、不同年代代码里写法千差万别——有人写 // FIXME,有人写 /* TODO */,还有人只留个 console.log("unimplemented")。正则能做的只是穷举已知模式,没法覆盖所有隐式约定。每次提取前,先花两分钟翻翻项目里实际怎么写的,比调正则重要得多。


















