Sublime Text批量替换需用Ctrl+Shift+F跨文件、填“.”路径、启用.*正则、手动Save All;默认单文件、不认正则、不自动保存,易误改变量或路径。

Sublime Text批量查找替换不是 Ctrl+H 点一下 Replace All 就完事的事——它默认只动当前文件、不跨目录、不认正则、不自动保存,硬上大概率把 user_id 改成 user_name,或把路径 src/utils.js 里的下划线也干掉。
Ctrl+Shift+F 打不开?先确认项目已加载
按了没反应,90% 是因为没进“项目模式”:左下角状态栏必须显示类似 ~/my-project/ 的路径。只打开单个文件时,find_in_files 面板会灰显或仅限“Open Files”。必须通过 File → Open Folder… 重新选中项目根目录。
- 检查
Preferences → Key Bindings – User,搜"ctrl+shift+f",删掉插件冲突项 - 原生绑定应为:
{"keys": ["ctrl+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"}} - 仍无效?临时禁用所有插件逐个排查
Where 框填什么才真正扫整个项目?
Where 不是路径补全框,填错一个字符就漏掉 90% 的文件。留空 ≠ 全项目,它等价于“只搜当前已打开的标签页”。
- 整个项目:必须填单个英文点
.(不是./,也不是./src) - 只改业务 JS:
./src/**/*.js(双星号**才递归子目录) - 排除
node_modules和dist:., -node_modules/, -dist/(统一用正斜杠/,Windows 上也一样) - Linux/macOS 路径区分大小写:
./SRC和./src是两个目录
正则替换总出错?盯住 $1、(?s) 和括号转义
Sublime 的正则引擎是 PCRE 风格,但替换语法是自研的:. 默认不匹配换行符,捕获组引用只能用 $1,不能用 \1;括号、点号等元字符必须手动转义。
- 启用正则:必须点右下角
.*图标(变蓝才算激活),或按Alt+R - 把
getUser(id)改成getUser({ id }):查找填getUser$$([^)]+)$$,替换填getUser({ $1 })(括号要转义) - 删独立的
console.log行:查找填^[ \t]*console\.log$$[^)]*$$;[ \t]*$,替换留空(.和$要转义,^和$锁定整行) - 跨行匹配必须加
(?s)前缀,例如(?s)foo.*bar才能匹配foo\nbar
Replace All 后文件没保存?这不是 Bug,是设计
Sublime 不会自动保存被修改的文件——所有改动都在内存里,关掉未保存的标签页,修改直接丢弃。
- 点完
Replace All,文件标签页出现星号*是正常现象 - 必须手动执行
File → Save All,或快捷键Ctrl+K然后Ctrl+B(Windows/Linux);macOS 是Cmd+K→Cmd+B - 大文件(>10MB)可能被跳过,右下角状态栏看编码是否为
UTF-8;非 UTF-8 编码文件默认不参与替换 - 如果某次替换后发现部分文件没变,先检查它们是否是只读(右下角显示
RO),或者是否被Where路径过滤掉了(比如写了**.ts却想改.js)
最危险的不是不会用,而是忘了自己正在操作的是纯文本——所有“看起来像”的东西,Sublime 都照单全收。每次点 Replace All 前,务必先点 Find All 看高亮数量和上下文是否符合预期;涉及重命名变量、导出名等公共标识符时,Git commit 或备份不可跳过。


















