什么是 Markdown

很多人第一次听说 Markdown,会把它当成「网页编辑器的另一种叫法」。这一页要澄清的是:Markdown 不是编辑器,也不是排版方案,它是一套用文本符号描述文档结构的语法规则。理解这一点,你才能解释为什么同一份 .md 文件在 GitHub、VS Code 和 Obsidian 里长得不一样,却仍然算同一份文档。

Markdown

使用简单符号(如 # * - [] ())标记标题、列表、强调、链接等,使文本既可读又可被解析为 HTML。

特点

  • 语法极简,可读性强(纯文本)。
  • 易于转为 HTML/PDF/幻灯片等格式。
  • 适合写文档、博客、笔记、README。

这套语法只有十来个核心符号,规则集中在一份规范里,因此学习曲线很平。更关键的是,源文件本身就已经是排好版的纯文本:不依赖任何软件就能读,可以用搜索工具查找,可以用 diff 逐行比较两个版本,也可以用 Git 追踪每一次改动。2004 年 John Gruber 定义了最初版本,2014 年各方共同制定了 CommonMark 规范,GitHub 又在 CommonMark 之上补充了表格、删除线等扩展,这套体系沿用至今。

一份源码如何变成网页

下面这段 Markdown 源码:

# 安装 Node.js

在终端执行 `npm install`,然后运行 `npm start`。

经过解析后得到的 HTML 是这样的:

<h1>安装 Node.js</h1>
<p>在终端执行 <code>npm install</code>,然后运行 <code>npm start</code>。</p>

也就是说,Markdown 只负责标出「这段文字是标题」「这段文字是代码」这类结构信息,具体长什么样由渲染器决定。你甚至可以在 Markdown 里直接写 HTML,解析器会原样保留:

这是 Markdown 段落。

<div align="center">这里是原生 HTML 块。</div>
<p>这是 Markdown 段落。</p>
<div align="center">这里是原生 HTML 块。</div>

生态

  • 各类编辑器支持(VS Code、Typora、Obsidian、Notion 等)。
  • 各平台渲染存在细微差异(GitHub Flavored Markdown、CommonMark、各博客引擎扩展)。

同一份源码在不同平台上表现不一,根源在于它们启用的扩展语法并不相同:

方言地位相比基础语法多出的能力
CommonMark通用规范基线标题、列表、代码、引用等核心语法的精确行为
GFMGitHub 扩展表格、删除线、任务列表、自动链接
平台方言各家私有数学公式、提示块、折叠区、思维导图等

常见坑

练习

下面三个文件里,只有一个是用 Markdown 写的。判断另外两个是什么,并说明理由。

  • notes.txt:内容是「标题」加一行「正文」,没有任何标记符号。
  • doc.md:内容是 # 标题,空行,再加一行「正文」。
  • page.html:内容是 <h1>标题</h1> 加一段 <p>正文</p>。
纯文本

解题思路: 判断一个文件是不是 Markdown,要看它的结构由什么构成,而不是看扩展名。Markdown 文件用标记符号(井号、反引号、列表符号)来组织结构;纯文本没有任何标记;HTML 靠标签来组织结构。

详细步骤:

  1. doc.md 是 Markdown:井号加空格构成一级标题,空行把标题和正文分成两段,正是 Markdown 的写法。
  2. notes.txt 不是 Markdown:它只是纯文本,没有任何结构标记。纯文本和 Markdown 是两回事,扩展名本身不能决定内容是不是 Markdown。
  3. page.html 也不是 Markdown:它是 HTML 源码,靠 <h1>、<p> 这类标签组织结构。Markdown 虽然允许内嵌 HTML,所以一个 .md 文件里完全可能出现 <h1>,但当整个文件靠 HTML 标签来组织结构时,它就是 HTML。

最终答案: 只有 doc.md 是 Markdown;notes.txt 是纯文本,page.html 是 HTML。

小结

读完这一页,你应当能说清 Markdown 规范了什么、没规范什么,能解释它与 HTML 的分工,也能判断一份文档为什么值得用 Markdown 而不是富文本来写。下一步不妨动手写一份 README,对照着源码看看它在浏览器里变成了什么样子。

发现内容有问题?

告诉我们哪里需要改进。