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