跨文件批量替换必须用ctrl+shift+f(windows/linux)或cmd+shift+f(macos),而非ctrl+h;ctrl+h仅作用于当前文件,无法扫描未激活标签页;where框填“.”表示整个项目,排除目录用“-node_modules”;正则需点击.*图标启用,捕获组用$1引用;替换后须按ctrl+k→ctrl+b保存全部,否则更改丢失。

跨文件批量替换必须用 Ctrl+Shift+F,不是 Ctrl+H
Ctrl+H 只改当前打开的文件,哪怕你已打开整个项目,它也不会扫其他未激活标签页。真正批量替换得用 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)调出「Find in Files」面板。否则搜 console.log,只改了 index.js,漏掉 utils.js 和 api.js 是常态。
Where 框里别留空——空值默认只搜已打开文件;填 . 表示整个项目根目录;想排除 node_modules,写成 src,-node_modules(逗号分隔,减号排除)。路径中一律用正斜杠 /,Windows 下也别写 \,否则不识别。
正则模式不点 .* 就等于没开
写 \d+、^import、\buser_name\b 却搜不到?八成是右下角那个 .* 图标没点蓝。这个开关在 Ctrl+F、Ctrl+H、Ctrl+Shift+F 三个面板里各自独立,每次换面板都得重新点。
多行匹配还要额外勾选 . matches newline(点右下角 . 图标两次,或按 Alt+R 后再按 Alt+.),否则 .* 遇到换行就停。比如想把 function foo() { 替成 const foo = () => {,不启用该选项,{ 后面的换行和缩进根本进不了匹配范围。
-
\b在 Sublime 里把下划线当单词字符,\buser_name\b会错误匹配username - 更稳的边界写法是
(? - 若上下文干净,直接用
user_name(前后加空格)配合Whole Word也够用
替换完不 Save All = 白干
点 Replace All 后所有目标文件标签页出现星号 *,这是正常现象——Sublime 只把变更缓存在内存里,没写入磁盘。关窗口、崩溃、切去干别的事,改动全丢,且无历史快照可恢复。
必须手动执行 File → Save All,或快捷键:Ctrl+K 然后 Ctrl+B(Windows/Linux),Cmd+K 然后 Cmd+B(macOS)。大项目里几十个文件同时改,漏点一次 Save All,前面所有操作等于在虚空里敲键盘。
重复文本去重不能靠多光标“暴力删”
用 Ctrl+Shift+L 或 Alt+F3 全选所有 apple 行再按 Delete,不是去重,是清空——它不管哪行是第一次出现,也不判断内容是否真重复(apple 和 apple 被视为两行)。
保序去重唯一靠谱的原生方案是正则:^(.*$)\n(?=.*^\1$),但前提是:先统一换行符为 Unix(File → Line Endings → Unix),再清除行尾空格(Find → Replace 查 [ \t]+$ 替为空),否则匹配失效。
如果允许打乱顺序,Sort Lines: Unique(Sublime Text 4.4+)最省事,但它等价于 sort -u,会把 zebra 排到 apple 前面。真正卡住人的从来不是“怎么删”,而是没想清“什么是重复”:整行字节一致?忽略首尾空格?大小写是否敏感?这点没定,后面全是瞎忙。











