ctrl+h仅替换当前文件,ctrl+shift+f(或cmd+shift+f)才支持跨文件替换;正则需启用.*模式,替换后必须手动保存,多光标选中比全局正则更安全。

别指望 Ctrl+H 点一下就搞定批量替换——它只改当前文件,且默认不认正则、不区分上下文,硬上等于主动埋雷。
Ctrl+H 和 Ctrl+Shift+F 的根本区别在哪
很多人输完内容直接点 Replace All,结果只改了当前打开的文件。这不是操作失误,是 Sublime 的设计逻辑:Ctrl+H 是单文件替换入口,Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)才是唯一能触发跨文件搜索替换的通道。
-
Ctrl+H后点 Replace All:仅作用于当前标签页的可见区域,折叠代码块、注释行、被排除的语法范围全跳过 -
Ctrl+Shift+F打开的是「Find in Files」面板,Where 框决定搜索边界——填.才扫整个项目根目录,填空则只搜已打开的文件 - Where 框里写
./src会被忽略路径开头的.,实际搜的是磁盘根目录;应写src或绝对路径 - 想排除
node_modules?Where 框填src,-node_modules(逗号分隔,减号表示排除)
为什么 \buser_id\b 总是匹配错
\b 在 Sublime 里对下划线 _ 和数字不敏感,\buser_id\b 会命中 username 或 user_id_list。这不是 bug,是 PCRE 引擎对单词边界的定义差异。
- 更稳的写法是手动限定:
(?,明确排除前后为字母、数字、下划线的情况 - 如果只在 JS 变量声明中替换,加空格前缀更简单:
const user_id =→const new_name =,配合Whole Word勾选 - 变量含特殊字符如
$api,必须启用 Escape Special Characters(小锁图标),否则$被当行尾锚点 - 正则模式没开?右下角
.*按钮没点蓝?所有\d、^、$全当普通字符处理
替换后文件没变?不是没生效,是没保存
Sublime 的 Replace All in Files 默认把修改缓存在内存里,文件标签页出现星号 * 就是提示你还没落盘。关掉窗口或崩溃,所有变更就丢了。
- 必须手动执行
File → Save All,或快捷键Ctrl+K然后Ctrl+B(Windows/Linux),macOS 是Cmd+K→Cmd+B - 大文件(>10MB)可能被跳过,右下角状态栏看编码是否为
UTF-8;非 UTF-8 文件(如 GBK)默认不参与替换,需先右键转码 - 文件右下角显示
RO?那是只读状态,替换按钮会灰掉,得先解除只读或另存为 - 替换了但部分文件没更新?检查它们是否被 Where 路径过滤掉了,比如 Where 填了
**.ts却想改.js文件
多光标批量改名比正则更可控的场景
当你只想改某几处变量,且能肉眼确认上下文时,Ctrl+D 逐次选中比全局正则更安全——它允许你实时判断每个匹配项是否该动。
- 双击选中完整变量名(不含引号、点号、空格),再按
Ctrl+D,第二次才找下一个;看到落在"user_id"字符串里,立刻按Ctrl+K→Ctrl+D跳过 - 误按太多?
Ctrl+U可逐次撤销最近一次光标添加,比狂按Esc精准得多 - 想统一加前缀(如
const)?用列选择更可靠:Alt+鼠标从第一行列首垂直拖到最后一行列首,再输入 - 列编辑失效?先检查
Preferences → Settings中"drag_text": false是否启用,再确认字体是等宽(如Consolas)
最危险的不是不会用快捷键,而是忘了 Sublime 处理的是纯文本——它不管你是改变量、字符串还是路径,只要字面匹配就下手。每次替换前点一下 Find All 看高亮数量,比事后调试省十倍时间。











