关于 sembr
按 Semantic Line Breaks 规范调整散文换行,使行结构体现语义层次。支持指定文本重排,并在编辑 Markdown 或 reStructuredText 文件时仅格式化改动部分。
主要功能
- 01按语义调整换行
- 02重排指定文本
- 03编辑散文时自动格式化
- 04保留未改文本与标记
- 05报告规则无法严格应用之处
适用场景
- 01重排粘贴的散文片段
- 02编辑 Markdown 或 reStructuredText 散文
- 03保持无关段落不变
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ petr-korobeinikov/ skills --skill sembr安装后在 Claude Code 中输入/sembr确认已加载。
详细介绍
sembr
重新排版散文,使其物理行结构与语义结构相对应, 遵循 https://sembr.org/ 上的语义换行规范。 以下规则均为强制要求 — 绝不可默默跳过,也不可为了方便而放宽 MUST 规则。
模式
显式重新排版
用户要求重新排版现有文本。 对目标散文 (片段、文件或章节)应用 MUST/SHOULD/MAY 规则。 在目标范围内完整重新排版; 不要改动周围的段落。
编辑时默认启用
在 .md、.markdown 或 .rst 文件中添加或修改散文时,
自动触发 —
即使用户没有明确提出要求。
指导原则:
只有正在编辑的部分采用 sembr 格式;
其他所有内容都保持字节级不变。
- 新散文(新文件、新段落、新插入的内容块): 从一开始就采用 sembr 格式。
- 对现有段落进行编辑: 遵循该段落现有的换行风格。 如果它已经符合 sembr 格式 (多条短行,在句末或分句后换行) — 在编辑时保持 sembr 格式。 如果它是一整行,按固定列宽硬换行, 或遵循另一种明显的格式 — 则遵循该格式。 如果段落太短,无法判断 — 默认采用 sembr 格式。
- 未编辑的段落: 绝不重新排版。 编辑某个段落时, 不得改动相邻段落的换行、空格或措辞。 差异必须局限在编辑区域。
- 退出机制: 如果用户说 «не применяй sembr здесь» / «don't apply sembr here» (或设置了项目级偏好) — 则遵循文件现有的格式约定。
不适用的场景
对于纯 .txt 文件、
使用 <br> 换行行为的 GFM、
电子邮件、
聊天(Slack、Telegram、Discord),
或任何单个换行会呈现为可见换行的场景,
跳过这两种模式。
在这些情况下使用 Sembr 会改变渲染结果,违反规则 2。
输入
编辑前确定目标:
- 在对话中粘贴的片段 → 返回重新排版后的文本。
- 文件路径或文件中的章节 → 就地编辑文件。
- Markdown / HTML 文档 → 保留所有渲染效果 (标题、列表、代码块、链接、行内标记)。
Sembr 仅适用于散文段落、 以及包含散文的列表项和引用块。 禁止触碰的区域 — 绝不可修改以下内容中的空白、 换行 或任何内容:
- 围栏代码块(
```)和缩进代码块; - 行内代码片段(
`); - HTML 区域;
- Markdown 表格;
- YAML / TOML 前置元数据;
- reST 行块(以
|开头的行); - reST 指令(
.. name::及其缩进内容); - reST 字面块(以尾随的
::开始,直到缩进级别降低); - reST 网格表和简单表格;
- reST doctest 块(以
>>>开头的行)。
如果目标不明确,请先询问。
规则
MUST(强制要求,不得例外)
-
每个句末标点后都要换行 —
.,!,?。 只有在句末时,.才是句末标点 — 不包括缩写(e.g.,Mr.,U.S.,etc.)、 版本号或带点标识符(1.22.4,node.js,co.uk), 以及省略号(…,...)中的点。 不确定时, 检查下一个字符: 如果它表示新句的开始 (空格后接大写字母,或段落结束), 则换行; 否则不要换行。 -
绝不改变渲染结果。 渲染后的可见结果(Markdown、HTML 等) 必须与输入逐字节一致。 唯一允许的更改是在段落内部将一个空格替换为 一个换行符 (或反向替换)。 禁止:
- 添加、删除或更改任何非空白字符;
- 插入或删除空行;
- 触碰禁止修改区域中的任何内容(见「输入」);
- 规范化行尾空白、制表符或空行数量。
验证: 比较输入与输出的差异 — 散文段落中只允许空格 ↔ 换行符的替换。
-
绝不在连字符连接的单词中间换行 (例如
state-of-the-art必须保持在同一行)。
SHOULD(除非会违反 MUST 规则或改变含义,否则应遵循)
- 在每个独立分句后换行
这些分句由
,、;、:或—(长破折号)分隔。 判断方法:独立分句有主语和限定动词, 并且可以单独作为句子成立。 «I went to the store, and I bought eggs» — 两边都是独立分句; 在逗号后换行。 «I went to the store to buy eggs» — «to buy eggs» 是从属成分; 不换行。 如果结构确实有歧义, 则不要拆分该分句,并在报告中说明这种情况 (请参阅Reporting)。 - 在枚举列表或项目列表前换行。
- 每行不超过 80 个字符。 如果一行超过 80 个字符, 则在满足长度限制的语义边界中,选择最靠后的位置换行。
MAY(可用于提升可读性或满足 MUST/SHOULD)
- 为了清晰或控制长度,可在从句后换行。
- 可在列表项之间换行,以归类相关条目。
- 可在超链接或行内标记前后换行。
- 如果超出的部分是不可拆分的单元 (URL、代码段、行内标记),则允许行长超过 80 个字符。
流程
- 逐字阅读输入内容。
- 确认渲染上下文。
对于
.md、.markdown、.rst、.html, 或已知遵循 CommonMark / reST / 标准 HTML 语义的上下文, 请继续。 对于纯文本、 使用<br>换行行为的 GFM、 电子邮件、 聊天(Slack、Telegram、Discord), 或任何单个换行符会显示为可见换行的上下文—— 在显式重新格式化模式下,继续前先询问用户; 在默认编辑模式下,跳过 sembr。 在这些情况下使用 Sembr 会明显改变输出,并违反规则 2。 - 优先应用 MUST 规则。
- 在不与 MUST 规则冲突或扭曲含义的情况下,尽可能应用 SHOULD 规则。
- 使用 MAY 规则满足 80 个字符的软限制并提升可读性。
- 绝不改述、重写、添加或删除内容。 如果源文含义模糊,且必须做出结构选择, 请在编辑前询问。
- 确认渲染后的输出与输入一致。
示例
错误——多分句挤在一行,没有语义结构:
The build pipeline succeeded; however, the deploy step failed because the secret rotated overnight, and we did not refresh the cache — so production is now serving stale config.
正确——经过 sembr 格式化:
The build pipeline succeeded;
however, the deploy step failed because the secret rotated overnight,
and we did not refresh the cache —
so production is now serving stale config.
错误——在带连字符的单词中间换行(违反 MUST 规则 3):
This is a state-
of-the-art system.
正确:
This is a state-of-the-art system.
报告
编辑后, 简要说明重新格式化了哪个文件或章节。 除非用户要求, 不要将完整的重新格式化文本再次发给用户。
如果处理过程中放宽或跳过了任何规则—— 未拆分的歧义独立分句、 非标准渲染上下文、 超过 80 个字符的不可拆分行, 或任何其他无法确信能够严格应用规则的情况—— 请逐项列出,以便用户了解结果属于尽力处理,而非严格遵循规则。