长段落替换必须用Ctrl+Shift+F而非Ctrl+H,因后者仅作用于可见区域;需启用“. matches newline”、捕获缩进与空行、替换后务必Ctrl+K Ctrl+B保存。

长段落替换必须用 Ctrl+Shift+F 而不是 Ctrl+H
Ctrl+H 只在当前文件的**可见区域**内操作,遇到折叠代码块、被隐藏的注释区或滚动条外的段落,直接跳过——你以为替换了整段,其实只动了前两行。真正处理跨多行、带缩进、含空行的长文本,必须走跨文件搜索路径,哪怕你只改一个文件。
- 按
Ctrl+Shift+F(Windows/Linux)或Cmd+Shift+F(macOS)打开「Find in Files」面板 - 在
Where框填.(当前文件夹)或具体路径如./src/components/ - 别点
Replace All前先点Find,确认底部面板列出的匹配项数量和上下文是否符合预期 - 如果只改单个文件但内容太长,仍建议用
Ctrl+Shift+F并把Where设为该文件绝对路径(如/project/foo.js),避免Ctrl+H的视口限制
多行正则必须勾选 “. matches newline”
默认正则模式下,. 不匹配换行符,^ 和 $ 也只锚定每行首尾。你想匹配从 /** 开始到 */ 结束的整块注释,写 /\*\*[\s\S]*?\*/ 是没用的——[\s\S] 在 Sublime 里不被支持,.* 也根本跨不了行。
- 先确保右下角
.*按钮已高亮(启用正则) - 再按
Alt+.(Windows/Linux)或Cmd+Alt+.(macOS)勾选. matches newline - 用
(?s)pattern临时开启单行模式更稳妥,比如(?s)/\*\*.*?\*/ - 贪婪匹配容易吃掉太多内容,优先用非贪婪
.*?,并配合明确边界,如export default function.*?}比export default.*}安全
缩进和空行一动就错?捕获它们,别硬删
直接把一段带 4 空格缩进的函数体替换成无缩进的箭头函数,结果所有调用位置都错位——这不是正则写错了,是你没把原始缩进当变量存下来。
- 查找时用括号捕获缩进:
^( {4})export default function (\w+)\(\) \{ - 替换为:
$1const $2 = () => \{($1还原缩进,$2提取函数名) - 空行也要小心:想删掉函数前后的空行,别用
\n\n直接删,容易连带吃掉上一个语句的分号;改用\n(?=\S)匹配“后面紧跟非空白字符”的换行 - 不确定时,先用
Find All看高亮是否包含你想要的空行和缩进,别信直觉
替换后文件没变?你只是没按 Ctrl+K Ctrl+B
Sublime 从不自动保存替换结果。点完 Replace All,所有被改的文件标签页顶上出现星号 *,那是它在提醒你:“我改了,但我没写磁盘”。关掉窗口、崩溃、断电——全丢。
- 必须手动执行
Ctrl+K然后Ctrl+B(Windows/Linux),或Cmd+K→Cmd+B(macOS) - 没有快捷键组合?菜单走
File → Save All - 如果某几个文件没保存成功,检查右下角是否显示
RO(只读),或该文件是否被Where路径过滤掉了(比如你写了**.ts却想改.js) - 大段落替换常伴随编码问题:GBK 文件若未转 UTF-8,可能完全不参与匹配,右下角状态栏看编码是否为
UTF-8
最麻烦的从来不是写对正则,而是搞清哪几行实际被选中、缩进有没有被当成普通空格吃掉、以及改完之后到底有没有真正落盘。每次长段落操作前,花十秒点 Find All 看预览,比事后用 Git revert 省半小时。


















