什么是 Markdown?
Markdown 是一种轻量级标记语言,具有简单的文本格式化语法。其主要目标是在原始形式(源代码)中「人类可读」,并且易于转换为有效的 HTML。自 2004 年发布以来,它已成为网络上作家、开发者和内容创作者的事实标准。
Markdown 是两件事:(1)一种简单的文本格式化语法;(2)一个软件工具,最初用 Perl 编写,用于将这种格式转换为 HTML。
标志由 Dustin Curtis • 公共领域
Markdown 是一种轻量级标记语言,具有简单的文本格式化语法。其主要目标是在原始形式(源代码)中「人类可读」,并且易于转换为有效的 HTML。自 2004 年发布以来,它已成为网络上作家、开发者和内容创作者的事实标准。
Markdown 是两件事:(1)一种简单的文本格式化语法;(2)一个软件工具,最初用 Perl 编写,用于将这种格式转换为 HTML。
在 Markdown 之前,为网络写作需要了解 HTML(超文本标记语言)或使用 WYSIWYG(「所见即所得」)编辑器,这些编辑器通常生成沉重且难以维护的代码。
还有其他轻量级标记语言,如 Textile 和 reStructuredText,但许多看起来仍然像计算机代码或需要复杂的标签。Markdown 的灵感来自一个简单的来源:纯文本电子邮件中使用的格式。
在互联网的早期,用户已经使用直观的约定来格式化电子邮件:*星号*表示强调,> 符号表示引用,破折号表示列表。这些自然约定成为 Markdown 语法的基础。
Markdown 由 John Gruber(生于 1973 年)创建,他是来自宾夕法尼亚州费城的技术博主、UI 设计师,也是热门博客 Daring Fireball 的创建者,Aaron Swartz(1986-2013)做出了重要贡献,他是才华横溢的神童程序员和互联网活动家。
Gruber 有了最初的想法,并编写了将标记文本转换为 HTML 的初始 Perl 脚本。他的理念很明确:标记的文档应该可以原样发布,作为纯文本,而不看起来像是充满了标签或格式指令。
Aaron Swartz 与 Gruber 一起开发了语法。Swartz 已经创建了 atx(另一种标记语言),并影响了使用 # 创建标题语法,同时帮助完善 HTML 到文本的翻译规则。
1.0.1 版本于 2004 年 12 月 17 日在 BSD 开源许可证下公开发布。
"Markdown 格式化语法的首要设计目标是使其尽可能可读。想法是,用 Markdown 格式化的文档应该可以原样发布,作为纯文本,而不看起来像是用标签或格式指令标记过的。"
— John Gruber, Daring Fireball

Markdown 创建者
1973 年出生于费城的技术博主和 UI 设计师。Daring Fireball 的创建者,这是最具影响力的专注于苹果产品的技术博客之一。他还主持 The Talk Show 播客。Gruber 在德雷塞尔大学获得计算机科学学士学位。
照片由 Randy Stewart • Wikimedia Commons • CC BY-SA 3.0

Markdown 联合创建者(1986-2013)
神童程序员、企业家、作家和互联网活动家。14 岁时共同编写了 RSS 1.0。他是 Creative Commons 的早期架构师之一,Open Library 的开发者和 Reddit 的联合创始人。2013 年入选互联网名人堂。
照片: Wikimedia Commons • CC BY-SA 3.0
"Aaron Swartz 因其对 Markdown 格式化语法设计的反馈而值得极大的赞誉。Markdown 因为 Aaron 的想法、反馈和测试而变得更好。"
— John Gruber
由于 Gruber 的原始 Perl 脚本有一些模糊之处,并且没有涵盖所有用例(如表格或数学定义),社区开始在 Python、Ruby、PHP 和 JavaScript 等其他语言中创建自己的实现。
这导致了碎片化。开发者添加了原始规范中不存在的额外功能。所谓的 Markdown "口味"出现了:
MultiMarkdown(2005)— 由 Fletcher Penney 创建,添加了对表格、脚注、元数据和 LaTeX 导出的支持。
PHP Markdown Extra — 一个流行的 PHP 基础 CMS(如 WordPress 和 Drupal)版本,由 Michel Fortin 创建。
GitHub Flavored Markdown(GFM)— 可能是最具影响力的变体。GitHub 为其 README.md 文件、评论和问题采用了 Markdown,添加了代码块的语法高亮、任务列表和表格。GitHub 的流行巩固了 Markdown 作为开发者必备工具的地位。
John Gruber 于 12 月 17 日在 Daring Fireball 博客上发布 Markdown 1.0.1,包括用于转换的 Perl 脚本和对 Movable Type、Blosxom 和 BBEdit 的初始支持。
Michel Fortin 将 Markdown 移植到 PHP,创建了首批替代实现之一。后来在 PHP Markdown Extra 中添加了表格和脚注等扩展。
GitHub 开始使用 Markdown 处理 README 和文档,在全球开发者中大规模普及了这种语法。
GitHub 基于 Sundown 解析器创建了自己的扩展,添加了表格、语法高亮、任务列表和自动链接。
由于有如此多不同的"口味",Markdown 文档可能会根据使用的网站或应用程序而呈现不同。这让 Stack Exchange 和 GitHub 等公司感到沮丧。Jeff Atwood(Stack Overflow 联合创始人)和 John MacFarlane 开始努力创建严格的标准规范。
最初称为 "Standard Markdown",该项目遭到了 John Gruber 的反对,他认为他的 Markdown 就是标准,不希望第三方占用这个名称。争议之后,它被重命名为 CommonMark。该规范提供测试套件以确保 Markdown 在任何系统上的行为一致。
IETF 发布 RFC 7763 和 RFC 7764,正式注册媒体类型 text/markdown。
GitHub 弃用 Sundown,发布基于 CommonMark 的正式 GitHub Flavored Markdown 规范,使用 cmark 库。
文件扩展名:.md 和 .markdown。在数百万网站上使用,包括 Stack Overflow、Reddit、Discord、Notion 和 Obsidian。
今天,Markdown 已经超越了编程世界,在数字文化中无处不在。其主要应用领域包括:
技术文档 — 这是行业标准。Microsoft Learn、Google Cloud Docs 和 GitHub 文档等网站都是用 Markdown 编写的。
静态网站生成器(SSG)— Jekyll、Hugo 和 Gatsby 等工具使用 Markdown 文件生成整个网站。
笔记与生产力 — 新一波"第二大脑"应用程序如 Obsidian、Notion、Roam Research 和 Logseq 使用 Markdown 进行数据存储,确保用户不会被锁定在专有格式中。
数据科学 — Jupyter Notebooks 是数据科学家(Python/R)的必备工具,使用 Markdown 单元格来解释代码和呈现结果。
即时通讯 — Slack、Discord、WhatsApp 和 Telegram 支持 Markdown 子集用于消息格式化。
Markdown 已证明是一种有弹性的技术。与专有格式(如 .doc)随时间变化和损坏不同,2004 年编写的 Markdown 文件今天仍然可以被任何人或计算机完美阅读。
当前趋势指向"扩展 Markdown",如 MDX,它允许在 Markdown 中使用 React 组件,将写作的简单性与现代网络的交互性融合在一起。
"Markdown 使网络出版民主化,让作家可以专注于内容而不用担心设计,让开发者可以创建美观实用的文档而不需要复杂文字处理器的负担。"
创建二十多年后,Markdown 无处不在。Gruber 和 Swartz 追求的简单性已成为现实:每天有数百万人使用 Markdown 写作,很多时候甚至不知道自己在使用标记语言。
Aaron Swartz 关于开放和可访问互联网的愿景在 Markdown 的精神中延续:一个免费、简单的工具,使网络内容创作民主化。他对社会正义和信息自由获取的承诺深刻影响了我们在线分享知识的方式。
原始的 Markdown.pl 脚本自 2004 年以来没有更新,但其遗产在几乎所有编程语言的数百个实现中延续,从 C 到 JavaScript,从 Python 到 Go。