工具即思维,如果说有什么东西对我的生活产生了重大影响的话,Markdown 一定是其中之一。万丈高楼平地起,我相信这篇文章将是你走入 Markdown 生态的敲门砖。
markdown
,顾名思义,跟写作有关。事实上,它是一种轻量的写作方案,在有效提升写作体验的同时也能大幅优化写作工具生态 ? 我强烈推荐你上手使用 Markdown,就像我将强烈推荐你部署自己的 IPFS。
许多不明就里的人会将 Markdown 视为一种编辑器,就像记事本和 Word 一样,这种认识并不准确。Markdown
和 Markdown 编辑器
是两个完全不同的概念,前者的本质的是一种 标记语法
,后者是为这种标记语法提供特殊支持的编辑器。
Markdown 文本长这个样子:
# Markdown 为何物
> 工具即思维。
`markdown`,顾名思义,跟写作有关。事实上,它是一种**轻量的写作方案**,在有效提升写作体验的同时也能大幅优化写作工具生态 ? 我强烈推荐你上手使用 Markdown,就像我将强烈推荐你部署自己的 IPFS。
以上内容跟文章开头完全对应,二者相比较,能得到非常直观的感受:
正是这些额外的符号,让文章开头的文本具备了样式,换句话说,我们通过在文本中插入符号来让它拥有样式。
这种通过特殊标记向文本中添加额外信息的方式叫做 标记语法
,如果你接触过 Html
的话,你会对这个概念有明确的理解,Html
是一种典型的标记语言,它被标准化并用于创建网页。文章开头的内容跟上文展示的 Markdown 对应的 Html 长下面这个样子:
<h1>
Markdown 为何物
</h1>
<blockquote>
工具即思维。
</blockquote>
<p>
<code>mark down</code>,顾名思义,跟写作有关。事实上,它为我们提供了一种<strong>轻量的写作方案</strong>,有效提升我们的写作体验的同时亦能大幅优化写作生态。?
</p>
Html
一般使用成对的标签来标记内容,前后标签分别使用 < >
和 </ >
来包裹,就像这样:<标签名></标签名>
,被标记的内容写在标签对的内部,就像这样:<标签名>这里是被标记的内容</标签名>
,标签对及其内容称为一个 元素
,元素可以包含其它元素。Html 标签之间互不交叉、层层嵌套,我们便可以将任意内容组织成树状结构。同时,Html 语言的标签是语义化的,以上面的内容为例,标签名 h1
表示一级标题、 blockquote
表示块引用、p
表示段落、code
表示代码字段、strong
(或 b
)表示加粗,对应的含义非常明确,分别是 header 1、quote、paragraph、code、strong(bold),显然,使用 Html 组织的内容具有完全的可读性。当然, Html 规范中的标签远不止这些,借助丰富多样的标签,我们得以创建任何复杂程度的网页结构。以 Html 的结构化能力为基础,借助 CSS
的样式化能力和 Javascript
的交互能力,页面具有无限的可能性,最终构建起我们 ? 上网冲浪看到的花花世界。
纯文本:区别于富文本,指不含任何额外样式表现的文本。
Markdown 的诞生正如同这花花世界的沧海一粟。它被设计的目的是为网络作者们(指博客作者们)提供一种易于书写、易于阅读、易于发布的工具。网页作为最终的发布形式,其标记语言 Html 自然就作为了 Markdown 的基础。John Gruber 提取 Html 标签中经常用于写文章的部分,对它们的语法进行了简化,也就是将 语义化的尖括号包围的成对标签
简化为 特殊符号或特殊符号组合
,并实现了对应的 Markdown → Html
的转换器,这便是最初的 Markdown。还是以上面 Markdown 和 Html 的例子做比,不难发现:
#
+ 空格
+ 内容
,替代 Html 中的 <h1>内容</h1>
;>
+ 空格
+ 内容
,替代 Html 中的 <blockquote>内容<\blockquote>
;`
,替代 Html 中的 <code></code>
;**
,替代 Html 中的 <strong></strong>
;在保留一定象形理解性的基础上,Markdown 大大简化了 Html 的标记方式,书写起来更加自然流畅。并且,它对于初学者极为友好,只需要简单熟悉一下标记规则即可上手写作,几乎不需要任何学习基础,也不需要任何高级的工具,毕竟一个 Markdown 文件(一般以 md
为后缀)也只是添加了特殊符号的纯文本而已,一切可以用来编辑文本的软件都可以用来书写它。
需要说明的是,我们上面展示的 Markdown 标记规则,并不完全是 John Gruber 最初设计的规则。Markdown 的成功远远超出他的预期,15 年间,大家承接他的思路,优化并拓展了 Markdown 标记语法,制定了相应的规范 → CommonMark,开发者们基于规范做了各种各样的实现,或修改标记符号、或定制新的功能,然而其本质未变,核心的写作功能亦大同小异, Markdown 早就变得无处不在。如今最流行的 Markdown 语法规范,应该是基于 CommonMark 的 GFM (Github Flavored Markdown)。
Markdown 允许我们使用少量特殊的标记符号将额外的结构信息、样式信息写入到纯文本中,并在保持易于书写的特性的同时保证它的可读性。
Markdown 在发布之后,读者接收到的是去除特殊符号之后、按照标记添加了特定样式的内容。在这个过程中起作用的是 Markdown 解析器
和 CSS
,Markdown 源自 Html,大多数时候也将基于 Html 对外发布, Markdown 解析器可以将 Markdown 文本转换为 Html 文本,转换的过程实际上就是标记符号的替换。解析器按照一定的转换规则,寻找 Markdown 文本中的标记并将其替换为 Html 标签,转换完成之后的内容就可以写入到网页中发布啦。
事实上我们所说的 Markdown 包括两部分,一部分是其标记规范,另外一部分就是规范对应的解析器,来自 Html 也归于 Html 才称得上是完全的 Markdown,这也是其大火的原因之一。
Markdown 解析器转换出的 Html 是裸 Html ,只具有标签的默认样式,其简单程度甚至难以达到绝大多数人的审美底线,CSS
(Cascading Style Sheets,层叠样式表)的作用就是为结构化文档定义美美哒、酷酷哒、或者炫炫哒或者其它什么哒的样式。而 Html 就是一种结构化文档,它通过互不交叉、层层嵌套的标签将页面内容组织成树状结构,支持我们以任意粒度定位页面的任何元素,然后通过 CSS 为其定义样式。CSS 也是强的一P,它几乎可以定义一切你能想到的样式内容……思来想去,最能够让你有直观感受的描述是过往你所见过的没有见过的网页上大大小小的、花花绿绿的、黑黑白白的、蹦蹦跳跳的、闪闪烁烁的、乱起八糟的、花里胡哨的内容,除了文本含义以外(是的!字体也可以定义!)都是通过 CSS 实现的(严谨的地说是都可以通过 CSS 实现)。
常用的通过 CSS 为 Html 添加样式的方式分为三种,一种是将样式直接添加到 Html 标签上,比如:
<h1 style="color: red;"></h1>
称为内联样式;一种是将页面中会用到的样式添加到页面的统一位置,比如添加到样式标签里面:
<style>
h1{
color:red;
}
</style>
称为内部样式表;另外一种是将定义的 CSS 样式统一写在另外一个单独的文件里,这个文件就像下面这样:
h1 {
color: red;
}
然后在 Html 中引入这个文件即可,像这样:
<link rel="stylesheet" type="text/css" href="./path/to/css.css"/>
这种方式称为外部样式表。
基于样式表我们可以实现内容与样式分离,这是什么概念呢,以外部样式表为例,请看:
<html>
<head>
<title>这是一个网页的大致结构</title>
<link rel="stylesheet" type="text/css" href="./path/to/css.css" />
</head>
<body>
<!-- Markdown 转换之后的 Html 放在这里 -->
</body>
</html>
我们写的 Markdown 文本,最终展现给别人的丰富多彩的样子,是基于 Html + CSS 的,通过这种方案,我们可以单独定义自己的样式,并将其体现在自己的所有 Markdown 转换结果中,这也意味着你可以同时修改所有的样式,也可以定义多套样式换着用,随你怎么样(可以理解为“皮肤”)。谁来完成这样的工作呢,把 Markdown 转换为 Html ,然后嵌入到特定的 Html 页面结构中的特定位置,并引入指定的样式,最后将结果导出。
编辑器是普及 Markdown 的最大功臣,它大大降低了 Markdown 的进阶门槛,让以上描述的一切都变得无比美好。
尽管 Markdown 文本具有良好的可读性,但对于大多数人来说,并不是很容易能够接收纯文本写作的方式,我们更希望能够随时看到样式化的结果。Markdown 编辑器的主要考虑即在于此,让写作体验更上一层楼。编辑器内置 Markdown 解析器,支持 Markdown → Html 的即时转换,主界面一般分为两栏,一栏是写作区域,用于书写 Markdown 文本,另外一栏是预览区域,即时展示样式化的结果,其背后的基本运行逻辑便是:Markdown → Html → 写入特定页面结构 → 应用特定样式 → 输出到预览区域
,同时,在编辑方面,大多数编辑器还支持以下特性:
**
自动补全为 ****
,并将光标定位到输入位置;除了强大的辅助编辑功能以外,大多数 Markdown 编辑器支持自定义样式,你可以粘贴自己的样式代码片段以覆盖编辑器的默认样式表,或者上传一份你自己的完整样式文件,编辑器会完全按照你的样式进行呈现。
对于单纯的 Markdown 编辑器来说,以上这些支持都是建立在不对你的原始 md
文件做任何修改的前提下进行的,你的原始文件依然是纯净的,这也意味着,如果你将你的 Markdown 文件分享给其他人,他们看到的样式是基于他们自己的样式配置的。如果你想带着样式将内容发给别人,你可以试一下编辑器的导出选项,大多数编辑器都支持将 Markdown 导出为带样式的 Html 和不带样式的 Html、PDF、图片等……如果你有更多的导出需求,你可以通过一些简单的技术手段,实现 Markdown 和百余种主流文档格式的互转。
也存在不单纯的 Markdown 编辑器,比如 Boostnote、Ulysses,不过就本质来讲它们的定位是一款笔记软件而不是简单的文档编辑器,Markdown 只是它们全力支持、大力推崇的一种文档格式而已,使用这些软件并不意味着你手中没有 md
原文件,这些软件的导出选项中都支持导出 md
文件。
越来越多的应用开始支持 Markdown,比如我们熟知的印象笔记,正在大力将对 Markdown 的支持整合到其产品中去,包括国内的一些笔记软件,为知笔记、有道云笔记……对于这些软件来说,Markdown 既可以提升用户的写作体验,又可以降低文档的管理成本,何乐而不为。
当前在线文档的发展也愈发火热,比如WPS、石墨文档、腾讯文档等,这些应用都或多或少引入了 Markdown 的特性进去,可以预测,对 Markdown 的支持也会只增不减。如果你对技术领域关注比较多的话,Markdown 已经是自建博客、Wiki 系统、文档管理系统等的首选支持选项。
Markdown 的发展现状、Markdown 本地编辑器、Markdown 在线编辑器、Markdown 文档管理生态都完全能够独立成章,这篇文章以介绍 Markdown 为主要目的,故点到为之,不做过多拓展。
从 Markdown 的客观特性出发,结合我个人的使用感受,给出以下五点使用 Markdown 的理由:
我是个工具狂,沉迷于用最低的成本为自己打造最优质的工作、创作、生活体验,我打算将所有的探索和思考沉淀下来,顺便也分享给有缘看到、有空阅读、用心思考的你 ?