markdownlint 与 Prettier `--tab-width=4` 的列表缩进配置实战

发布时间:2026/10/16 8:52:18

markdownlint 与 Prettier `--tab-width=4` 的列表缩进配置实战 开发工具代码质量Lint静态分析【免费下载链接】markdownlintA Node.js style checker and lint tool for Markdown/CommonMark files.项目地址https://gitcode.com/gh_mirrors/ma/markdownlint点击查看免费下载本指南围绕仓库 doc/Prettier.md 中记录的 Prettier 兼容性场景以测试夹具 test/prettier-tab-width-4.md 为实例讲解当 Prettier 以--tab-width4格式化 Markdown 时如何通过list-marker-spaceMD030与ul-indentMD007两个规则的配置让 markdownlint 与 Prettier 的输出完全兼容、零告警。阅读完你将掌握两种 tab-width 下列表格式的差异、对应规则的参数含义与默认值、内联配置文件markdownlint-configure-file的用法以及如何用仓库自带测试与快照验证配置的正确性。背景markdownlint 与 Prettier 的协作方式Prettier 是广受欢迎的代码格式化工具而 markdownlint 是面向 Markdown/CommonMark 文件的 lint 工具。两者在绝大多数场景下可以无缝协作markdownlint 负责检查风格问题Prettier 负责重排格式各司其职。仓库中的 doc/Prettier.md 给出了两种协作策略直接扩展官方预置样式在 markdownlint 配置中extend仓库自带的 style/prettier.json该样式会将所有与 Prettier 存在重叠的规则一次性禁用包括line-length、list-indent、list-marker-space、ul-indent、no-trailing-spaces等 22 条规则。适合格式化交给 Prettier、lint 只管 Prettier 不管的规则的团队。针对特定场景微调如果仍需保留列表相关规则做 lint则按本文介绍的参数组合进行配置。问题场景--tab-width4与默认缩进不一致Prettier 的 Markdown 列表默认按--tab-width2排版这与 markdownlint 的默认配置天然兼容不会产生任何 lint 告警对应测试夹具 test/prettier-tab-width-2-default.md其格式为- Item、两级嵌套缩进 2 空格。但当 Prettier 以--tab-width4运行时无序列表的排版变为- Item - Item - Item此时默认配置的 markdownlint 会立即报告两条规则违规MD030 / list-marker-space默认要求列表标记-、*、、1.后只有 1 个空格而 Prettier 在-后写了 3 个空格MD007 / ul-indent默认要求嵌套无序列表每层缩进 2 个空格而 Prettier 每层缩进 4 个空格。官方推荐的配置方案doc/Prettier.md给出的解决方案是以下 JSON 配置片段{ list-marker-space: { ul_multi: 3, ul_single: 3 }, ul-indent: { indent: 4 } }该配置以options.config传入lintAPI或写入任意 markdownlint 配置文件.markdownlint.json/.markdownlintrc等。它只调整了无序列表的规则有序列表无需改动——原因见下文对齐原理。参数逐项解析两个规则、四个开关MD030list-marker-space标记后的空格数规则文档见 doc/md030.md实现见 lib/md030.mjs。该规则检查列表标记与列表项文本之间的空格数量共 4 个参数默认值均为1参数含义默认值ul_single单行无序列表项标记后空格数1ul_multi多行无序列表项标记后空格数1ol_single单行有序列表项标记后空格数1ol_multi多行有序列表项标记后空格数1源码中单行 / 多行的判定逻辑为列表总行数等于列表项数量时视为单行allSingleLine否则视为多行包含子列表、代码块、多段落的情况。因此在--tab-width4的文档里顶部无嵌套的简单列表- Item属于单行列表需要ul_single: 3含嵌套子列表的列表跨越多个行属于多行列表需要ul_multi: 3。两个值都必须设置为3缺一不可。MD007ul-indent无序列表缩进规则文档见 doc/md007.md实现见 lib/md007.mjs。该规则检查无序列表项的缩进参数如下参数含义默认值indent每层嵌套的缩进空格数2start_indented首层列表是否也缩进布尔值falsestart_indent首层列表的缩进空格数仅start_indented开启时生效2--tab-width4场景只需将indent设为4。源码中预期缩进按expectedIndent baseIndent (startIndented ? startIndent : 0) (nesting * indent)计算即嵌套深度乘以indent参数同时该规则会输出fixInfo因此违规项可以被applyFixes自动修复。另外注意MD007 只在其父列表也全为无序列表时生效混入有序列表的层级不受影响。对齐原理为什么无序用 3 空格、有序不用改以--tab-width4排版时Prettier 让嵌套列表内容按 4 列对齐无序标记-占 1 列标记后补 3 个空格内容起始于第 4 列嵌套列表每层缩进 4 个空格子列表的标记与内容正好与父级内容列对齐- Item - 标记 1 列 3 空格 4 列 - Item - 缩进 4 列子标记对齐父内容有序标记如1.占 2 列标记后仅需 1 个空格即可让内容落在第 4 列因此ol_single/ol_multi保持默认值1即可。这正是配置中只调整ul_*与ul-indent的原因。实测夹具内联配置文件markdownlint-configure-file仓库以测试夹具形式固化了这个场景。文件 test/prettier-tab-width-4.md 完整复现了 Prettier--tab-width4的格式化输出并在文件末尾使用 markdownlint 的内联文件级配置语法详见 README.md 的 Configuration 一节!-- markdownlint-configure-file { list-marker-space: { ul_multi: 3, ul_single: 3 }, ul-indent: { indent: 4 } } --该注释的语义配置作用于整个文件与注释所在位置无关默认按 JSON 解析可通过options.configParsers扩展为 YAML/TOML 等格式。在源码 lib/markdownlint.mjs 的configureFile函数中解析结果会与既有配置做浅合并{ ...config, ...parsed }因此内联配置可与全局配置叠加使用。夹具正文覆盖了五种典型结构无嵌套的简单无序列表含两层嵌套的多项无序列表无嵌套的简单有序列表含两层嵌套的多项有序列表无序、有序两种结构的混合。测试验证快照确认真零告警每个.md测试文件都会被 test/markdownlint-test-scenarios.mjs 中的createTestForFile读取并执行 lint、applyFixes再与快照文件 test/markdownlint-test-scenarios.mjs.snapshot 比对。其中prettier-tab-width-4.md对应的快照结果为{ errors: [], fixed: # Prettier --tab-width4\n\nText\n\n- Item\n - Item\n... }errors: []在文件内联配置生效后五种列表结构全部通过校验零告警fixed与原文完全一致无需任何自动修复证明配置已与 Prettier 输出完全对齐。对照 test/prettier-tab-width-2-default.md--tab-width2默认场景的快照同样是errors: []两者共同验证了 markdownlint 默认配置与--tab-width2兼容、经本文配置后与--tab-width4兼容的结论。实操清单三步完成兼容配置确定 Prettier 的 tab-width--tab-width2为默认值无需任何 markdownlint 调整--tab-width4时按下文配置。写入配置将上文 JSON 片段放入 markdownlint 配置文件或如测试夹具所示在文件顶部/底部用markdownlint-configure-file注释做单文件内联配置。验证运行 markdownlint 确认零告警若使用 CLI 的--fix或 API 的applyFixes用法见 README.md 的 Fixing 一节自动修复也不会改动 Prettier 已格式化的内容。延伸与prettier.json预置样式的取舍如果团队希望彻底避免规则冲突可以直接在配置中extendstyle/prettier.json。该文件以注释形式说明了用途Disables rules that may conflict with Prettier将blanks-around-lists、code-fence-style、list-marker-space、ul-indent、line-length等 22 条规则全部置false。两条路线对比extendprettier.json放弃全部重叠规则的检查简单彻底适合完全信任 Prettier 输出本文的精调方案保留列表规则仅调整参数适配--tab-width4lint 能力更完整适合希望列表结构仍受约束的团队。无论选择哪条路线--tab-width4都是唯一需要额外配置参数的非默认场景其余 Prettier 选项如--prose-wrap、--print-width不会与 markdownlint 的默认配置产生列表类冲突。赞分享开发工具代码质量Lint静态分析【免费下载链接】markdownlintA Node.js style checker and lint tool for Markdown/CommonMark files.项目地址https://gitcode.com/gh_mirrors/ma/markdownlint点击查看免费下载相关推荐markdownlint 与 Prettier 搭配使用指南规则冲突消除与列表缩进配置markdownlint 与 Prettier 搭配使用指南规则冲突消除与列表缩进配置 markdownlint 是面向 Node.js 的 Markdown开发工具代码质量Lint静态分析markdownlint 的 MD007ul-indent无序列表缩进规则4 空格缩进场景的机制与测试用例解析markdownlint 的 MD007ul indent无序列表缩进规则4 空格缩进场景的机制与测试用例解析 markdownlint 是面向 Mark开发工具代码质量Lint静态分析markdownlint MD007ul-indent规则详解无序列表缩进的配置、参数与源码实现原理markdownlint MD007ul indent规则详解无序列表缩进的配置、参数与源码实现原理 在团队协作中嵌套无序列表的缩进宽度2 空格还是开发工具代码质量Lint静态分析上一篇Modin 革命高性能分布式 DataFrame 库如何重塑 Pandas 并行计算生态下一篇MFE-starter性能优化Ahead of Time编译实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/16 8:52:18

Buzz 离线转录完整指南:100 种语言,本地快速转出字幕

Buzz 离线转录完整指南:100 种语言,本地快速转出字幕 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz …

2026/10/16 8:52:18

C++存储持续性深度解析:从悬垂指针到生命周期陷阱的排查指南

我印象很深的一次排查经历:一位开发者在维护一个模拟项目X时,遇到了一个极其诡异的崩溃——程序运行一段时间后,在访问一个"明明还在"的全局对象时会突然崩溃。团队里有人怀疑是内存被踩,有人怀疑是编译器优化把代码改坏…

2026/10/16 8:47:17

结构光三维测量相位解包裹:格雷码与多频外差对比

做结构光三维测量的人,十有八九都经历过相位解包裹翻车。去年我负责一个带台阶和断差表面的形貌测量项目,采用相移条纹投影配合空间相位展开,结果重建出来的点云表面布满了周期性错位的"条纹状撕裂",同一个平面硬生生被…

2026/10/16 9:42:45

阿里云K8s部署Vue2+SpringBoot2.5+Nacos2.0.3全流程

简介:这份资源面向需要在阿里云Kubernetes集群上落地前后端分离项目的开发与运维人员,提供一套可直接参考的部署方案,覆盖Vue2前端、Nginx、SpringBoot2.5后端与Nacos2.0.3注册配置中心的完整编排。包内共16个文件,以8个yaml清单为…

2026/10/16 9:42:45

K8s 部署 Vue2 + Spring Boot 2.5 + Nacos 2.0.3 实战清单与避坑指南

简介:本资源面向需要在阿里云Kubernetes集群上落地前后端分离项目的开发与运维人员,提供一套可直接参考的部署方案,覆盖Vue2前端、Nginx反向代理、SpringBoot2.5后端以及Nacos2.0.3注册配置中心的完整编排。包内共16个文件,以8个Y…

2026/10/16 9:42:45

贝叶斯优化调参实战:高斯过程与采集函数原理及Python实现

简介:这份资源面向机器学习与深度学习方向的学习者和开发者,聚焦用贝叶斯优化解决超参数调优耗时、试错成本高的问题。压缩包共4个文件,约10.96MB,包含2个Python脚本、1个CSV数据集和1个NPZ数据文件:脚本分别演示机器学…

2026/10/16 9:42:45

ILSVRC2012 devkit全解析:ImageNet官方评估工具的结构与避坑指南

简介:ILSVRC2012开发工具包是ImageNet大规模视觉识别挑战赛(ILSVRC)2012版本的官方开发套件,面向计算机视觉与深度学习研究者,服务于图像分类任务的训练、验证与评估,尤其适合复现经典论文或参加同类比赛时…

2026/10/16 9:42:45

RTP流合成MP4:H264与AAC封装实战

简介:这份资源面向音视频开发初学者与流媒体协议实践者,聚焦于将RTP承载的H264视频与AAC音频数据重新封装为可播放的MP4文件这一典型工程问题。包内共31个文件,约197KB,以17个C/C头文件与2个源文件构成核心代码框架,辅…

2026/10/16 9:37:40

Spring Data JDBC 实战:轻量级聚合映射与 CRUD 全解析

1. Spring Data JDBC 到底解决了什么问题Spring Data JDBC 这个名字,很多做 Java 后端的同事第一反应是:这不就是 Spring Data JPA 的简写吗?还真不是。它是 Spring Data 家族里一个独立的成员,定位非常明确——在 JDBC 之上提供轻…

2026/10/16 5:33:43

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/16 4:03:48

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/16 0:01:11

Cephadm实战指南:Linux系统工程师的生产级Ceph集群部署与排障

简介:本资源是一份完整的Ceph分布式存储系统中文技术文档合集,面向Linux系统运维工程师、云平台架构师及存储方向开发者,帮助读者系统掌握Ceph集群的部署、配置与运维核心能力。文档覆盖对象存储(RGW)、块设备&#xf…

2026/10/16 0:01:11

ITK中SpatialObject几何体系解析:坐标系、变换与管道集成

1. 空间对象的定位:为什么 ITK 需要一套几何描述体系很多刚开始接触 ITK 的朋友,包括我自己,最初都是被它的图像滤波、配准、分割这些“正统”功能吸引进来的。等真正上手做点实际项目,比如把分割出来的器官边界做量化分析、给血管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑