Sublime Text 本身不支持中文段落自动排版,所有“自动”效果均依赖手动触发的正则替换、Emmet 包裹或外部脚本,且必须严格匹配 HTML 结构或纯文本上下文,无智能分段、语义识别及后台监听。

Sublime Text 本身不支持中文段落自动排版,所有“自动”效果都依赖手动触发的正则替换、Emmet 包裹或外部脚本,且必须严格匹配 HTML 结构或纯文本上下文——没有智能分段、没有语义识别、也没有后台监听。
为什么 Ctrl+Shift+P 里搜不到「中文排版」命令
Sublime 没有内置中文排版功能,所谓“自动”全是用户自定义组合:比如用正则删空行、用 Emmet 包首字、用 Build System 调 Python 脚本做全角/半角转换。插件市场也不存在开箱即用的「中文排版器」,所有相关功能都散落在不同工具链里。
- 右下角状态栏显示
Plain Text时,Reindent、JsPrettier、sublime_black全部静默失效 - 想批量处理段落,必须先确保文本已含
标签,或手动用正则补上(如把\n\n替换为) - 中文标点校验需额外装
SublimeLinter+sublinter-chinese,且要改插件源码才能在 Sublime 内置 Python 下跑通
怎么用正则批量处理中文段落结构
这是最常用、最可控的方式,但必须分步操作,不能一步到位。
- 先统一段落分隔:打开替换面板(
Ctrl+H),勾选.*(正则模式),Find what填\n\n,Replace with填,点击All;再在开头加,结尾加 - 再包首字:用
匹配每个段落开头第一个非空白字符,(\S)
Replace with填$1
- 注意:
\S不匹配全角空格(\u3000)和零宽空格(\u200b),若段首有这些,得显式写进正则,如([^\s\u200b\u3000])
Emmet 给中文段首字加标签为什么总失败
Emmet 的 Wrap with Abbreviation(Ctrl+Shift+G)只对当前选中内容生效,它不会自动识别“段落”,也不会跳到下一个段首。
- 必须手动把光标放到每段第一个字前,双击选中该字(不能拖选,否则可能包进空格或标点)
- 文件语法必须是
HTML(右下角显示HTML,不是Plain Text或Markdown) - 输入
span.first-char后回车,结果是今天天气很好…,不是整段包裹 - 如果段落间用空行分隔,Emmet 完全无感——它不解析空行,也不跨行操作
纯文本小说排版最容易踩的三个坑
网文、内刊类纯文本处理,90% 的失败源于没意识到隐形字符的存在。
- 删空行别用
^$,它抓不住带\u200b、\u3000、\t的伪空行;必须用^\s*$,并手动补上 Unicode 字符:^[\s\u200b\uFEFF\u00a0\u3000]*$ - 压缩多空行为单空行必须分两步:
\n{3,}→\n\n,再\n\n(?=\n)→\n;顺序反了会漏删或错删 - 文件末尾若无换行符(EOF 前没
\n),^\s*$匹配不到最后一行,得手动用Ctrl+Shift+K删除
真正难的不是操作,而是每次处理前都得确认:文本是否已结构化、隐形字符是否清完、正则是否开了 .* 但关了 .matches newline——少一个条件,结果就不可控。











