Markdown 质量指南

Markdown Lint 完整指南:检查标题层级、列表、链接、行长规则与自动化质量门禁

发现 Markdown 结构与样式问题,有意识地配置规则,在不改变含义的前提下修复,并让编辑器与 CI 运行同一套检查。

更新于 2026 年 8 月 1 日阅读约 15 分钟InfiniSynapse 编辑团队
Markdown Lint 完整指南:检查标题层级、列表、链接、行长规则与自动化质量门禁主题流程示意图,展示关键步骤、内容结构与最终输出之间的关系
本页目录

把 Markdown lint 作为可重复的质量检查

简要答案Markdown linter 会解析文件,依据已配置规则检查结构与样式,并按行报告可处理的问题。应优先读取项目现有配置,先修结构错误再处理外观警告,检查渲染结果,并让编辑器和 CI 使用同一套规则。

Lint 并不等同于渲染、拼写检查、链接爬取或内容审校。文件即使通过全部样式规则,仍可能包含错误事实、不可访问图示或失效外链。可靠流程应把 lint 结果与渲染预览、链接验证和人工语义检查结合起来。

理解 Markdown lint 能检查什么、不能检查什么

结构

标题顺序、重复顶级标题、列表缩进、代码围栏和空行边界。

一致性

标题样式、项目符号、强调格式、有序列表编号和行尾空格。

可维护性

过长行、代码语言缺失、内联 HTML、裸网址及妨碍审阅的模式。

不负责语义

Linter 不能证明事实准确、搜索意图覆盖、可访问性或每个链接目标都有效。

搜索 Markdown validator 的用户通常面临三类问题:语法无法渲染、样式违反项目规范,或内容在 CommonMark 与 GitHub Flavored Markdown 中表现不同。修改规则前,应先确定真正的失败类型。

优先处理真正预防缺陷的 Markdownlint 规则

规则检查内容重要原因安全处理
MD001标题层级跳跃破坏大纲和导航逻辑修复内容层级,而不只是改井号数量
MD013行长超过配置可能影响差异审阅,但表格和网址容易误报先配置适用范围,再决定是否机械换行
MD022标题周围缺少空行提升源文件清晰度和解析稳定性补充空行,但不要拆散相关内容块
MD032列表周围缺少空行避免列表合并和渲染差异把列表与相邻段落清楚分隔
MD040围栏代码缺少语言影响高亮和工具上下文添加正确语言,纯文本则使用 text
MD041首个内容不是顶级标题可能与前置元数据或自动标题冲突让规则与发布系统保持一致
MD047文件末尾缺少换行产生无意义差异和工具不一致文件末尾保留一个换行

维护中的 markdownlint 规则说明记录了规则别名、参数、触发示例和修复方式。应阅读项目实际使用的实现,不要假设不同软件包对同一规则编号的处理完全一致。

在不破坏内容的前提下修复 Markdown lint 问题

  1. 1复现问题。记录命令、软件包版本、配置路径、文件、规则和行号。
  2. 2读取本地规范。使用通用默认值前,先检查仓库配置和贡献说明。
  3. 3判断影响。先修复大纲、破损语法和解析歧义,再处理空白或个人风格。
  4. 4进行最小且语义安全的修改。保留含义、代码行为、链接目标、表格数据和生成标记。
  5. 5重新运行 lint 并渲染。只有报告变干净还不够,还要确认文档预览仍然正确。
  6. 6审阅差异。确认修改没有重排无关段落,也没有掩盖合理警告。
重要提示: 不要对仓库盲目自动修复。某些规则会改变换行、编号或标题结构,进而影响锚点、生成文档、测试或可复制示例。

建立团队能够解释的 Markdownlint 配置

良好配置应表达经过讨论的项目决策。尽量从默认规则开始,只对有明确理由的规则做修改,并把例外范围限制到最小。配置应存入仓库,让本地编辑器和 CI 使用同一规范。

{
  "default": true,
  "MD013": {
    "line_length": 100,
    "code_blocks": false,
    "tables": false
  },
  "MD033": {
    "allowed_elements": ["details", "summary"]
  }
}

该示例只说明配置思路,并非通用推荐。表格行无法安全换行时,可让 MD013 忽略表格以减少噪声。文档平台明确支持某些 HTML 元素时可以允许它们,但不应因此开放任意嵌入标记。

markdownlint 项目文档说明了配置对象和行内控制方式。应优先使用仓库级配置,而不是散落的禁用注释。如果确实需要行内抑制,应明确规则并解释例外为何安全。

在命令行和 CI 中运行 Markdown lint

对于 JavaScript 项目,markdownlint-cli2 在 markdownlint 库之上提供 glob 匹配和配置发现。应安装仓库批准的版本,在锁文件中固定,并通过脚本排除生成目录和依赖目录。

npm install --save-dev markdownlint-cli2
npx markdownlint-cli2 "**/*.md" "#node_modules" "#dist"

markdownlint-cli2 文档说明了配置格式、glob、输出格式化和 CI 用法。本地与 CI 应运行同一个项目脚本;两套独立命令很容易演变为两套规范。

# Example CI step
- name: Lint Markdown
  run: npm run lint:markdown

拉取请求可检查变更文档,大型仓库则可定期运行全量扫描。基线能够帮助渐进引入 lint,但应记录已知债务,而不是永久静默排除整棵文档目录。

让编辑器反馈与仓库检查保持一致

编辑器集成能够缩短反馈周期,但前提是它发现的配置和工具行为与 CI 相同。应把仓库根目录作为工作区打开,确认当前配置路径,并用一个已知违规做测试。如果编辑器与 CI 报告不同,就比较软件包版本、工作目录、忽略模式和配置优先级。

不要让写作者养成压制所有警告的习惯。应提供简短政策,区分必须修复的结构问题、项目特定样式、合理例外,以及需要其他工具完成的检查。这样 lint 输出才能成为共同审阅语言,而不是障碍。

排查常见 Markdown lint 失败

现象可能原因下一步检查
编辑器通过、CI 失败版本、配置、根目录或 glob 不同输出版本并在本地运行仓库脚本
MD013 大量报告表格行全局行长规则范围过宽分别配置表格和代码
生成文件持续失败生成器不遵循规范修复生成器,或只排除确认后的输出
行内禁用无效语法、范围或实现不匹配阅读当前软件包的抑制说明
修复导致锚点变化标题文字或层级被改变恢复含义并更新经过核验的入站链接
规则与平台输出冲突通用默认值忽略发布环境记录范围明确且可测试的配置例外

Lint 完成后转换已审阅的 Markdown

Markdown lint 不会创建最终 Word 文档。源文件通过约定规则并完成预览检查后,可使用 InfiniSynapse Markdown 转 Word 工具继续文档流程。请只提交已脱敏内容,并在交付前检查导出文件。

打开 Markdown 转 Word 工具进入 InfiniSynapse

使用这份 Markdown lint 完成清单

  1. 记录主要 Markdown 方言、linter 软件包、版本、命令和配置路径。
  2. 确认配置已纳入版本控制,并由本地和 CI 共同使用。
  3. 先修复结构和语法问题,再处理外观一致性问题。
  4. 检查每个抑制和排除模式,确保理由明确且范围有限。
  5. 重新运行项目命令,并保留干净输出作为构建证据。
  6. 在目标发布平台中渲染所有修改文件。
  7. 通过适当检查验证重要链接、图片替代文字和事实声明。
  8. 审阅最终差异,检查无关重排、锚点变化或示例损坏。

CommonMark 规范是核心解析行为的权威参考。平台扩展仍需查阅各自文档并进行测试。

Markdown lint 常见问题

什么是 Markdown lint?

它是一种静态分析,会依据可配置的结构和样式规则检查 Markdown 源文件,并报告标题跳级、列表不一致、行过长或代码语言缺失等问题。

Markdown linter 与 validator 相同吗?

不一定。Lint 通常同时检查可维护性和样式,而 validator 可能只关注语法能否解析或链接是否有效。

应该禁用 MD013 行长规则吗?

应根据内容和审阅流程决定。许多团队限制正文行长,但排除无法安全换行的表格和代码块,并在仓库配置中记录原因。

为什么 Markdown lint 本地通过但 CI 失败?

两个环境可能使用不同的软件包版本、根目录、配置、glob、忽略模式或换行符。应在本地运行 CI 的同一脚本,并比较版本和路径。

关于本指南

IS
InfiniSynapse 编辑团队

我们为数据与文档工作流编写注重证据和可执行性的指南。规则行为和命令应根据项目实际使用的软件包版本与发布环境进行验证。

快速答案补充:用基线、差异审查和退出条件逐步引入 Markdown lint

不要在遗留仓库中一次开启全部规则并机械修复所有文件。先固定 linter、运行时和依赖版本,保存当前命令与配置路径,再对完整仓库运行只读扫描。把结果按结构缺陷、解析风险、可维护性、纯格式和生成文件分类;标题跳级、未闭合围栏、列表解析歧义等可能改变输出的项目优先处理,而行长或项目符号风格应结合团队审阅方式决定。

阶段输入与动作验收证据退出条件
建立基线固定版本,对全部受管 Markdown 扫描,不自动修复命令、配置、文件范围、规则和违规数量可复现编辑器与 CI 对同一测试文件给出一致结果
修复高风险项先处理大纲、代码围栏、列表边界与解析歧义差异经过人工审阅,目标渲染器输出未被破坏没有未解释的结构性错误
控制遗留债务对暂缓项建立有负责人和期限的基线,而非全局禁用旧问题可见,新提交不能增加同类问题例外范围明确且能逐步缩小
启用门禁本地脚本、编辑器和 CI 使用同一锁定版本与配置故意加入一个已知违规时,三个入口均能发现错误信息可操作,正常提交不会被环境差异误阻断

每次修改规则都应像修改代码一样审查。记录发起原因、受影响文件、预期减少的缺陷、可能产生的误报、是否允许自动修复,以及撤销条件。选择一个包含表格、代码、HTML、链接引用和多级列表的代表性样例,在变更前后运行 lint,并在目标平台渲染。只有当违规变化符合预期、语义没有改变、锚点仍有效、示例仍可复制时,规则调整才算通过。

用可复核示例判断 Markdown lint 警告是否应该修复

以下是教学示例,不代表真实客户结果。假设 CI 报告 MD013 行长问题,目标行是一张包含长网址的表格。直接换行可能破坏表格,关闭整个仓库的 MD013 又会掩盖普通正文的可读性问题。维护者应先确认当前 markdownlint 实现和参数,再用最小范围配置排除表格,同时保留正文限制,并把理由写入配置评审记录。

判断问题需要查看的证据安全结论
这是真缺陷还是风格差异?规则文档、目标渲染结果、项目写作规范结构或解析受损则修复;偏好问题先取得团队约定
自动修复会改变什么?修复前后差异、链接、锚点、代码和生成输出无法证明语义稳定时改用人工最小修改
例外是否过宽?配置作用范围和仍被检查的代表性文件只排除不能安全遵循规则的内容类型或路径
CI 能否复现?锁文件、Node 版本、工作目录、glob 和退出码本地与 CI 必须运行同一仓库脚本

Lint 通过只证明文件满足已配置规则,不能证明事实准确、链接可访问、图片替代文字合适或内容满足用户意图。发布门禁还应包含目标渲染、外链状态、图片检查和人工内容审阅。任何自动化指标都应保留边界说明,避免把“零警告”误写成“零缺陷”。

Markdown lint 的官方来源与参考资料

规则编号、参数和抑制语法应以当前项目实际安装的实现为准。请查阅 markdownlint 规则说明确认每条规则的触发条件,使用 markdownlint 项目文档核对配置与行内控制,并参考 markdownlint-cli2 文档验证命令行、glob 和 CI 行为。底层 Markdown 解析边界可对照 CommonMark 规范;平台扩展仍需在实际发布环境中测试。

为 Markdown lint 规则变更保留回滚与复核记录

规则升级或配置调整后,应保存变更前后的违规汇总、代表性渲染截图、锁定的软件包版本、批准人和回滚触发条件。如果新规则导致大量无关差异、破坏生成内容、改变锚点,或让本地与 CI 无法一致复现,应先恢复最后一个已验证配置,再隔离问题规则。不要通过删除锁文件、扩大忽略目录或全局禁用来制造“通过”结果;这些做法会隐藏真实质量债务。关闭变更前,再让未参与配置修改的人复跑仓库脚本并检查一份代表性文档,确认报告、退出码和目标渲染都与记录一致。