file_exclude_patterns是唯一能排除文件类型的配置项,必须写入.sublime-project的folders对象内才对Ctrl+Shift+F生效;用户设置中该字段仅影响Ctrl+P,Where输入框无法排除文件类型,只控制路径。

file_exclude_patterns 是唯一能排除文件类型的配置项
Sublime Text 的全局搜索(Ctrl+Shift+F / Cmd+Shift+F)默认不读 .gitignore,也不认 folder_exclude_patterns 里写的文件名——后者只管文件夹,对 package-lock.json、tsconfig.json、*.log 这类完全无效。
真正起作用的是 file_exclude_patterns,但它必须写在项目配置(.sublime-project)的 "folders" 对象内部才对全局搜索生效。用户设置(Preferences → Settings – User)里加这个字段,只影响 Ctrl+P,不影响 Find in Files。
-
file_exclude_patterns值是字符串数组,如["*.log", "package-lock.json", ".env"] - 匹配基于文件 basename,不区分路径层级:
"*.log"会跳过src/a.log和dist/b.log - 不支持正则,只支持简单通配符:
"README.*"✅,"README\.(md|txt)"❌ - 大小写敏感:Linux/macOS 下
"*.LOG"不会匹配error.log
Where 输入框不能排除文件类型,只能排除路径
搜索面板右下角的 Where 输入框控制的是「扫描哪些目录」,不是「跳过哪些文件」。你在里面写 ./ -/node_modules/ 或 src/**/*.js,都只是路径筛选,和文件后缀无关。
想让 Find in Files 真的不打开 webpack.config.js 或 yarn.lock,只靠 Where 是做不到的——它不会跳过这些文件,只会把它们读进来再匹配内容。这时候如果文件太大或含二进制内容,还可能卡住搜索进程。
- 误操作常见:在
Where里填*.log或-*.log—— Sublime 直接忽略,不报错也不生效 - 正确做法:把
"*.log"加进.sublime-project的file_exclude_patterns - 临时补救:若没项目配置,可先用
Where限定为src/**/*.{js,ts,jsx,tsx},但这是白名单式限制,不是排除
binary_file_patterns 会影响搜索结果完整性
Sublime 默认把 binary_file_patterns 列表里的扩展名当作二进制文件处理,直接跳过内容扫描。哪怕那个文件其实是纯文本(比如误命名为 config.bin),也不会出现在搜索结果中。
这个配置也必须放在 .sublime-project 的 "folders" 内部才对 Find in Files 生效;用户设置里改了,只影响侧边栏和索引,不影响实时搜索。
- 常见默认值:
["*.exe", "*.dll", "*.so", "*.dylib", "*.zip", "*.tar", "*.gz"] - 如果你搜一个
build/output.bin文件里的字符串却找不到,先检查它是否被binary_file_patterns拦截了 - 安全清空方式:
"binary_file_patterns": [],但注意这会让 Sublime 尝试读取所有文件,可能变慢 - 别和
file_exclude_patterns混用:前者决定“是否解析内容”,后者决定“是否纳入索引范围”
为什么改了设置还是搜到不该出现的文件
最常被忽略的一点:Sublime 的 Find in Files 只对当前「已添加到项目中的文件夹」生效。如果你只是用 File → Open File 打开了几个零散文件,没有通过 File → Open Folder 添加根目录,那任何 file_exclude_patterns 或 folder_exclude_patterns 都不会起作用。
- 确认左下角状态栏显示项目路径(如
~/my-app/),而不是No project - 检查
.sublime-project文件是否语法合法:JSON 格式错误、逗号缺失、引号不闭合都会导致整个"folders"配置被静默丢弃 - 修改后无需重启,但新加入的文件要等右下角
Indexing…完成才进入过滤逻辑 - 验证方法:搜一个明显在
package-lock.json里的字符串(如"version"),如果结果里仍有该文件路径,说明file_exclude_patterns没生效
真正生效的过滤依赖三层结构:项目存在、file_exclude_patterns 在正确 JSON 层级、且路径匹配规则写得不越界。漏掉任意一层,文件就会照常被扫进来——而 Sublime 从不提示你哪一层失效了。










