sublime全局搜索替换必须用ctrl+shift+f(win/linux)或cmd+shift+f(macos),需先加载项目(file→open folder)、where填“.”、启用正则(点.*图标)、替换后手动save all,否则无效或丢修改。

Sublime 的全局搜索替换不是靠 Ctrl+F 或 Ctrl+H 能搞定的,必须用 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)——其他任何组合都进不到跨文件上下文。
Ctrl+Shift+F 按了没反应?先看项目有没有真正加载
面板不弹出、Where 输入框灰显、左下角没路径显示,说明 Sublime 还没进入“项目模式”。它不会自动把单个打开的文件当项目处理。
- 必须通过 File → Open Folder… 选中项目根目录(比如
./my-app),侧边栏出现树形结构才算成功 - macOS 用户注意:
Cmd+Shift+F可能被系统 Spotlight 占用,需在「系统设置 → 键盘 → 快捷键 → Spotlight」里禁用 - 快捷键被插件劫持?打开
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 字段填什么才真正搜整个项目?别信“留空”
Where 留空 ≠ 全项目,它等价于“只搜当前已打开的标签页”,极易漏改或误改。真正表示整个项目的是单个英文点:.(不是 ./,也不是 ./src)。
- 只搜业务代码:
./src/**/*.ts, ./tests/**/*.ts(逗号分隔,斜杠统一用/,Windows 上也一样) - 排除干扰目录:
., -node_modules/, -dist/, -build/, -*.min.js(减号开头,无空格) - 想搜所有已打开但未保存的文件?唯一合法值是
open_files,不是*或all - 大小写敏感:
./SRC和./src是两个路径,写错就搜不到
正则替换总出错?盯住 .* 图标、$1 和换行符
Sublime 的正则引擎是 PCRE 风格,但替换语法自研:捕获组必须用 $1,不是 \1;. 默认不匹配换行符;.* 图标颜色才是开关,不是“Regular Expression”复选框。
- 启用正则前,务必确认查找框旁的
.*图标是蓝色的;快捷键Alt+R可切换,但眼睛扫图标更可靠 - 函数调用重构示例:把
getUser(id)改成getUser({ id }),查找写getUser$$([^)]+)$$(括号要转义),替换写getUser({ $1 }) - 删独立
console.log行(不碰字符串或注释里的):^[ \t]*console\.log$$[^)]*$$;[ \t]*$,替换留空;注意^和$锁定整行,\.转义点号 - 跨行匹配必须加
(?s)前缀,比如(?s)"content": "(.*?)",否则.不会吞换行
Replace All 后文件没变星号?这不是 Bug,是设计
Sublime 所有全局替换结果都在内存里,关掉未保存的标签页,改动直接丢弃;没有跨文件撤销历史;右上角星号 * 不强制更新,也不阻止你直接关闭窗口。
- 替换后必须立刻执行 File → Save All,或快捷键:
Ctrl+K松开 →Ctrl+B(Windows/Linux),macOS 是Cmd+K→Cmd+B - 高风险操作前务必
git add -A && git commit -m "before global replace";出错时git checkout .秒级回滚 - 别依赖“关闭时提示保存”——批量操作后几十个标签页,误点取消,所有更改永久丢失
- 最常被忽略的其实是
"index_files": false设置:项目含大node_modules时,不关它,搜索会卡死或漏文件;在Preferences → Settings里加这一行











