sublime text全局搜索替换需先加载项目目录、正确填写where路径、启用正则并手动保存。默认不跨文件、不自动保存,易误改;ctrl+shift+f无效多因未进项目模式;where填“.”才搜全项目;正则替换用$1且需转义;操作前务必git备份。

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"或"cmd+shift+f",删掉插件冲突项 - 原生绑定应为:
{"keys": ["ctrl+shift+f"], "command": "show_panel", "args": {"panel": "find_in_files"}} - 仍无效?临时禁用所有插件(
Preferences → Package Control → Disable Package)逐个排查
Where 字段填什么才真正扫整个项目?别信“留空=全项目”
Where 不是路径补全框,是 Shell 风格过滤表达式。留空 ≠ 全项目,它等价于“只搜当前已打开的标签页”。填错一个字符,就可能漏掉 90% 的文件。
- 整个项目:必须填单个英文点
.(不是./,也不是./src) - 只改业务 JS:写
./src/**/*.js(双星号**才递归子目录) - 排除
node_modules和dist:用逗号分隔 + 减号前缀,如., -node_modules/, -dist/ - Windows 上也必须用正斜杠
/;路径区分大小写:./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 就等于把所有文件变成“脏状态”。
- 替换前务必执行:
git add -A && git commit -m "before global replace" - 替换后立刻按
Ctrl+K松开,再按Ctrl+B(Windows/Linux),macOS 是Cmd+K→Cmd+B - 别依赖右上角星号
*提示——批量操作后几十个标签页,没人能盯全 - 最常被忽略的其实是
"index_files": false设置:项目含大node_modules时,不关它,搜索会卡死或漏文件











