sublime中不能直接搜替换为~~~,因会误伤行内反引号、混淆起止标记且默认不跨行;须分两步:先将lang→~lang(需勾选匹配换行),再将孤立`→~(单行处理)。

Sublime 里用正则批量替换 Markdown 代码块标记(```lang 和 ```)必须分两步处理:先匹配完整代码块再安全替换,不能只动开头或结尾——否则会破坏嵌套结构、吞掉中间内容,甚至把文档内所有反引号都误伤。
为什么不能直接搜 ``` 替换成 ~~~
Markdown 的代码块是成对出现的,单搜 ``` 会同时命中开始标记、结束标记、以及行内反引号(如 `console.log()`)。不加上下文限定,Replace All 一跑,轻则代码块断裂,重则整篇文档格式崩坏。更麻烦的是,Sublime 默认 . 不匹配换行符,```.*?``` 在没勾选 . matches newline 时根本跨不了行,查不到任何完整块。
正确写法:用两组正则分步捕获起始与结束标记
推荐按顺序执行两次替换,每次只动一边,避免跨行逻辑混乱:
- 第一步:把所有
```lang(含语言标识)替成~~~lang—— 查找^```([a-zA-Z0-9+\-]*)$,替换为~~~$1;务必勾选Regular Expression和Match line breaks(即右下角\n图标),并确保Whole Word关闭 - 第二步:把孤立的
```(即不带语言、单独成行的结束标记)替成~~~—— 查找^```$,替换为~~~;同样要勾选Regular Expression,但这次Match line breaks可关,因为目标是单行 - 别用
\b```或```(?!\w):Sublime 的\b对反引号无效,且```前后常接换行符而非单词字符,边界判断不可靠
容易踩的坑:缩进、空格和文件编码
实际操作中,以下三点最容易导致替换失败或错位:
-
^```中的^默认只匹配行首,但如果代码块前有空格或 Tab,就得改成^[ \t]*```;不过这样会连带匹配注释行里的```,所以建议先人工扫一遍起始行是否干净 - 某些 Markdown 文件用
\r\n(Windows 换行),而 Sublime 在未启用. matches newline时,$锚点可能失效;验证方法:用Find All看^```$是否能命中所有结束标记 - GBK 编码的文件默认被 Sublime 排除在正则搜索外——右下角状态栏若显示
GBK而非UTF-8,需右键 →Reopen with Encoding → UTF-8再操作,否则Replace All直接跳过该文件
真正麻烦的不是写对正则,而是确认所有代码块都被等价替换——尤其当文档混用 ```、~~~ 和行内 ` 时,得靠 Find All 列表逐个点开看上下文,漏掉一个就可能让渲染器把后续段落全当成代码。











