mcpField
S
sembr

sembr

github.com/petr-korobeinikov文档处理165 次安装14 周前更新
代码仓库

关于 sembr

按 Semantic Line Breaks 规范调整散文换行,使行结构体现语义层次。支持指定文本重排,并在编辑 Markdown 或 reStructuredText 文件时仅格式化改动部分。

主要功能

  1. 01按语义调整换行
  2. 02重排指定文本
  3. 03编辑散文时自动格式化
  4. 04保留未改文本与标记
  5. 05报告规则无法严格应用之处

适用场景

  1. 01重排粘贴的散文片段
  2. 02编辑 Markdown 或 reStructuredText 散文
  3. 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(强制要求,不得例外)
  1. 每个句末标点后都要换行 — ., !, ?。 只有在句末时,. 才是句末标点 — 不包括缩写(e.g., Mr., U.S., etc.)、 版本号或带点标识符(1.22.4, node.js, co.uk), 以及省略号(…, ...)中的点。 不确定时, 检查下一个字符: 如果它表示新句的开始 (空格后接大写字母,或段落结束), 则换行; 否则不要换行。

  2. 绝不改变渲染结果。 渲染后的可见结果(Markdown、HTML 等) 必须与输入逐字节一致。 唯一允许的更改是在段落内部将一个空格替换为 一个换行符 (或反向替换)。 禁止:

    • 添加、删除或更改任何非空白字符;
    • 插入或删除空行;
    • 触碰禁止修改区域中的任何内容(见「输入」);
    • 规范化行尾空白、制表符或空行数量。

    验证: 比较输入与输出的差异 — 散文段落中只允许空格 ↔ 换行符的替换。

  3. 绝不在连字符连接的单词中间换行 (例如 state-of-the-art 必须保持在同一行)。

SHOULD(除非会违反 MUST 规则或改变含义,否则应遵循)
  1. 在每个独立分句后换行 这些分句由 ,、;、: 或 —(长破折号)分隔。 判断方法:独立分句有主语和限定动词, 并且可以单独作为句子成立。 «I went to the store, and I bought eggs» — 两边都是独立分句; 在逗号后换行。 «I went to the store to buy eggs» — «to buy eggs» 是从属成分; 不换行。 如果结构确实有歧义, 则不要拆分该分句,并在报告中说明这种情况 (请参阅 Reporting)。
  2. 在枚举列表或项目列表前换行。
  3. 每行不超过 80 个字符。 如果一行超过 80 个字符, 则在满足长度限制的语义边界中,选择最靠后的位置换行。
MAY(可用于提升可读性或满足 MUST/SHOULD)
  1. 为了清晰或控制长度,可在从句后换行。
  2. 可在列表项之间换行,以归类相关条目。
  3. 可在超链接或行内标记前后换行。
  4. 如果超出的部分是不可拆分的单元 (URL、代码段、行内标记),则允许行长超过 80 个字符。

流程

  1. 逐字阅读输入内容。
  2. 确认渲染上下文。 对于 .md、.markdown、.rst、.html, 或已知遵循 CommonMark / reST / 标准 HTML 语义的上下文, 请继续。 对于纯文本、 使用 <br> 换行行为的 GFM、 电子邮件、 聊天(Slack、Telegram、Discord), 或任何单个换行符会显示为可见换行的上下文—— 在显式重新格式化模式下,继续前先询问用户; 在默认编辑模式下,跳过 sembr。 在这些情况下使用 Sembr 会明显改变输出,并违反规则 2。
  3. 优先应用 MUST 规则。
  4. 在不与 MUST 规则冲突或扭曲含义的情况下,尽可能应用 SHOULD 规则。
  5. 使用 MAY 规则满足 80 个字符的软限制并提升可读性。
  6. 绝不改述、重写、添加或删除内容。 如果源文含义模糊,且必须做出结构选择, 请在编辑前询问。
  7. 确认渲染后的输出与输入一致。

示例

错误——多分句挤在一行,没有语义结构:

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 个字符的不可拆分行, 或任何其他无法确信能够严格应用规则的情况—— 请逐项列出,以便用户了解结果属于尽力处理,而非严格遵循规则。

评论

支持 Markdown