无序列表的项目符号#
在Markdown中,创建无序列表需要在每项前面加上连字符(-)、星号(*)或加号(+)。缩进一个或多个项目即可创建嵌套列表:
- 项目A
- 项目B
- 嵌套项目B.1markdown* 项目A
* 项目B
* 嵌套项目B.1markdown三者渲染结果完全相同。用哪种符号只是风格问题——而这正是 lint 工具检查的内容。
MD004(ul-style)#
Markdown lint 规则 MD004(ul-style)用于配置并强制文档中无序列表所使用的项目符号类型。
- 标签(Tags):
bullet、ul - 别名(Aliases):
ul-style - 可自动修复(Fixable):部分违规行为可通过工具自动修复。
- 参数(
style):consistent(默认值):允许使用任何符号(*、-、+),但整篇文档中的所有列表必须与第一个列表的风格保持一致。asterisk:强制使用星号(*)。dash:强制使用连字符(-)。plus:强制使用加号(+)。sublist:允许每个嵌套列表层级(sublist)使用与父层级不同的独立符号。
默认配置通常为 “consistent”:
{
"ul-style": {
"style": "consistent"
}
}json例如,当启用 sublist 风格时,以下文档是合法的,因为最外层使用星号,中间层使用加号,最内层使用连字符:
* 项目 1
+ 项目 2
- 项目 3
+ 项目 4
* 项目 5
+ 项目 6markdown为什么我偏好连字符#
默认可能是星号,但我觉得连字符(-)才是常见风格,也最容易阅读。还有一个实际原因:AI agent 几乎都用连字符,而星号(**)主要用来表示粗体。因此强制列表用星号会带来噪声——行首的 * 一眼看去难以区分是列表符号还是粗体格式。
不要强行改写现有文档#
有时文档通篇使用星号(*),且完全一致。我不想为了满足某条规则而改动那份文档。lint 工具不应成为重写干净、一致内容的理由。
方案一:配置连字符风格#
可以更新 JSON 配置(.markdownlint.json),让规则接受连字符:
{
"ul-style": {
"style": "dash"
}
}json现在连字符可以通过。但只用星号的文档仍然报错,改写问题依旧存在。
方案二:禁用规则#
这条规则价值不大——选择哪种符号纯属外观问题。我更喜欢直接禁用它:
{
"ul-style": false
}json这样两种风格都能自由共存。每份文档保留自己的约定,无需强制改写,lint 工具也保持安静。
结论#
风格规则是观点,不是 bug。MD004 只关心你选哪种符号,而每份文档本来就会一致地选用一种。配置 "dash" 仍然惩罚现有星号文档,所以我选择 "ul-style": false,让每个文件保留自己的风格。