ctrl+shift+f 搜索跳过 .zip/.png 是因 binary_file_patterns 默认将其标记为二进制文件,导致内容扫描被静默跳过;该设置控制读取前的文件类型判定,优先级高于 where 过滤和 file_exclude_patterns,修改后需重启或重开面板生效。

Ctrl+Shift+F 为什么还在搜 .zip/.png 文件?
因为 Sublime 默认把 *.zip、*.png、*.wasm 等后缀归为二进制,直接跳过内容扫描——不是你没写排除规则,而是它压根不读这些文件。即使你在 Where 输入框写了 ., -*.log,也拦不住它对二进制的“静默跳过”。
真正起效的配置只有 binary_file_patterns
这个设置决定哪些扩展名会被当作二进制文件跳过(不只是搜索,还影响 Ctrl+P 和索引)。想让 .gql 或 .schema 这类自定义文本格式被搜到,必须从该列表里删掉它们;反之,若想彻底跳过 .min.js 和 .map,就得加进去。
- 打开
Preferences → Settings – User,添加或修改:{ "binary_file_patterns": ["*.jpg", "*.png", "*.zip", "*.pdf", "*.wasm", "*.bundle"] } - 空数组
[]表示“不跳过任何文件”,但会拖慢搜索(尤其含大图片或压缩包时) - 别写成
"*.min.js"就以为能排除——它只控制“是否尝试读取”,不控制“是否匹配”,匹配逻辑在Where或file_exclude_patterns里 - 改完需重启 Sublime 或至少重开所有面板,否则右下角状态栏仍可能显示
Binary
怎么确认某个文件被误判为二进制?
直接打开那个文件:如果右下角状态栏显示 Binary,说明它已被 binary_file_patterns 拦截;如果是 UTF-8 或其他编码,则问题不在这里。
- 常见误判场景:
.log文件含非 ASCII 字节、.md带 BOM、自定义 DSL 文件(如.graphql)未被显式放行 - 临时验证:把疑似文件后缀改成
.txt再搜,如果能命中,基本可锁定是binary_file_patterns问题 - 别指望
file_exclude_patterns或Where输入框能绕过这个机制——它们发生在“读取之后”,而binary_file_patterns是“读取之前”的闸门
Where 输入框无法替代 binary_file_patterns
Where 输入框(比如 ., -*.log)只过滤文件名,不干预 Sublime 对文件内容类型的判断。哪怕你用 -*.zip 排除,它仍会尝试打开每个 .zip 文件——然后发现是二进制,立刻丢弃。这不是漏搜,是根本没送进正则引擎。
- 所以
Where里的-*.zip实际无效:既不能加速(因为已跳过),也不能防止卡顿(因为仍要探查文件头) - 真正影响性能的是
binary_file_patterns里那些 Sublime 认为“肯定不含文本”的扩展名——删错一个,可能让搜索卡死在 500MB 的package-lock.json上 - 最稳妥的做法:先清空
binary_file_patterns测试是否搜到目标,再逐步加回确认无文本的扩展名
binary_file_patterns 的作用时机——它发生在磁盘读取前,比所有路径过滤都早一步。一旦文件被标为 Binary,后续所有搜索逻辑都收不到它的内容。











