Sublime Text跨文件批量替换必须用Ctrl+Shift+F(Windows/Linux)或Cmd+Shift+F(macOS)调出“Find in Files”面板,Ctrl+H仅作用于当前文件;需手动启用右下角.*正则模式、确认Where范围、预览匹配项后Replace All,并务必执行Save All保存所有更改。

用 Ctrl+Shift+F 启动跨文件查找替换,不是 Ctrl+H
Ctrl+H 只作用于当前打开的文件可见区域,哪怕你开了 50 个标签页,它也不会扫其他没激活的文件。真正批量改多个文件,必须用 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)调出「Find in Files」面板。
常见错误是:按完 Ctrl+H 输了内容、点了 Replace All,结果只改了当前文件,其他几十个 .js 文件毫无反应——这不是 Bug,是设计如此。
- 确认左下角状态栏显示项目路径(如
/Users/xxx/my-project),否则说明还没加载项目目录 - 若面板灰显或
Where框只写Open Files,请先通过File → Open Folder…加载整个代码根目录 - Mac 用户若
Cmd+Shift+F无响应,去系统设置禁用 Spotlight 快捷键冲突
正则模式必须手动开启,.* 图标不点等于没开
Sublime 的正则开关是独立且默认关闭的:\d+、^import、$ 这些在没点右下角 .* 图标前,全当普通字符串处理。连点号 . 都不会被识别为通配符。
激活方式有两种:
- 点击面板右下角
.*图标,变蓝即生效 - 按
Alt+R(Windows/Linux)或Cmd+Alt+R(macOS)切换
注意:Ctrl+F、Ctrl+H、Ctrl+Shift+F 三个面板的 .* 状态互不影响,每次换面板都得重新点。
跨行匹配还要额外勾选 . matches newline(或按 Alt+.),否则 . 不吃换行符,console\.log\([^)]*\) 就搜不到多行函数调用。
用 (? 和 <code>(?![a-zA-Z0-9]) 替代 \b 控制边界
\b 在 Sublime 里把下划线 _ 和数字当作单词字符,所以 \buser_name\b 会错误匹配到 username 或 __user_name。想精准替换变量名又不碰字符串和注释,得退一步用否定字符类断言。
例如把 user_name 改成 userName,安全写法是:
Find: (?<![a-zA-Z0-9])user_name(?![a-zA-Z0-9])<br>Replace: userName
如果上下文干净(比如只在 JS 变量声明区操作),加空格前缀 user_name 配合 Whole Word 勾选也够用,但必须人工扫一眼 Find All 结果列表确认无歧义。
别信“看起来像”,Sublime 不理解代码语义——src="user_name"、// user_name is deprecated、const user_name = 全部照单全收。
替换后必须 Save All,否则改动全丢
点完 Replace All,所有目标文件标签页出现星号 * 是正常现象。Sublime 只把变更缓存在内存里,**并未写入磁盘**。关掉窗口、崩溃、甚至切到别的应用再回来,改动就彻底丢失,没有撤销历史可回溯。
务必执行:
File → Save All- 或快捷键:
Ctrl+K然后Ctrl+B(Windows/Linux) - macOS 是
Cmd+K→Cmd+B
大文件(>10MB)可能被跳过;非 UTF-8 编码文件(如 GBK)默认不参与替换;只读文件右下角会显示 RO,需先解除只读;Where 路径写错(比如填了 **.ts 却想改 .js)也会漏文件——这些都得靠 Find All 预览时逐条核对。

















