# 用 Keyboard Maestro 将几乎任何软件纳入双向链接网络

> 本文公开全文。

原文：https://utgd.net/article/20129

自 Roam Research 以降，“双向链接”已经成为检验一款笔记工具是否“现代”的试金石。无论是 DEVONthink、Tiddlywiki 等老牌工具，还是 Obsidian、Craft、简悦等新秀，无一不加入这场个人知识管理的淘金热。

在淘金的浪潮中，多数主打双向链接的工具也开始圈地自萌，各自构筑其铁壁高耸的“知识库”，不同工具之间的贸易往来日渐稀疏，偶尔的跨软件交流反倒成了例外。如果你在 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 动作

- 等待 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 甚至根据一则民法案例给我推荐了八竿子打不着的刑法修正案。最后，可靠的搜索还是需要依靠搜索框

总之，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 做出反应。

其实整个流程非常直白，根本用不到什么代码只是（最多只是在提取双向链接时用到了很少的正则表达式），只是模拟了复制关键词到指定工具中进行搜索的过程。

## 小结

双向链接最初只是一个简单优雅的纯文本语法 \[\[\]\]，本应当是所有工具通用的语言，就像巴别塔建造之前的世界只说一种话语。

在个人知识管理的淘金热潮中，大多数的工具逐渐开始各自为政，打造封闭的知识库，这种大一统的企图最终推到了知识连接的巴别塔。尘埃散去，满地都是人为筑成的沟壑与壁垒。我们很难想象 Obsidian 和 Roam Research 如何交流，也难以在 DEVONthink 和 Anki 之间开辟一条信息丝绸之路。

管见以为，个人知识管理并不见得需要一个“All in One”的工具。目前的知识管理工具可谓是城邦林立，只要在它们之间修桥补路，用 Keyboard Maestro 实现跨软件的“双向链接”，就能各取所长、交流互通，培育出一片繁荣景象。就像萧伯纳那句老话所说的：

> 你有一个思想，我有一个思想，我们交换一下，一人就有两个思想。

🛍 我撰写的付费栏目《信息管理，文件为本位的方案》正在 UNTAG 售卖，对本文话题有进一步讨论，欢迎选购。

🔗 付费栏目链接

---

[前往标准阅读页](https://utgd.net/article/20129?audience=web)
