Sublime跨目录搜索需先通过Project→Add Folder to Project添加文件夹,否则Ctrl+Shift+F仅搜打开文件;Where填“.”才搜整个项目,支持*.js,-node_modules/等筛选;正则替换用$1非\1,跨行需(?s);Replace All后须Save All且建议先Git备份。

Sublime 必须先加文件夹,才能跨目录搜索
没通过 Project → Add Folder to Project… 加载任何目录时,Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)面板的 Where 输入框会灰显或只显示 Open Files,搜不到子目录内容。这不是快捷键失效,而是 Sublime 根本没项目上下文可查。
左下角状态栏出现类似 ~/my-project/ 的路径,才是已进入项目模式。双击文件夹启动 Sublime 会被单实例机制覆盖,必须手动添加——不是开多个窗口,而是把多个目录并入同一个项目侧边栏。
- 已加载的每个文件夹在侧边栏顶部独立显示,支持单独折叠/展开
-
Ctrl+P(Goto Anything)和Ctrl+Shift+F默认跨所有已添加目录生效 - 同名文件按添加顺序优先打开,但搜索不区分先后,只要在任一已加目录里就会被命中
Where 字段填什么,决定搜到哪些文件
Where 不是“路径输入框”,而是文件筛选表达式。留空 ≠ 全项目,它实际只扫当前已打开的标签页(open_files),哪怕你刚用 File → Open Folder… 加了根目录也一样。
真正表示“整个项目”的写法是单个英文点:.。注意不是 ./、./src 或 project,Sublime 内部解析对这些有差异,. 最稳定。
- 只搜某类文件:
*.js, *.ts(逗号分隔,不支持空格) - 排除目录:
., -node_modules/, -dist/, -*.min.js(斜杠统一用/,Windows 上也如此) - 精准锁定业务代码:
./src/**/*.ts, ./tests/**/*.ts(**表示递归子目录) - 想只搜已打开的文件(含未保存的
untitled标签):open_files,但需确保状态栏有项目路径,否则可能只搜当前那个文件
正则替换要盯住 $1 和 (?s),别信 \1
Sublime 的正则引擎基于 PCRE,但替换语法是自研的:捕获组必须用 $1、$2 引用,\1 会被当字面量处理。点号 . 默认不匹配换行符,跨行匹配必须加 (?s) 前缀。
常见重构场景示例:
- 把
getUser(id)改成getUser({ id }):
查找:getUser$$([^)]+)$$(括号需转义)
替换:getUser({ $1 }) - 删掉独立的
console.log行(不碰字符串或注释里的):
查找:^[ ]*console.log$$[^)]*$$;[ ]*$
替换:留空,或填// $0转为注释 - 双引号字符串变单引号:
"([^"]*)"→'$1';若含转义引号(如"He said \"hi\""),得升级为"((?:[^"\]|\.)*)"
Replace All 后不保存 = 白干,Git 是唯一兜底
点了 Replace All in Files,所有改动都只是内存脏状态。标签页右上角的星号 * 很容易被忽略,关掉未保存的标签页,修改直接丢弃——Sublime 没有跨文件撤销历史。
必须手动执行 Ctrl+K 松开,再按 Ctrl+B(即 File → Save All)。更关键的是:替换前务必 git add -A && git commit -m "before global replace"。出错时 git checkout . 三秒回滚,比任何后悔药都管用。
容易被忽略的点:file_exclude_patterns(如 .log、.tmp)会让文件被跳过,搜不到不一定是没匹配,可能是被过滤掉了;某些插件(如旧版 ProjectManager)会干扰 open_files 模式,临时禁用可验证。

















