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

Sublime Text 本身不支持中文段落自动排版,所有“自动”效果都依赖手动触发的正则替换、Emmet 包裹或外部脚本,且必须严格匹配 HTML 结构或纯文本上下文——没有智能分段、没有语义识别、也没有后台监听。
为什么 Ctrl+Shift+P 里搜不到「中文排版」命令
Sublime 没有内置中文排版功能,所谓“自动”全是用户自定义组合:比如用正则删空行、用 Emmet 包首字、用 Build System 调 Python 脚本做全角/半角转换。插件市场也不存在开箱即用的「中文排版器」,所有相关功能都散落在不同工具链里。
- 右下角状态栏显示
Plain Text时,Reindent、JsPrettier、sublime_black全部静默失效 - 想批量处理段落,必须先确保文本已含
<p></p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/gongju/2484" title="Sublime Text Build Linux版"><img src="https://img.php.cn/upload/manual/001/431/639/6a5f2fbc42b55274.png" alt="Sublime Text Build Linux版" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/gongju/2484" title="Sublime Text Build Linux版">Sublime Text Build Linux版</a> <p>Sublime Text Linux x86-64 deb 安装包。官方也提供 rpm、tar.xz 和软件源安装方式。</p> </div> <a href="/xiazai/gongju/2484" title="Sublime Text Build Linux版" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>标签,或手动用正则补上(如把\n\n替换为<p></p>) - 中文标点校验需额外装
SublimeLinter+sublinter-chinese,且要改插件源码才能在 Sublime 内置 Python 下跑通
怎么用正则批量处理中文段落结构
这是最常用、最可控的方式,但必须分步操作,不能一步到位。
- 先统一段落分隔:打开替换面板(
Ctrl+H),勾选.*(正则模式),Find what填\n\n,Replace with填<p></p>,点击All;再在开头加<p></p>,结尾加 - 再包首字:用
<p>(\S)</p>匹配每个段落开头第一个非空白字符,Replace with填<p><span class="first-char">$1</span></p> - 注意:
\S不匹配全角空格(\u3000)和零宽空格(\u200b),若段首有这些,得显式写进正则,如<p>([^\s\u200b\u3000])</p>
Emmet 给中文段首字加标签为什么总失败
Emmet 的 Wrap with Abbreviation(Ctrl+Shift+G)只对当前选中内容生效,它不会自动识别“段落”,也不会跳到下一个段首。
- 必须手动把光标放到每段第一个字前,双击选中该字(不能拖选,否则可能包进空格或标点)
- 文件语法必须是
HTML(右下角显示HTML,不是Plain Text或Markdown) - 输入
span.first-char后回车,结果是<span class="first-char">今</span>天天气很好…,不是整段包裹 - 如果段落间用空行分隔,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——少一个条件,结果就不可控。

















