在 Markdown 中设置链接由新窗口打开

尽管我对 Markdown 不是那么感冒,但工作和生活中总是难免会使用到一些,比如在向某些开源项目发 PR 的时候。于是对 Markdown 的一些小技巧也有所了解。

Markdown 中的链接语法是这样的:[文本](链接)。它相当于 HTML 中的

但众所周知,HTML 的 a 标签有一个实用的属性 target,当它的值为“_blank”的时候,浏览器会默认为这个链接打开一个新窗口,而不是在当前页面转向新页面。而 Markdown 中没有这个“_blank”选项,于是所有链接都只能在当前页面打开,有些情况会非常不方便。

在多数 Markdown 解释器中(如 GitHub Flavored Markdown),这个情况无解。如果一个 Markdown 解释器同时支持 HTML 语法,则这种情况可以通过直接写 HTML 解决。

于是我又多了一个不喜欢 Markdown 的理由。

又见 Markdown

在 Jetpack 中又看到了 Markdown 的设置,看来这东西还真的很流行,连千年不改编辑器的 WordPress 都要兼容它。不过我还是选择不使用 Markdown。

先说一下什么是 Markdown:它是一种标记语言,用于给纯文本加上一些格式,同时又不影响源广本的阅读。比如下面这段使用 Markdown 的广本(摘自 Swift 中文文档):

# 基础部分
-----------------

Swift 是一门进行 iOS 和 OS X 应用开发的新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。

## 常量和变量

常量和变量把一个名字(比如`maximumNumberOfLoginAttempts`或者`welcomeMessage`)和一个指定类型的值(比如数字`10`或者字符串`"Hello"`)关联起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。

这段文本,即使它包含了各种奇怪的符号,但不影响阅读,大家都能从中得到它大概的意思。而 Markdown 牛 X 的一点是,这段文本可以被翻译成更漂亮的格式:

基础部分

Swift 是一门进行 iOS 和 OS X 应用开发的新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。

常量和变量

常量和变量把一个名字(比如maximumNumberOfLoginAttempts或者welcomeMessage)和一个指定类型的值(比如数字10或者字符串"Hello")关联起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。

从中不难发现,在 Markdown中,“#”表示标题,“##”表示副标题,“`”表示代码格式等。不仅这些,Markdown 支持几乎所有的常见文档格式,包括超链接、图片等。对于不熟悉 HTML 但是想写博客的人来说,上手快,不需要深入了解 HTML 的知识就可以编写优美的文章。

但是,Markdown 上手方便,用久了会出现很多问题。比如上述的“#”表示标题,换句话说,只要某一行的第一个字符是“#”,这一行一定会被翻译成标题,那如果一定要显示一个“#”怎么办?Google 了之后你可能会找到,用“\”字符可以转义,也就是说“\#”会显示出来“#”。那好,如果要显示“\#”怎么办?

你也许会说,上面只是一个特例,在真正的写作过程中,很少碰到。那么我们再看一个例子:Markdown 中图片的标记是“![](<图片地址>)”,看上去很简单,于是你就在文章中插入了一张图片,预览,Ooops,图片太大了。你只想显示 200*200 的图片,但是原图有 400*400,这该怎么办?于是你又 Google 了一下,这下可好,有些贴子说,你可以在括号里加上“ =200x200”,有些贴子说,你可以说 CSS:{width=200px height=200px},但这些都不是标准的 Markdown,你所使用 Markdown 引擎可能还不支持它们。好吧,还是要学学 HTML……等等,什么是“转义字符”和“CSS”?

最后,虽然不重要但值得一提的是,中英文符号是有差别的,比如“#”和“#”是不一样的,而 Markdown 只识别英文符号。这对于中文写作者来说非常不友好。说它不重要是因为,HTML 也存在同样的问题;值得一提是因为 HTML 中如果写错了,浏览器好歹会有一个警告,而 Markdown 不会。