sublime text跨文件搜索必须通过ctrl+shift+f(win/linux)或cmd+shift+f(macos)触发,且需处于项目模式(file→open folder…),否则不可用;where框填“.”表示全项目,填错或留空将导致漏搜;正则替换用$1而非\1,.不匹配换行需加(?s);替换后需手动save all,否则丢失;高风险操作前务必git commit。

Sublime Text 的跨文件搜索不是“按 Ctrl+F 再点全部替换”就能生效的——它必须在项目上下文中运行,Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)才是唯一有效入口,其他快捷键都只作用于当前文件。
为什么 Ctrl+Shift+F 打不开或灰显?
根本原因只有两个:没进项目模式,或快捷键被劫持。
- 没进项目模式:单文件打开时,左下角状态栏不显示路径(如
~/my-project/),Ctrl+Shift+F面板就不可用;必须通过File → Open Folder…重新加载整个文件夹 - 快捷键被劫持:常见于
SideBarEnhancements、Theme - So Da Black等插件;打开Preferences → Key Bindings – User,搜"ctrl+shift+f"或"cmd+shift+f",删掉冲突项 - 不确定谁占用了?去
Key Bindings – Default底部确认原生绑定是否存在:{"keys": ["ctrl+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"}}
Where 输入框到底填什么才真正跨文件?
它不是路径补全框,也不是 shell,而是 Sublime 自定义的路径过滤表达式。填错等于白忙活。
- 填
.(单个英文点):表示整个项目根目录及其所有子目录,最常用也最安全 - 填
./src/**/*.js:只搜src/下所有.js文件(双星号**表示递归) - 排除
node_modules:写成., -node_modules/(注意斜杠方向统一为/,Windows 上也一样) - 逗号分隔多规则:
./src/**/*.ts, ./tests/**/*.ts;不支持空格、不支持*.+(ts|tsx)这类正则语法 - 留空 ≠ 全项目:实际等价于“只搜当前已打开的标签页”,90% 的漏搜都源于此
正则替换总出错?盯住 .、$1 和换行
Sublime 的正则引擎是 PCRE 风格,但替换语法是自研的,和 Python、JavaScript 都不完全一致。
-
.默认不匹配换行符:哪怕开了.*按钮,foo.*bar也找不到跨两行的foo\nbar;真要跨行,必须加(?s)前缀:(?s)foo.*bar - 捕获组引用用
$1、$2,不是\1;例如把getUser(id)改成getUser({ id }),查找填getUser$$([^)]+)$$,替换填getUser({ $1 }) - 删独立
console.log行:查找填^[ \t]*console\.log$$[^)]*$$;[ \t]*$,替换留空;注意.和$要转义,^和$锁定整行 - 编码不匹配会导致乱码:右下角看状态栏编码,若非
UTF-8,先点它 →Reopen with Encoding → UTF-8
替换后内容丢了?这不是 Bug,是设计
Sublime 的 Replace All in Files 只改内存,不自动保存,也不标记为“已修改”。关掉未保存的标签页,改动直接清空。
- 替换完必须手动执行
File → Save All,或快捷键:Ctrl+K松开 →Ctrl+B(Windows/Linux),macOS 是Cmd+K→Cmd+B - 别信右上角星号
*—— 批量操作后几十个标签页,没人能盯全 - 高风险操作前务必
git commit -m "before global replace";出错时git checkout .秒级回滚 - 最常被忽略的是
index_files设置:大项目含完整node_modules时,不关它,搜索会卡死或漏文件(在Preferences → Settings中设"index_files": false)











