Markdown语法大全
Markdown基础语法,高级语法以及速记
1. Markdown背景
1.1 Markdown的发展历史
Markdown 是由 John Gruber 于 2004 年创建的一种轻量级标记语言,如今已成为世界上最流行的标记语言之一。到了2008年的时候,Stack Overflow的联合创始人 Jeff Atwood 推其成为 Stack Overflow的编辑方式,并且非常认同其设计;Github也在2009年左右开始使用Markdown
Stack Overflow是一个全球最大的程序设计领域问答网站,由Jeff Atwood和Joel Spolsky于2008年创立。它采用问答(Q&A)形式,供程序员提出、解答编程问题,是工程师解决代码难题和分享技术知识的社群核心平台
2012年公司组织一起制定出 Markdown的标准规范和其实现的标准测试用例
2014年标准化项目最初被命名为 Standard Markdown,旨在创建一个包含 600 多个测试用例的严格规范,以确保所有兼容的实现都能产生完全相同的输出。然而,这一举动遭到了 Markdown 创始人 John Gruber 的强烈反对。他认为这个新标准偏离了他最初的哲学,为了规避冲突并继续推进标准化进程,项目在 2014 年 正式更名为 CommonMark。
2016 年,互联网工程任务组(IETF)发布了 RFC 7763。这份文件正式为 Markdown 定义了媒体类型 text/markdown。这意味着 Markdown 文件在互联网上拥有了正式的“身份证”,操作系统和浏览器可以更准确地识别和处理它。
2017年,在 CommonMark 的基础上,GitHub 增加了一些非常实用的扩展功能,如表格、任务列表、删除线等,这些功能深受开发者喜爱,被称为 GitHub Flavored Markdown (GFM)。
Markdown 已经形成了一个以 CommonMark 为核心,各种扩展(Flavors)为分支的健康生态
核心:CommonMark 保证了基础语法的稳定与统一
扩展: - GFM:成为技术文档和开发者社区的事实标准 - Microsoft Learn Markdown:增加了你提到的 > [!NOTE] 警报框等扩展,服务于其庞大的文档平台 - 其他:还有许多其他扩展,如支持数学公式的 LaTeX、支持脚注的 Pandoc Markdown 等
在AI时代,markdown语法以及类markdown语法已经成为了金标准
1.2 Markdown原理
Markdown 的底层其实并不神秘,它的核心本质可以概括为三个关键词:纯文本、解析规则和抽象语法树(AST)

- 物理底层:纯文本
Markdown 文件在硬盘上存储时,和你写的 .txt 文件没有任何区别
- 编码:它通常使用 UTF-8 编码,这意味着它可以在任何操作系统(Windows, Mac, Linux)上被打开和读取,不会出现乱码
- 内容:它只包含人类可读的字符。比如你想加粗,你实际上是在文本里输入了两个星号 **。计算机在底层看到的只是字符 * 的 ASCII 或 Unicode 码,而不是“加粗”这个指令
- 跨平台性:因为它只是纯文本,所以它极其轻量,且永远不会因为软件版本更新而打不开
- 逻辑底层:解析与转换
- 解析器会逐行扫描你的文本,利用正则表达式或状态机来识别特定的符号模式
- 这是 Markdown 最核心的底层技术。解析器不会直接把文本变成 HTML,而是先把它转换成一种树状的数据结构,叫做 抽象语法树 (Abstract Syntax Tree, AST)
- 渲染 (Rendering),渲染器会遍历这棵 AST 树,根据规则把每个节点“翻译”成目标格式(通常是 HTML)
设计哲学
- 内容:通过纯文本编写,永久保存,用不过时
- 样式:由渲染器(如浏览器、Typora、VS Code)通过 CSS 动态决定。这意味着同一份 Markdown 文件,在 GitHub 上显示一种风格,在你的笔记软件里显示另一种风格,但内容永远不变
1.2 Markdown解析引擎的发展历史
随着 Markdown 语法的不断扩展(从纯文本到支持表格、数学公式、流程图等),解析器不得不从简单的字符串替换升级为复杂的抽象语法树(AST)构建
- 早期阶段:正则表达式与“蛮力”替换 (2004 - 2010)
在 Markdown 诞生初期,解析器的核心逻辑非常简单直接:正则表达式(Regular Expression)
- 鼻祖:Markdown.pl (2004)
John Gruber 发布的第一个 Markdown 解析器是用 Perl 编写的 Markdown.pl。它的逻辑非常直观:定义一系列正则规则,按顺序扫描文本并进行替换
- 代表引擎:Showdown (2007)
这是最早的 JavaScript 版本解析器,它将 Markdown 带入了浏览器端。Showdown 沿用了正则替换的思路
- 转折阶段:标准化与 AST 的引入 (2011 - 2015)
随着 GitHub Flavored Markdown (GFM) 的兴起和 CommonMark 标准的制定,开发者意识到正则表达式已经无法满足需求,必须引入编译器技术中的抽象语法树(AST)
- 过渡者:Marked (2011)
Marked 是 GitHub 上非常早期的 JS 解析器。早期版本主要依赖正则,性能极高但兼容性一般。后期为了支持 CommonMark 标准,它也不得不引入更复杂的解析逻辑,甚至重构底层
- 革新者:CommonMark.js / cmark (2014)
John MacFarlane 2014年时候最早创建的,他同时也是标准制定人之一,还是 Pandoc的作者。将Markdown文档解析成 抽象语法树(AST),并通过渲染(AST)转换成 HTML 或者 XML
- 现代阶段:PEG 与插件化生态 (2015 - 至今)
在现代,解析引擎不仅要快,还要极度灵活,支持各种“方言”(如数学公式、流程图)。解析表达式文法(PEG)和高度模块化的 AST 处理器成为了主流。
- 技术流派:PEG (Parsing Expression Grammar)
- 生态霸主:markdown-it (2014+)(Remarkable 是2014年左右的开源项目,目前已更新很少了;Markdown-it 是 Remarkable 核心两个作者后面开的开源项目,同时借鉴参考了 MacFarlane 的 Commonmark 的一些实现,也是功能、扩展性都非常不错的 Markdown解析引擎)
当前趋势
双向绑定:现代编辑器(如 Typora, Obsidian)不仅需要将 Markdown 转为 HTML,还需要将 HTML 操作(如光标定位)映射回 Markdown 源码,这对 AST 的精确度提出了更高要求
WYSIWYG(所见即所得):解析器不再只是生成 HTML 字符串,而是直接生成可编辑的 DOM 节点或虚拟 DOM
1.3 Markdown优势
- 专注于文字内容
- 纯文本,易读易写,可以方便地纳入版本控制;
- 语法简单,没有什么学习成本,能轻松在码字的同时做出美观大方的排版
Markdown 无处不在。StackOverflow、CSDN、掘金、简书、GitBook、有道云笔记、V2EX、光谷社区等。主流的代码托管平台,如 GitHub、GitLab、BitBucket、Coding、Gitee 等等,都支持 Markdown 语法,很多开源项目的 README、开发文档、帮助文档、Wiki 等都用 Markdown 写作
Markdown 是纯文本可移植的。几乎可以使用任何应用程序打开包含 Markdown 格式的文本文件。如果你不喜欢当前使用的 Markdown 应用程序了,则可以将 Markdown 文件导入另一个 Markdown 应用程序中。
Markdown 是独立于平台的。你可以在运行任何操作系统的任何设备上创建 Markdown 格式的文本
Markdown 入门的最佳方式就是多使用它。由于有大量免费工具的存在,上手 Markdown 是很方便的。比较遗憾的一点是各平台可能采用不同语言实现的 Markdown 解析引擎,或采用同一解析引擎的不同版本,而且可能有不同程度的定制与扩展,这导致在不同平台上使用 Markdown 写作时体验并不完全一致
1.4 Markdown创作的工具
- 现代编辑器 VSCode/Atom
- 传统编辑器 Vim/Sublime Text/Notepad++/Emacs
- Markdown 文档生成器 Typora/Mark Text
- IDE 自带编辑器 IntelliJ IDEA / Android Studio / WebStorm
- 专用编辑器 Ulysses / Mou / 妙言 / Markpad
- 在线编辑器等
2. 基础语法
Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。
轻量级标记语言(Lightweight Markup Language, LML)是一类通过简单的纯文本符号来定义文档格式的语言
它的核心理念是:让文档的源代码在未被渲染(即没有转换成漂亮排版)的情况下,依然易于阅读和编写