为什么我要写这篇教程

思考是人类活动的核心之一,而文字则是记录思考的成果最重要的媒介之一。而让绚烂的文学成为实体的工具——笔,也成了人类记忆中不可磨灭的一部分。正如《仲夏夜之梦》中莎士比亚说:

当想象力
使未知事物有了形状
当诗人的笔
让它们成形并给空中的虚无
一处居所
一个名号

Markdown,这个至今没有中文译名的书写工具,作为比特世界的「笔」,自被发明之初就随着博客发展的浪潮传向互联网的每一片大陆,成为新闻民主化进程中的重要工具。不过它的拥趸在为它唱赞歌的同时,更多的人或胆怯于它陌生的使用方式,或不屑于它复杂的标记字符,始终没有领略这一工具的优雅。

感谢开发者的持续耕耘,优秀的 Markdown 工具层出不穷。时至今日,一款 Markdown 工具,已经不再是(也不应该是)少数重度写作者的选择,它的易用和实用,能惠及到每一个对文字输入有需求的用户,让脑子的思绪化为踏实的文字。

在优秀编辑器不断涌现的背景下,中文互联网上却难觅一篇合适的 Markdown 入门文章。多番对比之下发现,目前的教程普遍有两个问题:

  1. 对 Markdown 的本质和对比富文本编辑器(Word)的优势不做说明,只是泛泛而谈(例如「输入效率高」之类的口号)。没有引导读者真正去认识和了解 Markdown,容易让初学者一头雾水地开始尝试,在稍受挫折后质疑使用 Markdown 的意义,从而放弃。
  2. 对 Markdown 的语法只做简单的罗列。诚然,Markdown 的基本语法非常简明,但是站在初学者角度来看,依然十分反直觉1 。再加上 Markdown 的语法在不同工具中各有稍许不同,如果不对基本语法进行有逻辑的说明,使用者深入使用时会觉得越来越复杂。

所以本文的目的也变得十分清晰:

  1. 首先希望不了解 Markdown 的用户真正地理解这个工具的本质和优势,解决「为什么我要用 Markdown」这个元问题
  2. 其次是对 Markdwon 的语法有着有逻辑的了解,以免陷入各个语法版本的混乱之中,这就解决了「怎么使用 Markdown」的问题
  3. 最后就是工具的选择和使用场景的介绍,来帮助你开启使用 Markdown 之路。

尽管 Markdown 作为工具的本身并不复杂,但是其背后的逻辑性,以及十年来的演进所衍生出的各种变体,让这个话题也不能仅靠三言两语来解释,所以我们会分为上下两篇来走完这份《完全入门指南》。在上篇中我们专注于 Markdown 的本身,也探讨它的实质和优势,介绍它的语法。下篇我们去探索十余年来 Markdown 所发展出的世界,了解不同的 Markdown 衍生语法和工具。

初步认识 Markdown

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

如果只输入不带任何格式的文字,无需任何复杂的工具。正是为了赋予文字不同的「外貌」(即格式或者样式),我们才需要文字编辑器。例如输入的文字属于纯文本(即不带格式),而给文字标记上的颜色则属于文字的样式。对于用户来说,Markdown 编辑器和富文本编辑器(例如 Word2 )的作用是一致的:使用者输入纯文字,通过编辑器的处理,使其拥有一份样式,最终得到带格式的文档。

然而这两者的差距,就在处理文字的过程中。富文本编辑器以 Word 为例,输入文字后,选择不同的功能(通常是通过点击某个图标),例如加粗或者调整字体大小,处理后的效果直接显示在屏幕上,与打印出来的效果相同。所以富文本编辑器又叫「所见即所得」编辑器。

而 Markdown 编辑器则不同,输入文字后通常是在文字的前后同时输入一些标记字符,输入后在编辑窗口也不会即时的显示出效果3 。需要手动切换进预览模式查看处理效果。因为这些标记字符的存在,所以 Markdown 本身是一种标记语言。

Markdown 的本质

如果仔细观察这两种编辑器和我们日常使用它们的习惯,就能更深一步理解这两种工具的差异。在编辑文稿时,我们其实不是像小时候在格子纸中写文章那样一气呵成,而是不断的在「输入文字」和「编辑文字」两个状态中切换。富文本编辑器「编辑文字」是通过点击图形化的功能按钮来实现,Markdown 编辑器则是通过标记字符去编辑。所以 Markdown 的核心就在于通过输入字符同时进行排版和内容输入。

当理解了「为什么 Markdown 里有那么多和内容无关的字符」这个问题之后,随之而来的可能就是两个概念的混淆——Markdown 语法和 Markdown 编辑器。我们口中常说的 Markdown 到底指什么呢。其实 Markdown 的创始人 John Gruber 这样定义:

"Markdown" is two things:

(1) a plain text formatting syntax;

(2) a software tool, that converts the plain text formatting to others.

通俗的说,首先Markdown 意味着一套标记语法,这些标记字符就是用来赋予文字不同格式;其次,能将标记字符转换,最终呈现出我们想要的排版效果的软件,就是所谓的 Markdown 编辑器。目前除了那些为了 Markdown 专门开发的编辑器之外,你会看到一些网站(例如简书)或者应用(例如 Airmail 的 Mac 版)注明「支持 Markdown」,这意味着他们的编辑器也可以完成将标记字符转换的过程。

Markdown 的优势

经过前面的铺垫,我相信你已经能体会 Markdown 的特殊之处。而正是这些乍看之下有些怪异的设计,让它形成了自己的独特优势。为了能更直观的体会 Markdown 的不同之处,建议在阅读的同时打开 Cmd 在线编辑器 尝试下面的简单例子(如果只是想试用而不想注册,可以全选,然后删除当前页面的文字)。别担心不理解那些标记字符的含义,在后文中会有相应的解释。

书写过程流畅

如前文中所讲,用富文本编辑器编辑文字时是两个不连续的动作,输入文字时双手放在键盘上,编辑文字则需要视线和手离开输入框和键盘,去寻找和点击功能按钮。很少人使用 Word 时是一次性输入全部文字后,再去一次性的编辑文字格式(然而这却是使用 Word 相对较高效的方式)

而 Markdown 的「书写流畅」就体现在将这两个动作合成一个输入字符的动作。视线一直固定在光标处,手也不需要移动,只是输入时使用不同的字符——文本字符和标记字符——就能同时完成编辑和输入。这种体验类似纸笔时代的书写,使用者全部的注意力都可以集中在将大脑中的语句输出,而不用不停地切换。

例 1:试着在编辑框中输入下面这段字符:

尼采说:
> Was mich nicht umbringt, macht mich **stärker**.

你会发现引用的句子已经被展示成了特殊的样式,而 stärker 这个单词也被加粗了。可以试试或回想下如果在 Word 上要如何实现这个效果。

格式不随编辑器而改变,导出与分享方便

如果你有足够多使用 Word 的经历,一定会体验过「同一份 Word 文档,在不同地方打开就变得不同」这样的魔幻现实主义色彩的经历。不同版本、不同平台之间的 Word 的文档由于软件工程方面的原因,一直不能保证「在任何地方打开都显示同样的效果」,更别说 WPS 这类第三方的软件。这让通过 Word 格式来分享文档显得不够保险。

而 Markdown 则完全规避了硬件、编辑器和平台差异带来的问题。由于所有编辑器是基于一套 Markdown 语法来编写转换流程,就能保证在任何地方,打开来都是同样的格式。更安心的是,由于 Markdown 格式保持的文件本质上仍是一份纯文本,就能保证目前任何平台都有工具可以打开它,而不用担心对方是 Mac, 会不会打不开 Word 的场景。所以以 Markdown 格式来分享文档,远比富文本格式省心。

前文我们说过,Markdown 编辑器其实是负责将 Markdown 语法标记符转换成其他格式,这暗示了 Markdown 格式的导出也十分方便,因为这个转换的目标是可以随时变换的。以 MarkEditor 为例,除了常见的 PDF 、HTML 和富文本格式(可以直接保持格式粘贴到 Word 中),还可以复制为微信公众号格式。

书写错误易发现

任何程度的使用者,在这两类工具的使用过程中都会出现使用错误4 ,这是不可避免的。然而 Word 的问题就在于,虽然所见即所得的界面让它可以即时的发现问题,但是由于它将编辑的过程交给了图形化的功能按键,出现问题时就无法回溯问题所在之处。例如选中一个单词设为粗体后,接下来输入的文字没有变回默认的字重这类错误。其次由于它的功能复杂程度很高,使用者可能没有正确的理解功能的使用场景,而只是做到了看上去排好了。例如常见的用空格而非分页符来分页,或者用空格来对齐,随后产生的排版问题,也很难直接在编辑界面中发现。

而 Markdown 由于是使用标记字符来控制排版,所以你在预览时发现的错误都可以直接在文稿中去查看,到底是标记字符输入错了,还是漏掉了字符。很多时候我们不会意识到这也是一个优势,但是在长期的使用中,就会体会到能快速发现问题和解决问题所给人带来的愉悦。

例 2:试着在编辑框中输入下面这段字符:

尼采说:
> Was mich **nicht umbringt, macht mich **stärker**.

还是第一个例子中的那句话,但是这次我想把「nicht」和「stärker」这两个词都加粗,加粗的标记字符是文字前后加上**,但是这时发现加粗的文字是错误的,通过看查看文稿你会很容易发现「nicht」这个词的后面忘了加上标记字符。

当然 Markdown 还有其他一些优势,例如可选的工具多样之类的,但是我认为这都不是它所具有的决定性的优势。上述三点都和 Markdown 的本质——标记语言——有关,这也是 Markdown 和富文本编辑的本质差异,也是富文本编辑器无论如何改进都不可能跨越的鸿沟。

了解基本 Markdown 语法

在对 Markdown 有了初步的认识后,我们可以真正地去了解这套略显「神秘」的标记语法。说它神秘只是因为对完全不了解编程语言的人来说,通过字符来实现功能仍显得不直观和缺乏逻辑。换句话说,作为初学者,真的只能去死记硬背这套语法吗?看似杂乱琐碎的标记字符之间有没有什么逻辑呢?

其实想到 Markdown 和其他富文本编辑器一样,都是用来编辑文字的功能,就不会有太多的恐惧,Markdown 语法只是将我们在富文本编辑器中常用的功能,换一种方式呈现出来了而已。下面我们就以来源于 John Gruber 最早定义的一套基本语法 为例,来了解 Markdown 主要的三大类标记字符。

这里提醒一下,下面不会罗列出所有的标记字符,因为看一遍并不会帮你记住这些标记字符。你可以在 这里 查看完整的文档。下面主要是对看似毫无逻辑的语法进行梳理,希望帮你有序的理解。

第一类:对文字样式的编辑

编辑器最基本的功能,就是对文字本身加以处理。例如对文字加粗,在Markdown 中通过** **来实现。其实在 Word 中就对应工具栏中的「字体」选项,同类的标记字符还有 * * 来实现斜体。如果你在编辑器中写成

例 3:

**演示粗体**
*演示斜体*

最终会显示为:

演示 
演示斜体

可以看出来,通过这些字符就改变了文字本身的属性。

第二类:对段落的编辑

相较于对「字」的编辑,更高一层的就是对「段落」的编辑,对应在 Word 中其实也是工具栏的「段落」选项。和第一类字符稍有不同,这些字符会把一些段落变成特殊格式的段落。例如 + 实现列表,# 实现标题效果,> 将一段文字变为引用,或者简单不加任何字符,但是在段落前缩进,就会显示出代码块。

注意:这些标记字符和文字之间有一个空格,且都为英语的符号。

例 4:

+ 演示列表
    + 列表还可以有层级
    
> 这是引用文字的效果

最终会显示为:

  • 演示列表
    • 列表还可以有层级

这是引用文字的效果

第三类:插入文章其他元素

正如 Word 中的「插入」选项一样,Markdown 也不仅仅只编辑文字,而是可以将不同的元素放入文档中。最常见的就是通过 []() 来插入链接和 ![]() 来插入图片(可以是本地图片也可以是网络图片)

例 5:

[少数派](https://sspai.com)
![](https://cdn.sspai.com/attachment/thumbnail/2016/11/04/264631b984633898c415a818b181e5205653e_mw_640.jpg)

注意:插入网络链接和图片的书写方式不止上面演示的一种,更全面的介绍可以查看 完整文档

Markdown 全部的标记字符基本就可以被分为这三类,如果你一时间无法记住,完全没有必要担心,需要时去翻看文档,尝试用 Markdown 语法写一两次文章,你就会发现,这个数量级的标记字符很快就可以记住了。

看到这里,你应该已经大致理解了 Markdown 为何物,已经 Markdown 相对于更常见的富文本编辑器的优势。然而,你会发现仅靠着基本的 Markdown 语法,还不能立即用完成一些稍显复杂的任务。在下篇中,我们就会更贴近实际应用,去看看不同的 Markdown 语法是如果拓展了它的功能,以及市面上有哪些工具值得推荐。

继续阅读:Markdown 完全入门(下)


相关阅读: