Markdown 简介 | About Markdown

Markdown 是一种带标记的纯文本格式。你可以在纯文本中打上一些符号来表示文本的排版样式,甚至插入外链的图片。相比没有多少排版格式可言的纯文本来说它提供了基础的常用排版样式,帮助你凸显文章的层次结构和关键信息。相比于功能强大的 Word 来说,它结构简单易于上手。虽然它不可能全方位替代 Word 之类的富文本编辑器或者专业排版工具,但是用来写写笔记、邮件或者博客文章还是挺好用的。

关于 Markdown 和 Word 的额外说明

对于平常不太接触编程的人来说,有必要进一步解释一下 Markdown 和 Word 的区别。计算机中的任何信息都是编码成二进制数字的形式进行保存的。一般来说一个纯文本文档(Windows 记事本所生成的那种后缀为 .txt 的文件就是纯文本文档)仅仅基于字符编码规则进行编码,只能保存文本的文字组成而无法保存字体、样式、颜色等排版信息。

要保存这些排版样式信息就需要额外的约定和额外的空间。所以 Word 一般生成的文件不会是后缀为 .txt 的纯文本文件而是后缀为 .docx 的专门的富文本(就是带有排版信息和非文字信息的文本)格式。 .docx 文件会保存 .txt 文件中那样的纯文本字符编码,但也会保存额外的表示各种排版样式的编码。

Markdown 的思路其实和 Word 差不多,也是用额外约定的编码保存一些排版样式信息。但是不同之处在于, Word 中保存排版样式信息的这些编码是不会给用户看到的,由 Word 自动处理,用户看到的只是 Word 根据编码渲染后的状态。而 Markdown 的涉及思路是,即便用户没有合适的渲染工具,也能以纯文本形式打开 Markdown 文档并保持文档一定的可读性。这就造成了 Markdown 和 Word 的极大不同。

当你的电脑上没有安装 Word 时,别人发来的 .docx 文档你是没法查看的。即便解压成文本文件,其中的各种复杂样式标记也不适合人来了直接阅读。但一篇 Markdown 文档即便不经过任何渲染,大致也保持一个人能阅读的状态。

因此,其实一些为了追求功能性,导致 Markdown 文本复杂度大大增加的拓展其实是有悖于 Markdown 的设计初衷的。

一般来说 Markdown 文件的后缀名设置为 .md,也有用 .markdown 的。

标准和软件

需要注意的是 Markdown 本身只是一种基于纯文本的文件结构。如果你用记事本之类的仅仅支持最基本纯文本显示的软件打开,它也还是一个纯文本。理论上你需要用一些工具软件把它转换成 HTML 或者 PDF 然后用相应的阅读器打开才能看到格式。不过一些编辑器会内置这些功能,让你能直接预览 Markdown 转换渲染之后的样子(VS Code 就是其中之一)。

对一般的文件格式或者描述性语言来说,规则是抽象的,工具软件是具体的。只要规则相同,工具软件可以随便换。但是 Markdown 的情况却比较复杂。其最初作者没有给出 Markdown 的严谨语法定义,后来热心开发者们创造的各种衍生版和拓展版又层出不穷。导致 Markdown 规则本身就存在混乱。这个软件中写好的 Markdown 到了那个软件中,显示效果可能就不同了。因此摆脱开具体的 Markdown 编辑或浏览工具来谈 Markdown 的语法规则有点空中楼阁的感觉。为此,特意在这里强调本文的 Markdown 主要基于以下规范和软件:

  • CommonMark 一个社区项目,对最初的 Markdown 语法规则进行了整理和规范。
  • GitHub Flavored Markdown Spec 基于 CommonMark 并做了一些语法和功能拓展。由 GitHub 主导并为 GitHub 所支持(托管于 GitHub 的代码仓库中的 Markdown 文件会依据此协议渲染)。
  • Typora 一款商业 Markdown 编辑器,支持非常多的 Markdown 扩展语法和功能,还能自定义渲染样式表。虽然其中一些功能可能是过度设计,但确实包括了不少很好用的功能。另外就是这款软件的编辑方式设计比较独特,可以在渲染后的界面和代码界面中切换(而不是像一般软件那样左右两栏对照)。就算不使用这款软件编辑 Markdown,它官网上的 Markdown 拓展语法和功能介绍也值得参考。
  • Visual Studio Code 微软主导的开源纯文本编辑器,自带基本的 Markdown 支持,可以通过插件支持拓展语法和功能。具体的插件推荐在后文相关段落。

Visual Studio Code 基本功能插件

Visual Studio Code 对 Markdown 的基本支持是通过内建插件的方式实现的。这些内建插件不需要你额外安装,而是集成到编辑器里的。你不能卸载它们,但是可以停用它们。如果把这三个插件都停用掉,那么 VS Code 就完全失去了对 Markdown 的支持,只能像处理普通纯文本那样处理它们。其中最为基础的是以下两个。

语法高亮

插件 Markdown Language Basics 主要提供的是 Markdown 源码的语法高亮功能。其 ID 是:

vscode.markdown

这个插件不能把你在 Markdown 中写的标记符号转换成相应的排版格式。但是可以根据各种标记的语法属性把他们染成不同颜色,方便查看标记的语法结构。

此外据官方文档中介绍这个插件还提供了 Markdown 的 Snippet 功能,就是根据提示自动输入大段格式化代码。但是这个功能的快捷键不知道和什么东西冲突用不出来,而且这么多年也没有修复[^SnippetBug]。不过如果你想用的话还是可以通过 Ctrl+Shift+P 的按键组合呼出 Command Palette 然后键入 Snippets: Insert Snippet 来选择预制的格式化代码段来插入。

渲染预览

Markdown Language Features 这个插件则专门提供 Markdown 的渲染和预览功能。其 ID 是:

vscode.markdown-language-features

当你以 Markdown 模式打开一个文本时右上角有一个预览图标,点一下就能进入左右分栏模式,右边显示渲染预览,左边显示 Markdown 源码。

渲染的样式是通过内置的 CSS 决定的,不过这个插件也提供了一些设置选项可以控制渲染的样式,例如渲染后页面的字体就是独立于 VS Code 的代码字体单独设置的。此外这个插件提供的渲染页面的颜色主题会随着 VS Code 的颜色主题变化。如果你不喜欢这个渲染结果也可以找其他插件来改变渲染样式。

关于这个内置插件, VS Code 的插件页面介绍不多。翻翻源码就不难发现,这个渲染插件其实是调用 markdown-it 实现的。 markdown-it 是基于 CommonMark 标准设计的,但是默认做了一些拓展。例如默认加入了 GitHub Flavored Markdown 的表格和删除线语法。因此这个插件相当于自带了表格和删除线的扩展语法。

写给程序员的一些额外信息

对于一般用户来说,对 Markdown 的编辑和渲染主要在各种面向最终用户的编辑器中进行。但是对于程序员来说,了解一点和代码相关的信息总没有坏处,

现在的 Markdown 编译工具非常多,最初 Markdown 设计者推出的那个 Bug 满满 的版本已经越来越少用了。一般推荐使用 JS 库 markdown-it 来将 Markdown 编译为 HTML (如果觉得这个库提供的语法功能不够,还可以使用各种拓展库来拓展它)。以下是一个调用 markdown-it 编译 Markdown 的代码示例(用 JS 写的):

md=require('markdown-it')()
mytext='# hello\nI\'m**TaiXuan**'
myhtml=md.render(mytext)
console.log(myhtml)

此外,也可以使用命令行工具 Pandoc 来实现 Markdown 对其他文本的转化。以下是一个 shell 命令示例:

pandoc -s mytext.md -o myhtml.html

Typora 在将 Markdown 导出为其他文件格式时是依赖 Pandoc 的。


本文源码采用 MIT 协议开放,托管于: https://github.com/ZhiZe-ZG/ZZToolLibrary

如果觉得本文内容对您有用,希望您能在能力和意愿范围内给我一些资助。我不以此为生,但我也是个普通人。

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

推荐阅读更多精彩内容