拯救Bear里的Markdown笔记

有件事一直困扰了我好久:Bear里的笔记在导出为HTML和Markdown时会丢失所有的图片。看看隔壁的Ulyssses,只要选择导出为富文本就会得到一个文件结构完整的zip压缩包,只需解压出来就可以得到可以直接预览的Markdown。这件事情导致我写文章时极力克制使用图片——如果导出到别处后还要再次手动添加图片,那可真是让人头疼。
不过好在这件事情终究是有解决方案的。如果想得到包含所有图片与文本信息的文件,导出.RTF或是.PDF格式就可以解决,所以真正的问题就是:如何转换RTF或PDF变为Markdown?

用Workflow处理Rich Text Format(富文本)

Workflow是可以将富文本转化为Markdown的,所以这件事情乍一看还是很简单的。我们的大致思路是这样:用Sharesheet调出Workflow,首先用Workflow内置的「Make Markdown from Rich Text」动作把富文本转化为Markdown;然后用「Get Images from Input」从富文本里提取图片;最后把Markdown文本文件和图片保存到一个文件夹下,这样这个Markdown打开就可以预览到图片。如果要把它发送给别人,我们只需要保持Markdown和图片的相对位置不变,把它们打个压缩包就可以了。而如果要注意细节的话,我们还会记得要提取这个文件的首行,也就是Bear里显示的标题,去掉Markdown的标题语法「#」,用来作为文件名。此外iCloud和Workflow配合一直有点问题,也许应该选择用Dropbox来暂存文件。

整理错误的链接

一切是不是都很美好?
只有一个问题:如果这样导出的文件,图片仍然加载不出来。
如果仔细观察导出的文件,我们就很容易发现问题了。我们预计图片的代码仍旧是诸如![abcd](abcd.jpg)的样式,然而实际上转换出来却成了:![abcd](file:///abcd.jpg),这大概是由于Workflow在转换的时候引用了在它缓存中的图片地址导致的。既然我们的图片是独立保存的,只需要把Markdown文本中的图片链接替换掉就好了。
替换这件事情,还是交给正则表达式做比较方便。通过正则表达式,我们可以将图片的名称(例如abc.jpg)提取出来并组合成正确的图片地址,然后用它把错误的图片地址换掉,这样总算可以显示图片了。

在这个Workflow中,所有内容最终会被保存在Dropbox/RTF Savior/文件名/这个目录下。这个Workflow存在一个小问题:如果文件中只有一张图片abc.jpg,这张图片不会被保存为/media/abc.jpg,而会变成media.jpg。不过既然只有一张图片了,也许手动处理一下比用Workflow要来得快些。另外,偶尔转换出的Markdown会有格式问题,这是Workflow的锅。如果遇到这种问题,可以再用Bear导出一次Markdown文件来代替转换的Markdown文件——只是相比用Workflow一次性解决问题,这样不够优雅。
你可以点击此处下载这个Workflow。