什么是 rumdl?
rumdl 是一个用 Rust 写的 Markdown 检查与格式化工具。它实现了大家早已从 markdownlint 熟悉的那套规则,也就是 MD001 到 MD059 这些针对标题层级、列表缩进、行长度、代码围栏风格、链接语法和行尾空格的检查,而它跑完一整棵文档树只要几毫秒,不是几秒。这些规则大多带有修复方案,所以 rumdl check --fix 会把它报出来的问题直接改好,而不是丢给你一份清单,rumdl fmt 则能把一个文件整体重新排版。配置是一个 rumdl.toml 文件,或者 pyproject.toml 里的一张 [tool.rumdl] 表;已经有的 .markdownlint.json 可以用 rumdl import 转换过来;rumdl server 讲的是 Language Server Protocol,所以同一个二进制文件也会在你的编辑器里把问题标出来。把它理解成 Ruff 之于 Python,只是对象换成了 Markdown。
rumdl.toml,里面的选项旧构建可能会默默忽略。Debian 和 Ubuntu 根本没有收录 rumdl,所以最新构建在这里不是锦上添花,而是通过 apt 获得它的唯一途径。
⚡ rumdl 的主要功能
🏎️ 用 Rust 的速度跑 markdownlint 规则
熟悉的 MD001 到 MD059 检查,由一个编译好的二进制文件执行,没有解释器要启动。以前在 CI 里要单独占一步的文档树,现在快到每次保存都能跑一遍。
🔧 会修,而不只是抱怨
rumdl check --fix 会修好那些有安全修复方案的问题:标题标点、列表标记与缩进、块前后的空行、行尾空格、围栏风格,整棵树就地改完。
🖊️ 它同时也是格式化工具
rumdl fmt 像代码格式化工具那样重排 Markdown,一个文件长什么样,从此不再是评审意见。--check 则把它变成一道什么都不改的 CI 关卡。
🔌 编辑器集成是内置的
rumdl server 是一个 Language Server,所以 VS Code、Neovim、Helix 和 Zed 得到的诊断和修复,跟命令行上的一模一样,都出自你装的那一个二进制文件。
♻️ 保留你的 markdownlint 配置
rumdl import 读取已有的 .markdownlint.json 或 .markdownlintrc,写出等价的 rumdl.toml,所以把一个仓库切过来是一条命令,而不是一次规则审计。
📖 会自己解释的规则
rumdl rule 列出每一条检查,rumdl explain MD013 把其中一条讲清楚,包括它修什么、怎么配置,谁都不用再猜 CI 日志里那个代码是什么意思。
apt upgrade 就能让你保持最新。
📦 从 deb.griffo.io 安装
第 1 步:添加仓库
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt update🆓 有一个永久免费的镜像。 deb-free.griffo.io 永久免费提供软件包 — 无需账号、无需订阅,最多落后上游 2 个月,安全修复立即发布。目前收录 cliamp、Ghostty、lazydocker、Oh My Posh 和 Zed;rumdl 不在其中,因此今天只能通过上面的仓库安装 — 提出请求即可将其加入。
第 2 步:安装 rumdl
# 安装最新版 rumdl
sudo apt install rumdl
# 验证安装
rumdl --version# 安装最新版 rumdl
apt install rumdl
# 验证安装
rumdl --version第 3 步:第一次运行
# 检查当前目录下的每一个 Markdown 文件
rumdl check .
# 把所有有安全修复方案的问题都修掉
rumdl check --fix .
# 生成一份可以直接改的 rumdl.toml
rumdl init
# 看看某个规则代码是什么意思
rumdl explain MD013
# 所有的子命令和参数
rumdl --help🎯 基本用法示例
检查与修复:
# 一个文件、一个目录,或者一个通配符
rumdl check README.md
rumdl check docs/
rumdl check "**/*.md"
# 就地修复,然后看看还剩下什么
rumdl check --fix .
# 这一次运行先把某条太吵的规则关掉
rumdl check --disable MD013 .
# 只跑此刻你真正在意的那几条规则
rumdl check --enable MD001,MD009,MD047 .
# 机器可读的输出,交给 CI 里那一步
# 把问题标注回代码的任务
rumdl check --output-format json .格式化:
# 就地重新排版这些文件
rumdl fmt docs/
# 什么都不写入,只要有该改的地方就失败,
# 这是 CI 里用的那种形式
rumdl fmt --check docs/
# 在接受之前先看看它想改哪些地方,
# 确认没问题再动手
rumdl fmt --diff docs/配置与规则:
# 在这个仓库里创建 rumdl.toml
rumdl init
# 转换你已经有的 markdownlint 配置
rumdl import .markdownlint.json
# 实际生效的配置是什么,又分别来自哪里
rumdl config
# 列出每一条规则,再把其中一条读完整
rumdl rule
rumdl explain MD024
# Shell 补全,直接写到你的 shell
# 会去读取的那个位置
rumdl completions bash | sudo tee /etc/bash_completion.d/rumdl > /dev/null# 在这个仓库里创建 rumdl.toml
rumdl init
# 转换你已经有的 markdownlint 配置
rumdl import .markdownlint.json
# 实际生效的配置是什么,又分别来自哪里
rumdl config
# 列出每一条规则,再把其中一条读完整
rumdl rule
rumdl explain MD024
# Shell 补全,直接写到你的 shell
# 会去读取的那个位置
rumdl completions bash | tee /etc/bash_completion.d/rumdl > /dev/null🔧 工具集成
rumdl 生来就是要顶替 markdownlint 已经待着的那些位置:
- 你的编辑器:
rumdl server是一个 Language Server,所以 Neovim、Helix、VS Code 和 Zed 会把诊断直接显示在行内,并以代码操作的形式应用修复 - markdownlint 配置:
rumdl import把.markdownlint.json或.markdownlintrc变成rumdl.toml,而规则代码还是你的团队早就在争论的那些 - pyproject.toml: 一张
[tool.rumdl]表让这些设置和你的 Ruff、pytest 配置待在一起,而不是再多一个点文件 - CI 与 pre-commit:
rumdl check .有违规就以非零状态退出,rumdl fmt --check则守住格式这一关,而构建机上不必先装 Node 或 Python 运行时 - 静态站点生成器: MkDocs、Hugo、Docusaurus 和 mdBook 的文档源文件都是普通 Markdown,所以同一条检查可以在构建之前先跑一遍
🚀 为什么选择 deb.griffo.io?
- 官方 Ubuntu: 没有收录 rumdl,标准系统上
apt install rumdl会失败 - npm 或 pip: 能用,但会把一次 Markdown 检查绑在 Node 或 Python 环境上,而且每个项目、每个 CI 镜像都要重装一遍
- 自己从源码构建: 版本够新,但每台机器都要一套 Rust 工具链,而且留下一个 apt 完全不知道的二进制文件
- deb.griffo.io: 最新版本,并自动更新
- ✅ 唯一的 apt 来源: Debian 与 Ubuntu 官方源都没有 rumdl;本仓库打包官方上游发布版
- ✅ 全系统可用,不带运行时: 机器上所有仓库共用一个
/usr/bin/rumdl,背后既没有 npm install,也没有虚拟环境 - ✅ 自动更新: 上游发布后数小时内更新软件包,所以新规则和新修复靠一条普通的
apt upgrade就能到手 - ✅ 完整的软件包: 官方上游的 Linux 构建,安装为
/usr/bin/rumdl,不加料、不打补丁 - ✅ 诚实的依赖: 一个静态链接的 Rust 二进制文件,检查、修复、格式化和跑服务都不需要再装别的东西
- ✅ 两种架构: amd64 和 arm64,同一个包覆盖你的笔记本、服务器和 arm64 构建机
- ✅ 多发行版: 支持 Ubuntu 22.04、24.04、25.10 和 26.04
- ✅ 易于维护: 使用标准 apt 命令即可更新
📦 软件包构建仓库
Ubuntu 软件包在这个 GitHub 仓库中自动构建和维护:
- 📐 rumdl-debian - 最新版本构建
🔗 相关软件包
deb.griffo.io 同样提供:
- Ruff - 同样的思路用在 Python 源码上,一个二进制文件里装着检查器和格式化工具
- uv - Rust 速度的 Python 打包工具,正好服务于那些文档正被你检查的项目
- Neovim - 一个会和
rumdl server对话的编辑器,你打字的时候就把诊断显示出来 - ripgrep - 用来在同一棵 Markdown 树里做那些检查器回答不了的搜索
--fix 收拾积攒多年的 Markdown 走样;以及在编辑器里就看到构建将来会给你的那些警告。