markdown-lint
npx skills add https://github.com/niracler/skill --skill markdown-lint
Agent 安装分布
Skill 文档
Markdown Lint
为ä»åºé ç½® markdown æ ¼å¼æ£æ¥ï¼markdownlint + æ°´å¹³çº¿ç¦æ¢ï¼å pre-commit hookã
Prerequisites
| Tool | Type | Required | Install |
|---|---|---|---|
| Node.js | cli | Yes | brew install node or nodejs.org |
| markdownlint-cli2 | cli | Yes | npx markdownlint-cli2 (no install needed) |
| pre-commit | cli | No | uv tool install pre-commit --with pre-commit-uv or pipx install pre-commit or brew install pre-commit |
Do NOT proactively verify these tools on skill load. If a command fails due to a missing tool, directly guide the user through installation and configuration step by step.
When to Use
- æ°ä»åºåå§åï¼ç¬¬ä¸æ¬¡ä¸ºä»åºæ·»å markdown æ ¼å¼æ å
- æ£æ¥/ä¿®å¤ï¼è¿è¡æ ¼å¼æ£æ¥ææ¹éä¿®å¤ç°ææä»¶
- è¿ç§»ï¼å°æ ¼å¼æ åå¤å¶å°å¦ä¸ä¸ªä»åº
ä¸éç¨ï¼
- åæä»¶æ£æ¥ï¼ç´æ¥è¿è¡
npx markdownlint-cli2 file.mdï¼ä¸éè¦èµ° setup æµç¨ - æç« å å®¹å®¡æ ¡ï¼ä½¿ç¨ writing-proofreading skillï¼æ¥éª¤ 6 ä¼å¼ç¨æ¬ skillï¼
Setup æµç¨
1. æ£æ¥ä»åºç¶æ
# å·²æé
ç½®ï¼è·³å°ãæ£æ¥/ä¿®å¤ã
ls .markdownlint.json .pre-commit-config.yaml 2>/dev/null
2. å建é ç½®æä»¶
.markdownlint.jsonï¼
{
"default": true,
"MD013": false,
"MD024": { "siblings_only": true },
"MD033": false,
"MD035": false,
"MD036": false,
"MD041": false,
"MD060": false
}
å ³éè§å说æï¼
| è§å | çç± |
|---|---|
| MD013 | CJK ææ¬åè¡¨æ ¼ä¸éåè¡é¿åº¦éå¶ |
| MD033 | å
许 <br>, <small> ç inline HTML |
| MD035 | 水平线å®å ¨ç¦æ¢ï¼ç±ç¬ç«èæ¬æ£æ¥ |
| MD036 | å 许 bold ä½è§è§æ é¢ |
| MD041 | YAML frontmatter 导è´é¦è¡éæ é¢ |
| MD060 | è¡¨æ ¼ç®¡é符é´è·æ ·å¼è¿äºä¸¥æ ¼ |
æé追å ç¦ç¨ï¼æ ¹æ®ä»åºå å®¹é æ æ·»å ï¼ï¼
| è§å | åºæ¯ | çç± |
|---|---|---|
| MD025 | ä»åºå«å¯¼å ¥/vendor ææ¡£ | åè®®ææ¡£å¸¸æå¤ä¸ª H1 |
| MD045 | ä»åºå«å¯¼å ¥/vendor ææ¡£ | vendor ææ¡£å¾çæ alt text |
| MD051 | CJK éç¹é¾æ¥ | #_䏿æ é¢ æ ¼å¼ççæ®µä¸è¢«è¯å« |
| MD056 | 夿åèè¡¨æ ¼ | åå¹¶è¡/åé¿åçè¡¨æ ¼è§¦åè¯¯æ¥ |
.pre-commit-config.yamlï¼
repos:
- repo: https://github.com/DavidAnson/markdownlint-cli2
rev: v0.20.0 # è¿è¡ pre-commit autoupdate è·åææ°
hooks:
- id: markdownlint-cli2
- repo: local
hooks:
- id: no-horizontal-rules
name: no horizontal rules outside frontmatter
entry: scripts/check-horizontal-rules.sh
language: script
types: [markdown]
å建åå¿ é¡»è¿è¡
pre-commit autoupdateï¼ä¸é¢ç rev å¯è½å·²è¿æ¶ã
scripts/check-horizontal-rules.shï¼
ä» scripts/check-horizontal-rules.sh å¤å¶ï¼ç¶å chmod +xã
Windows ç¨æ·ï¼
.shèæ¬éè¦å¨ Git Bash æ WSL ä¸è¿è¡ã
.gitignoreï¼å¦ææ²¡æï¼ï¼
node_modules/
.mypy_cache/
__pycache__/
3. ç§»é¤ç°æ --- åé线
ä¿ç YAML frontmatter ç ---ï¼å é¤å
¶ä½æææ°´å¹³çº¿ï¼
# æ¾åºè¿è§æä»¶
bash scripts/check-horizontal-rules.sh $(find . -name '*.md' -not -path './node_modules/*')
# æåè¿è§æä»¶å表ï¼ä»
å¹é
.md: æ ¼å¼çè¡ï¼é¿å
æè·éè¯¯æ¶æ¯ï¼
files=$(bash scripts/check-horizontal-rules.sh \
$(find . -name '*.md' -not -path './node_modules/*') 2>&1 \
| grep -E '\.md:[0-9]+:' | grep -oE '^[^:]+' | sort -u)
# æ¹éç§»é¤ï¼ä¿ç frontmatterï¼
for file in $files; do
awk 'NR == 1 && /^---[[:space:]]*$/ { print; fm = 1; next } fm && /^---[[:space:]]*$/ { print; fm = 0; next } !fm && /^[[:space:]]*[-*_][[:space:]]*[-*_][[:space:]]*[-*_][-*_ ]*$/ { next } { print }' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
echo "Fixed: $file"
done
注æï¼grep å¿ é¡»ç¨
\.md:[0-9]+:è¿æ»¤ï¼å¦åèæ¬æ«å°¾ç “Error: …” éè¯¯æ¶æ¯ä¼è¢«å½ææä»¶åã
4. æ ¼å¼åå ¨é¨æä»¶
# åä»åº
npx markdownlint-cli2 --fix "**/*.md"
npx markdownlint-cli2 "**/*.md"
# monorepoï¼æé¤åä»åºåä¾èµç®å½ï¼
npx markdownlint-cli2 --fix "**/*.md" "#repos" "#node_modules"
npx markdownlint-cli2 "**/*.md" "#repos" "#node_modules"
4a. å¤çæ æ³èªå¨ä¿®å¤çé误
--fix æ æ³ä¿®å¤ç常è§é误ï¼
- MD040ï¼ä»£ç å缺å°è¯è¨ï¼ï¼ç»
```å ä¸è¯è¨æ è¯ï¼pythonãbashãyamlãtextçï¼ - MD025/MD045/MD051/MD056ï¼å¦æå¤§éåºç°å¨ vendor ææ¡£ä¸ï¼å¨
.markdownlint.jsonä¸ç¦ç¨å¯¹åºè§å
å åæé误åå¸åå³å®çç¥ï¼
# æè§åç»è®¡
npx markdownlint-cli2 "**/*.md" "#repos" "#node_modules" 2>&1 \
| grep -oE 'MD[0-9]+' | sort | uniq -c | sort -rn
# ææä»¶ç»è®¡
npx markdownlint-cli2 "**/*.md" "#repos" "#node_modules" 2>&1 \
| grep -oE '^[^:]+' | sort | uniq -c | sort -rn | head -10
5. å®è£ hook
pre-commit install
6. éªè¯
# ä¸¤é¡¹æ£æ¥å
¨é¨éè¿ï¼monorepo å "#repos" æé¤åä»åºï¼
npx markdownlint-cli2 "**/*.md" "#repos" "#node_modules"
bash scripts/check-horizontal-rules.sh $(find . -name '*.md' -not -path './repos/*' -not -path './node_modules/*')
# æµè¯ hook: æ
æå --- å°æ md æä»¶ï¼git add + commitï¼åºè¢«æ¦æª
æ£æ¥/ä¿®å¤ï¼å·²æé ç½®çä»åºï¼
npx markdownlint-cli2 "**/*.md" "#repos" "#node_modules" # æ£æ¥
npx markdownlint-cli2 --fix "**/*.md" "#repos" "#node_modules" # èªå¨ä¿®å¤
bash scripts/check-horizontal-rules.sh $(find . -name '*.md' -not -path './repos/*' -not -path './node_modules/*')
åä»åºé¡¹ç®å»æ
"#repos"å³å¯ã
常è§é®é¢
| é®é¢ | åå | ä¿®å¤ |
|---|---|---|
pre-commit: command not found |
æªå®è£ | uv tool install pre-commit --with pre-commit-uvï¼æ¨èï¼æ pipx install pre-commit / brew install pre-commit |
| markdownlint 大é MD060 é误 | è¡¨æ ¼ç®¡é符é´è· | .markdownlint.json ä¸ "MD060": false |
| 大é MD056 é误 | vendor ææ¡£å¤æè¡¨æ ¼ | .markdownlint.json ä¸ "MD056": false |
| 大é MD051 é误 | CJK éç¹é¾æ¥ | .markdownlint.json ä¸ "MD051": false |
.sh èæ¬å¨ Windows æ æ³æ§è¡ |
Windows ä¸åçæ¯æ Bash | ä½¿ç¨ Git Bash æ WSL |
frontmatter --- 被误å |
awk èæ¬é®é¢ | 确认æä»¶ç¬¬ 1 è¡æ¯ --- ä¸ç´§æ¥ YAML å
容 |
æ¹éå é¤ HR 产çåå¾ .tmp æä»¶ |
grep æè·äºèæ¬éè¯¯æ¶æ¯ä½ä¸ºæä»¶å | ç¨ grep -E '\.md:[0-9]+:' è¿æ»¤ï¼ä»
å¹é
æä»¶è·¯å¾è¡ |
--fix æªä¿®å¤ææé®é¢ |
é¨åè§åæ æ³èªå¨ä¿®å¤ | æå¨ä¿®å¤ï¼éå¸¸æ¯ MD040 缺å°ä»£ç åè¯è¨ï¼å ```text çï¼ |