自 Roam Research 以降,“双向链接”已经成为检验一款笔记工具是否“现代”的试金石。无论是 DEVONthink、Tiddlywiki 等老牌工具,还是 Obsidian、Craft、简悦等新秀,无一不加入这场个人知识管理的淘金热1。
在淘金的浪潮中,多数主打双向链接的工具也开始圈地自萌,各自构筑其铁壁高耸的“知识库”,不同工具之间的贸易往来日渐稀疏,偶尔的跨软件交流反倒成了例外2。如果你在 Roam Research 中做笔记,基本就别指望和本地的 DEVONthink 搞互动;至于 Anki 这类压根不支持双向链接的工具,更是流离失所。
这种隔阂亟需打破。如果为了一个链接功能(后文将解释,任何软件几乎都可以实现双向链接)就被禁锢在一款工具中,无异于作茧自缚。本文将介绍一套基于 Keyboard Maestro 的链接跳转方案,可以在不同工具——甚至包括不支持双向链接的工具——之间实现跳转,将 DEVONthink、Obsidian、nvALT 乃至 Anki 都纳入同一体系。
只要配置得当,你的整个电脑都能够成为一个统一而开放的个人知识库。

请在这里下载 Keyboard Maestro 示例动作,目前包括 Anki、Obsidian 和 FSNote,参照本文思路,你几乎可以添加任何其他软件。
使用方式几例
实际上,多数软件号称的“双向链接”功能,无非是二次发明过的搜索功能,通常由一个可供点击的链接和一个搜索结果列表组成。以个人知识管理界位居要津的 Obsidian 为例,点击其中任意一枚双向链接,就会以该链接为关键词在左侧搜索框中进行检索(你可以直接在这里搜索任何东西,不限于双向链接),而此处呈现的数据和右侧专门双向链接页面并无二致。
也许唯一的区别就是搜索列表中还包括当前的笔记自身,而这无伤大雅。至于另一款成名较早的双向链接工具 nvALT,压根就是把搜索框当成双向链接页面来用,连专门的双向链接页面也不提供,倒也无关紧要。
一旦萌生了“搜索框=双向链接列表”的想法,接下来的自动化开发就势不可挡:只要获得关键词(通常是一条双向链接),并打开搜索界面,然后模拟键鼠进行搜索,就完成了双向链接的工作。任何支持搜索功能的工具(几乎所有工具,包括 Finder),都有可能在 Keyboard Maestro 的加持下强度关山,跨越工具之间的鸿沟。
笔记类:以 nvALT 和 Obsidian 为例
Obsidian 和 nvALT 是一对很好的示范:主力笔记工具和草稿工具,是经典的工具组合。当然 Obsidian 和 Drafts 也是类似的组合,甚至 Roam Research 和 Drafts 也能牵上红线。
这一节要展示的是:在 nvALT 中选中一则案件编号,跳到 Obsidian 中检索相关笔记;或者在 Obsidian 中反向操作。无论从哪里起步,操作方式都如出一辙:
- 右键点击一段链接以便选中它,或者大咧咧地选中一段包含双向链接的文本,总之后续 Keyboard Maestro 会从中提取出链接;
- 按下快捷键
⌃Control-⌥Option-⌘Command-J
以运行 Keyboard Maestro 动作3 - 等待 Keyboard Maestro 打开对应软件的搜索界面并进行检索,然后在此呈现所有的“双向链接”。
在本节例子中,两款笔记工具间的跳转各有用途:从 nvALT 跳到 Obsidian,可以看到包含该案件的各种官方清单和之前做的笔记,从而知道一个案子的地位、并拾起以往的思路,无论写论文还是作咨询都言之有物;而从 Obsidian 跳到 nvALT,则是查看草稿中有无对此案件的新近思考,这些笔记也许不成熟而暂未存入 Obsidian,但同样需要检视。前述只是我自己的用法,诸君可以另做安排,根据后文设计思路一节,也可以将其他笔记工具纳入 Keyboard Maestro 跳转体系。
由于软件本身的运行速度有差异,从 Obsidian 跳到 nvALT 这艘“侦查舰”几乎是一瞬间的事情,而从 nvALT 跳回 Obsidian 这条“战列舰”则耗时稍久,如果 Obsidian 尚未打开,则还需要等待其开启,因此如果笔记库数据巨大(基于个人经验,大概以 1000 条笔记为界)或电脑本身速度较慢,建议在 Keyboard Maestro 中添加一步“Pause”以等待 Obsidian 加载完成。
文件管理类:以 DEVONthink 为例
相比笔记工具,DEVONthink 中的数据就更为丰富,可以收纳 PDF 文件、Doc 文档或者网页存档,等等。从其他工具跳到 DEVONthink 的方法和前一节一样,仍然是选中链接、运行动作并等待检索。
DEVONthink 本身其实也有个双向链接列表,不过更原始的搜索框往往带来惊喜、收录了 PDF 文档等笔记以外的文件,比双向链接更适合兜底检索、避免漏检。原因在于,DEVONthink 右侧面板中显示的链接需要基于严格的链接语法(包括 Markdown 链接 []()
和双向链接 [[]]
),换言之,其双向链接界面显示的通常只是用户主动写下的笔记;如果某篇论文或新闻提及了当前检索的案例,则这些文章在双向链接页面就不会出现(它们没有使用链接语法),寻觅这些文件就只能求助于搜索框。

另外,DEVONthink 也有一个“See Also”的推荐界面,可根据其“人工智能”算法给出的推荐,可惜在中文环境中往往不靠谱,下图中,DEVONthink 甚至根据一则民法案例给我推荐了八竿子打不着的刑法修正案4。最后,可靠的搜索还是需要依靠搜索框

总之,DEVONthink 毕竟是一个文件管理工具而非单纯的笔记工具,如果想精确检索笔记,那么使用其自带的双向链接工具倒是有的放矢;如果想把 DEVONthink 当成兜底数据库、从中挖出尽可能多的东西,则其自带双向链接力有未逮,最好使用原始的搜索框。
记忆工具类:以 Anki 为例
区别于 Obsidian、nvALT 和 DEVONthink,Anki 干脆是没有双向链接功能,但是如前所属,只要它有搜索功能,就不耽误通过 Keyboard Maestro 进行跳转。
最初为 Anki 设计“双向链接”,只是为了解决其碎片化问题,方便回顾同类卡片。比如当前在复习一张关于民事诉讼流程的卡片,背完之后想看看在刑事诉讼中有无类似规定,则可以选中当前卡片中的案号(请忽略图中蓝幽幽的“链接”,那是一种更加进阶的双向链接实现方式,本节末尾会介绍),同样按下 ⌃Control-⌥Option-⌘Command-J
运行 Keyboard Maestro 动作,随后选择“Jump to Anki”即可在 Anki 数据库中检索提及当前卡片的同类卡片,相当于双向链接的功能。

前两节都是跨软件跳转,而对于 Anki 这种连双向链接都不具备的工具而言,就要首先解决搜索自己数据库的问题。当然,也可以从 Anki 跳至别处,尽管 Anki 本身没有双向链接,但不妨碍选中其中任意一段文字,将其当作“双向链接”(其实就是搜索关键词)并运行 Keyboard Maestro 动作实现跳转。如下图所示,当我背诵一则裁判要旨时,偶尔想查看相关笔记以加深理解,就可以选中图中的案号,并通过 Keyboard Maestro 打开 nvALT 查看关联笔记。此外,从其他工具跳到 Anki 也不在话下,本文提供的 Keyboard Maestro 动作默认是全局启用(Global),不限使用场景。

此外,Anki 还允许“一键跳转”的交互方式。Anki 卡片本身支持嵌入链接(Anki 卡片由 HTML 写成,可以视作一个微型“网页”),因而可以将 Keyboard Maestro URL Scheme 直接写入 Anki 卡片,实现一键点击、跳到 Anki 数据库或第三方软件的效果,减少一点使用快捷键的压力;如果有需要,也可以乞援 Keyboard Maestro Paletet,实现“二级菜单”效果,展开一串可供跳转的软件。具体方法可参考《Keyboard Maestro Palette:macOS 上的全能工具箱》一文。

动作设计思路
双向链接的狂潮令人生疑。没有提供“双向链接”者,就只能被时代抛弃吗?答案是否定的,因为双向链接根本不是一种“器质性”的功能,现在的“双向链接”,其实是对搜索框的一种“二次发明”。反过来说,任何提供了搜索框的工具,都有开发出双向链接的潜力;至于自动化部分,本文选择了 Keyboard Maestro,以最大程度模拟键鼠操作、简化跳转过程。
双向链接的最原始实现方式:搜索
nvALT 可能是最早实现双向链接的笔记工具,它发布于 2011 年,已经有十年的开发历史,远远超过 Roam Research 和 Obsidian。nvALT 有 [[笔记标题]]
链接语法,不过点击之后的事情非常单纯:在搜索框中展开检索(之前提到过,Obsidian 也差不多)。

稍微一想,就能理解“搜索框=双向链接列表”这一论断:双向链接列表,展示的是所有正文含有 笔记标题
这一关键词的笔记,而搜索框中呈现的是所有包含 笔记标题
文件,包括双向链接列表中的全部笔记以及当前笔记本身。或许严肃起见,我应该把表述修改为“搜索框≈双向链接列表”,不过聪明的读者想必已经抓住了重点。
当然,自带双向链接终归是一件好事,点一下就能呈现相关笔记的体验,怎么说也比选好文本后再运行自动化动作来得顺畅;另外,Obsidian 等工具对于链接语法进行过二次开发,形成了私有语法标记(私有语法之利弊暂且不提),如果搜索语法也跟着有所变动,则传统搜索框可能爱莫能助。
本文凌空架桥、大兴土木,并非为了对抗双向链接,只是希望惠及双向链接阙如的工具(比如 Anki),以及打通各个工具之间的隔阂。
Keyboard Maestro URL Scheme
在文章前半部分的使用说明中,大致已经可以看出,自动化动作的基本流程是获取链接、打开目标软件并进行搜索。这里以跳至 Anki 的动作为例,对照着 Keyboard Maestro 的详细步骤再梳理一番,方便诸君将以下流程套用到其他工具中。

- 模拟快捷键
⌘Command-C
,以获取当前选中的文本(无论是否含有双向链接) - 检测方才复制的文本,如果其中含有双向链接,则将其提取出来;如果没有,则将整段文本视为双向链接的内容;
- 打开 Anki;
- 先后模拟快捷键
B
和⌘Command-V
和↩Return
,即打开 Anki 数据库、输入关键词和搜索这一系列动作,每一步之间建议间隔 0.1 秒左右以等待 Anki 做出反应5。
其实整个流程非常直白,根本用不到什么代码只是(最多只是在提取双向链接时用到了很少的正则表达式),只是模拟了复制关键词到指定工具中进行搜索的过程。
小结
双向链接最初只是一个简单优雅的纯文本语法 [[]]
,本应当是所有工具通用的语言,就像巴别塔建造之前的世界只说一种话语。
在个人知识管理的淘金热潮中,大多数的工具逐渐开始各自为政,打造封闭的知识库,这种大一统的企图最终推到了知识连接的巴别塔。尘埃散去,满地都是人为筑成的沟壑与壁垒。我们很难想象 Obsidian 和 Roam Research 如何交流,也难以在 DEVONthink 和 Anki 之间开辟一条信息丝绸之路。
管见以为,个人知识管理并不见得需要一个“All in One”的工具。目前的知识管理工具可谓是城邦林立,只要在它们之间修桥补路,用 Keyboard Maestro 实现跨软件的“双向链接”,就能各取所长、交流互通,培育出一片繁荣景象。就像萧伯纳那句老话所说的:
你有一个思想,我有一个思想,我们交换一下,一人就有两个思想。
🛍 我撰写的付费栏目《信息管理,文件为本位的方案》正在 UNTAG 售卖,对本文话题有进一步讨论,欢迎选购。
- 语出 MacSparky,The PKM gold rush is on。我讨厌“个人知识管理”(PKM,Personal Knowledge Management)这个营销用语,但为方便检索,姑且用之。 ↩
- “导入”与“导出”不配称“交流”,更不用提许多专有格式的数据——比如完全组织为大纲的 Roam Research——导出到绝大部分工具中都无法识别。 ↩
- 如果你安装了多个链接跳转动作,此时 Keyboard Maestro 会将其全部呈现在一个“Palette”中,形似悬浮工具栏。。 ↩
- 我在查询近年案例时,DEVONthink 常常给我推荐几篇上世纪的法律文件,很可能只是由于它们都出自最高人民法院的官网,而在内容上毫无关联。 ↩
- 如果运行出错,最鲁棒的办法就是增加时间间隔。 ↩