Markdown 简介

等级:⭐        难度:⭐        趣味性:⭐⭐⭐


十六年前,一个叫 John Gruber 的前端工程师去参加会议,临时被邀请上台演讲。工作人员告诉他还有十五分钟准备时间,但是他手上没有笔记本电脑,不能用 word 文字处理软件,于是他拿起手头上的笔打了个草稿,草稿是这么写的:

# 前端技术探讨
## 致谢
...........................................
## 前端技术发展历史
..............................................
## 棘手的问题
  - xxxxxxx
  - xxxxxxx
## 五年技术展望
....................................
## 总结
.................................

短短十几分钟就把稿子写好了,演讲很顺利。

回到家后,他想把稿子发布到网上,但是陷入了沉思:为什么我用了十几分钟就写好的草稿,反而要花费一个小时小心翼翼地录入电脑,并且调整好格式,才能发布到网页上呢?于是他拿着草稿不断琢磨,草稿和 HTML 到底有什么相同之处,有什么不同。突然间,一拍大腿,有了,原来一般写文章并不需要复杂的 HTML 标签和样式,只要常用的标题、段落、列表、图片就够了。于是他找到了好朋友 Aaron Swartz,商量怎么做一个简单的类似 HTML 语言的标记,只要满足日常大部分写作和阅读场景就可以了。

两人讨论出了一个方案,把 HTML 常用的标签抽取出来,分别用简化的符号表示,比如 # 符号表示 HTML 中的 <h1> 标题。符号非常容易书写,可以做到手不离开键盘写完整篇文章,这样就不用中断写作思路另外,调整样式不需要像 word 一样用鼠标选中文字,再选择样式,符号本身就代表了样式。关键是这样书写也不影响阅读,因为这些符号不常用,而且没有特别的含义,不会对语义有影响。

符号可以如此地简单,比如 HTML 的 <h1> 可以用 # 表示,<h2>## 表示,以此类推。<p> 标签?不存在的,不需要任何符号,只要新起一行就表示一个段落。于是就可以把草稿内容轻易用简化的语法表示了。

那么问题来了,应该取个什么名字呢? John Gruber 想了半天,既然 HTML 是 Markup ,那我跟你对着干,就叫 Markdown 。从此,世界上多了一个叫 Markdown 的标记语言。

但是用 markdown 写好的文章还是要发布到网页上的,而网页是用 HTML 编写的。没问题,那就写一个程序,自动把符号转化成 HTML 标签,直接放到网页上。于是 John Gruber 用当时流行的 Perl 写了脚本 Markdown.pl,把符号转化成 HTML,并把脚本发布到网上。


以上纯属虚构。但是很好展现了 Markdown 的特点:

  • 易于撰写

  • 易于阅读

  • 可以转成有效的、结构良好的 HTML 格式

什么是 Markdown

说了这么多,也许还不明白什么是 Markdown。Markdown 是一种轻量级标记语言,也可能是世界上最简单的标记语言。它允许人们使用易读易写的纯文本格式编写文档,然后转化成有效的 XHML(或者 HTML)文档。

时间回到 2004 年,苹果工程师 John Gruber 因为编写冗长、费力的 HTML 标签来正确格式化自己的内容感到厌倦,所以他有了一个想法,在 Aaron Swartz 协作下,他设计了简单的书写系统,让基于 Web 文档的内容在原始状态下就易于书写和易于阅读。

John Gruber
Aaron Swartz

Markdown 语法设计灵感来自纯文本电子邮件格式,首要目标是使其尽可能可读。设计思想是,弱化格式化文档原来的样式,以纯文本的格式发布,让它看起来不像被标签标记了,或者不是格式说明。一句话:把标记和内容融合在一起。

来感受一下 Markdown 语法有多简单。左边是用 Markdown 书写的纯文本,右边是渲染成 HTML 在网页上显示的效果。用 # 符号表示 <h1> ,两个星号包裹的内容表示加粗。几个符号就可以迅速把富文本文档格式化成漂亮的网页。

image-20210131102141418

Markdown 和 HTML 有什么关系

Markdown 的设计初衷是为了用简单的 纯文本 写作,然后转化成有效的 HTML,它针对网页写作的场景。所以,Markdown 最开始发布时包含了两样东西,1:纯文本格式的语法。2:一个工具软件,可以把纯文本转化成 HTML。有语法,有转换器,把整个工作流程都解决了。

Markdown 和富文本编辑器有什么区别

最大的区别在于 写作流程

富文本编辑器包括 Word、常见网页编辑器等。使用它们编辑时,几分钟或者几秒钟就得停下键盘输入,思考如何调整样式,然后拿起鼠标小心翼翼地调整标题、颜色、字号、字体等,再返回继续打字。其实在这切换的过程中,注意力会集中在思考如何调整上,这样会中断写作思路,非常糟糕的体验。

Markdown 可以让你手指不离开键盘,就可完成文字输入和样式调整。Markdown 设计哲学和 Linux 下的 vim 是一样的,让你专注于内容本身,可以做到 一把键盘走天下。看似非常简单的事情,但这改变了写作流,一旦习惯 Markdown 之后,再也回不去复杂的 Word 了。有时候少就是好,当事情复杂到一定程度时,就要开始做减法了。

Markdown 文档可以借助工具轻松转换到 Word、PDF 等格式。如果你想设计非常复杂的排版,Markdown 就不太适合。但是,大部分的写作是不需要复杂排版的。

为什么使用 Markdown

也许你还在疑惑为什么这么多人选择 Markdown 写作,因为它有着非常多的优势。

  • 应用场景广泛 人们可以用它来创建网站、文档、笔记、书记、演示文档、电子邮件和技术文档。Markdown 对技术文档支持特别好,目前大部分技术文档都是用 Markdown 写的。
  • 非常轻 因为是纯文本格式,所以几乎所有的应用程度都能打开。如果你不喜欢当前的编辑器,只要把文档导出,再导入到另一个编辑器即可。如果用 Word,对不起,没得选。
  • 跨平台 你可以在任何平台上创建 Markdown 格式文档,Windows 、MacOS、Linux、iOS、Android 等等。
  • 长期支持 如果你现在用的编辑器突然间没了,也可以换一个编辑器继续写。其他格式一般会和特定的软件绑定,比如 .docx 和 Word 绑定。如果考虑到文档要长期保存时,就要考虑到这个问题。
  • 软件、平台多 目前有很多桌面软件和在线平台支持 Markdown 语法,几乎无处不在。最好的例子是 Github 使用 Markdown 作为默认写作语言。

实践是检验真理的唯一标准。开始学习时最好使用所见即所得编辑器,实时的反馈会让你更有成就感。因为有在线平台,不需要下载软件安装,这里推荐一个高颜值的在线编辑器:Marxico

打开它可以看到一个示例,左边是原始 Markdown,右边是渲染成 HTML 的效果,可以在左边随便修改,右边马上看到效果。

image-20210131134519811

在学习时可以一直使用在线编辑器,不用担心对电脑有任何影响,只要浏览器一关,世界就安静了。等熟悉 Markdown 语法后,就可以在电脑安装桌面软件或者在手机上安装 APP。

如何工作

内容来自 Markdown Guide

Marxico 让 Markdown 写作变得简单,因为它隐藏了背后的原理,但值得探讨一下它的工作原理。

当你用 Markdown 写作时,文本存储在扩展名为 .md.markdown 的纯文本文件中。然后呢?是如何将 Markdown 格式的文件转换成 HTML 或者可打印文档 ?

简而言之,你需要一个能够处理 Markdown 文件的 应用程序。有很多可用的应用程序,小到简单的脚本,大到 Word 级别的桌面软件。尽管他们在视觉上存在差异,但所有的应用程序都做相同的事情。比如 Marxico,它将 Markdown 格式的文转换成 HTML,然后显示在 Web 浏览器中。

Markdown 应用程序使用 Markdown 处理器(通常也成为解析器或实现)输入 Markdown 格式的文本,然后输出成 HTML 格式。此时,文档可在 Web 浏览器中查看,也可以结合样式表进行打印。下图展示了整个过程:

Markdown 应用程序和处理器是两个独立的组件。为了简单起见,下图将他们组合成了一个元素(“Markdown APP”)。

markdown_process

总而言之,处理过程分为四步:

  1. 使用文本编辑器或 Markdown 应用创建一个 Markdown 文件。文件扩展名应为 .md.markdown
  2. 在 Markdown 应用打开 Markdown 文件。
  3. 使用 Markdown 应用将 Markdown 文件转换成 HTML 文档。
  4. 在 Web 浏览器中查看 HTML 文档或者使用 Markdown 应用将它转换成其他文件格式,如 PDF。

从用户的角度看,根据使用的应用不同,流程会有所不同。比如,Marxico 将步骤 1 至 3 合并到一个界面,你所要做的就是在左边面板输入,它会自动渲染并显示在右边面板。如果你使用其他工具,比如带有静态网站生成器的文本编辑器,你会发现整个过程将更加明显。 正是有了 Markdown 应用的帮助,我们才能高效地写作。

标准化

Markdown 从 2004 发布,包括 Markdown 语法和 一个用来转换 Markdown 语法的脚本 Markdown.pl,很快成为典型的转换为 HTML 的非正式规范和参考实现。起初 Markdown 主要用于 Web 写作,逐渐被应用到更多领域,如写书、文档、演示文稿等。但是,它本身的语法比较简单,功能有限,不能满足所有的需求和场景,人们在基础语法上扩展了其他的实现。

  • Pandoc's Markdown 2006 年 John MacFarlane 发布 。扩展和修正了一些 Markdown 语法,可以用 Pandoc 转化 Markdown 格式。
  • MultiMarkdown 2011 年 Fletcher T.Penney 发布,简称 MMD。同样的,它不仅扩展了 Markdown 基础语法,还提供了一个新的工具转换 Markdown,可以转换成更丰富的格式,包括 HTML、PDF、OPML、RTF、Microsoft Word 等等。
  • Markdown Extra 2013 年 Michel Fortin 发布。最初用 PHP 实现了 Markdown。增加了许多新语法,比如:HTML 块内的 markdown 标记、围栏代码块、表格、定义清单、注脚、缩写等,越来越接近现在的语法。

正是如此多的扩展实现,有一些行为已经偏离了最原始的 Markdown 语法实现。John Grube 在最开始没有很明确规定 Markdown 规范,他说:“不同的网站和人们有不同的需求,没有一种语法可以让所有人满意。” 后来人们发现 Markdown.pl 脚本存在 Bug,某些情况下得到不正确的结果,而且 Markdown.pl 也年久失修,最晚更新时与 2004.12.17。同时,不同的扩展实现语法不尽相同,你会发现,在一个平台上的 Markdown 正常工作,到了另一个平台呈现的方式又不同,而且这种 “语法错误” 还不能算错误,所以这种差异通常不会马上被发现。另外,Markdown 没有标准的测试套件,MDTest 也许是最好的。唯一解决 Markdown 歧义和不一致的方法是用 Babelmark,这个工具可以输出 20+ 个不同 Markdown 实现的结果,用来比较哪些实现是正确的。

于是,就有人站出来开始规范化 Markdown。他们是一群 Markdown 的粉丝,有的是 Markdown 开发者、解析器作者、扩展作者。他们有着资深技术背景,完全有能力主导 Markdown 规范化。

从 2012 年开始,他们提出了一个标准的、明确的 Markdown 语法规范,以及一套全面的测试,用来验证 Markdown 实现是否规范。他们觉得这是必要的,甚至必不可少,也是为了 Markdown 的未来发展。但是由于 John Grube 极力反对标准化,所以不能使用 Markdown 这个名字,改为了 CommonMark ,其实也挺好听的,Logo 也好看。

image-20210131155745903

CommonMark 奠定了 Markdown 标准化基础。历史性转折是在 2016 年 3 月,发布了 RFC 7763RFC 7764。RFC 7763 从原始变体引入了 MIME 类型 text/markdown。RFC 7764 讨论并注册了 MultiMarkdown、GitHub Flavored Markdown (GFM)、Pandoc、CommonMark 及 Markdown 等变体。能收录进 RFC,正式承认了 Markdown 为互联网标准。

到了 2017 年,GitHub 发布了基于 CommonMark 的 GitHub Flavored Markdown(GFM) 的正式规范,并且使用 Markdown 作为默认的格式化写作语言。GFM 除了表格、删除线、自动链接和任务列表被 GitHub 规范作为扩展添加之外,它遵循 CommonMark 规范。这个规范更加肯定了 Markdown 的作用,推动了 Markdown 的发展,是目前最流行的 Markdown 标准。因为 Github 用户庞大,大多数平台和软件都向他看齐,纷纷使用 GFM。只要是程序员,一定会用 Github,只要用 Github,就逃不开 Markdown,是时候好好学习 Markdown 了。

Markdown toolbar

Markdown 使用场景

Markdown 可以快速且容易地记笔记、创建网站内容、创建可打印文档等。你不需要花太多时间学习 Markdown 语法,一旦你知道如何使用它,你可以到处使用它。大多是人是使用 Markdown 创建网站内容,但是 Markdown 适用于任何格式化的内容。典型的应用场景包括:网站内容、技术文档、记笔记、幻灯片、在线协作、写博客、写公众号文章、Book 等。后面会详细介绍每一种场景,可以在学习了基本语法后再详细了解。

Markdown Flavor

Markdown 令人很困惑的一点是,实际上每个 Markdown 应用都实现了有点差别的 Markdown 版本(因为 Markdown 一直没有官方标准),这些不同的 Markdown 风格叫做 Flavor。直到 CommanMark 和 GFM 发布后,大部分应用都是以这两个规范为标准。所以学习前要弄清楚 Markdown 应用所支持的 Flavor,一般通过查看应用的帮助文档或者使用手册可以知道。比如通过 Typora 的说明文档就知道它支持 GFM。

image-20210201150741494

安装 VS Code

强烈推荐使用 VS Code ( Visual Studio Code ) 学习 Markdown 语法。众所周知,来自微软的 VS Code 是宇宙最强 IDE,完全免费,支持 Windows、macOS 和 Linux,所以在哪个系统使用体验都一样;VS Code 对 Markdown 的支持非常好。初学语法需要所见即所得的功能,这样输入的内容可以马上得到反馈,不仅容易记得住,还让你成就感满满,达到事半功倍的学习效果。

下载并安装 VSCode

默认主题是黑色的,非常炫酷,有没有?VS Code 天生支持 Markdown,不需要安装任何插件。左右分屏的模式,左边是 Markdown 纯文本,右边是渲染成 HTML 的效果。如果没有右边的预览,可以点击 切换视图 按钮。

image-20210201153936825

接下来,让我们开始学习基本语法和扩展语法吧!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 注明:本文转自千里码-技能树之Markdown, 千里码是一个比较好的有新意的题目网站。 Markdown:让书写...
    yche阅读 841评论 6 15
  • Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式...
    顽童大了已没那么笨阅读 1,085评论 0 3
  • 一、为什么设计Markdown语法 Aaron Swartz 和 John Gruber联合发明。(Markdow...
    善意的闲人阅读 1,103评论 0 1
  • 作为一个开源人,如果你不会使用Markdown语法,那你就OUT了!Markdown 是 2004 年由 John...
    哲妹M阅读 484评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,523评论 16 22