曾经的我一直使用 Evernote + 马克飞象来记录笔记和文档。不过感觉这两个工具越来越不思进取,几年都没什么变化。所以,一年多以前,我就把所有笔记迁移成本地 Markdown 文件,配合 Dropbox 来实现云端同步。
在新方式下,我用的 Markdown 编辑器是 Markeditor,这个编辑器有很多优点:渲染好看、格式支持多等等。但也有不少缺点,比如技术架构陈旧,性能不佳。不过这些毛病都是次要的,MarkEditor 最大的问题是:没有全文检索能力。
之前使用 Evernote 时,它的文档搜索功能很强大。而相比之下, Markeditor 的搜索功能只能充当个 grep 命令行工具用:

Markeditor 尴尬的搜索功能
随着本地文档越来越多,我对全文检索的需求也越来越强。在第 N 次无法快速找到我要的文档后,我准备自己用 Python + jieba 实现一个支持中文分词的本地文档检索工具。
不过,在动手前,我突然想到: macOS 自带的 Spotlight 不是支持全文检索吗?为什么不直接用 Spotlight 来检索 Markdown 文档呢?
调整 Spotlight 来检索 Markdown 文档
Spotlight 是 macOS 自带的搜索工具,提供搜索和快速跳转功能。但在默认配置下,Spotlight 不会索引以 .md 后缀名结束的 Markdown 文件。不过通过一些配置,我们可以改变这点:
- 下载这份 Spotlight 使用的 importer 文件 文件来源在文章末尾
- 解压后放置到
~/Library/Spotlight/
目录 - 执行
mdimport -r ~/Library/Spotlight/Markdown.mdimporter
来让 Spotlight 手动加载 importer 文件
因为 Spotlight 并不会实时更新索引,所以你需要触发强制更新:
- 打开
System Preferences
->Spotlight
- 点击
Privacy
Tab 页面 - 将你的文档所在目录添加到列表中,随后删除
之后 Spotlight 便会重建索引。等一会后,你就可以用 Spotlight 搜到你的 Markdown 文件了。
限制目录进行全文检索
Spotlight 默认会搜索所有目录的所有文档,如果你只想搜索某个特定的文件夹,可以使用 Spotlight 的命令行工具:mdfind
$ mdfind "django postgresql ORM" -onlyin ~/Dropbox/Documents/MDDocuments
~/Dropbox/Documents/MDDocuments/技术笔记/数据库/PostgreSQL Sharding 方案研究.md
如果你是 Alfred 用户,那你可以基于这个命令做一个 Workflow,专门用来检索你的 Markdown 目录,就像这样:

我配置的 Alfred Workflow
配置完这些后,终于可以安逸的安逸的快速搜索文档了。感谢 Spotlight,让我又少造了一个轮子。(擦汗)
[1] Fixing Spotlight indexing of Markdown content - BrettTerpstra.com
😊 如果你喜欢这篇文章,也欢迎了解我的书: 《Python 工匠:案例、技巧与工程实践》 。它专注于编程基础素养与 Python 高级技巧的结合,是一本广受好评、适合许多人的 Python 进阶书。