# 用 Keyboard Maestro 快速插入 Markdown 格式脚注

> 本文公开全文。

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

脚注作为 Markdown 语法中的外来者，在多数编辑器中都很难输入。本文提出一种基于 Keyboard Maestro 的方案，并借用 %TriggerValue% 将原本一大套动作简化为一个。

当今文章，脚注（footnote）颇为常见，以至于有人要反过来主张少用脚注。当然，这不是本文讨论的方向。

对于喜用 Markdown 的人来说，脚注并不容易输入。盖原始 Markdown 语法就不支持脚注，设计者 John Gruber 提到脚注时也只是将其与链接相提并论，而没有设计脚注语法。后来的编辑器，大多也在脚注问题上含含糊糊，最后还是要在不同位置手动输入两遍 \[^1\] 形式的脚注，很误工夫。

有过之前用 Keyboard Maestro 输入其他 Markdown 符号的经验（见前文和 GitHub），稍作推广，也就有了本文的脚注输入方案。不过，脚注毕竟远比一般的 Markdown 符号复杂，绝非炒冷饭；如果人造物在这里还有延续性可言，那就不得不同时考察 Keyboard Maestro 中的特殊变量：%TriggerValue%。

Keyboard Maestro 动作下载

## 使用速览

相对正规的脚注语法由一组符号组成：在正文中的 \[^脚注序号\] 加上文末的 \[^脚注序号\]\: 脚注内容。也有一种相对简单的写法，直接的正文中插入一段 \[^脚注内容\]，但这种写法并不标准，很多编辑器并不兼容——包括早期的 Obsidian（我几乎不用 Obsidian 了，不清楚后来的情况）。后一种情况与输入超链接或图片链接无异，无需单独撰文；而前者，却并不简单（为避免网页渲染错误，以下代码中，我用粗括号代替了脚注标记中的原始符号）。

```
这里是正文。【^1】

【^1】: 这里是脚注。
```

我设计的 Keyboard Maestro Macro 可达到如下效果：

- 在文稿任何一处，以此输入两次 数字再加上一个 f（f 表示 footnote），即可运行 Macro；

- 根据刚刚输入的具体数字，Keyboard Maestro 会在先在当前位置插入 \[^数字\]；

- 接着，Keyboard Maestro 会把光标移到文稿末尾并新增一行，接着插入 \[^数字\]\: 并将光标移到此处，以便继续输入脚注内容。

您可以自行修改触发方式（Trigger）——相应的，需要阅读后文，以修改 Macro 步骤——我选用两个数字加上 f，是为了好记且好按，直接换成快捷键固然无妨，而数字和字母的组合也可以。惟需注意，Typed String 应当是先数字、后字母的顺序，盖以 Typed String 为触发方式时，Keyboard Maestro 会先删掉输入的字符，再运行 Macro；而在中文输入法下，苟先英文、后数字，输入的多个字符会被当成一个，从而导致 Keyboard Maestro 多删一两个字符，破坏原有文本。而换作先数字、后字母，则无此虞。

## 用正则表达式简化 Trigger

异于一般的 Macro，本方案只需要设置一次 Trigger，就可以覆盖 11f 到 99f 九种触发方式，其中机关就是正则表达式。

稍微有一点自动化基础的读者，大概知道 Shortcuts 也有正则表达式相关步骤，我也写过一些文章。规则表达式是一种模式匹配，写一次表达式，射程就包括一类情况，而不用逐个记载；比如，若想对 JPG 和 PNG 文件执行同样的压缩操作，就可以写 jpg\|png 这个表达式，表示遇到任意一种格式，都照常压缩图片。Keyboard Maestro 的特殊之处在于，其触发方式也可以带正则表达式，原本要写九次，有了正则表达式，写一次就足够。

图中的表达式 \\d\\df 表示两个数字加上一个字母 f，可以囊括 11f 到 99f——其实，真正的范围是一百种情况，只是两个数字加一个字母的组合极为罕见，日常使用时不太可能按错（要求输入两次数字，也是为了降低误触概率）。

## 用 %TriggerValue% 减少动作数量

除去大大简化脚注输入过程，此 Macro 还可以照顾到从 \[^1\] 到 \[^9\] 的不同脚注，一以贯之；而通常的方案可能要为不同序号的脚注各创建专用动作，较难维护。而本方案之所以只需要一个动作，token 居功甚伟。

和正经的编程语言一样，Keyboard Maestro 中也拥有许多变量，而 Token 则是一类特殊变量，和用户自己预设的不同，token 会随着当前系统或软件的状态而不断变化；涉及 Keyboard Maestro 自身状态的 token 则更加特殊，可以实施监控 Macro 的运行状态，并反过来调整 Macro。换言之，token 就像 Keyboard Maestro 自动制导导弹中的控制器，四两可拨千斤。

本方案用到了 %TriggerValue%，它表示当前触发条件的值（value）。上一节已经提到，我们的触发方式是 \\d\\df，而 %TriggerValue% 可以捕获到具体按下的键。例如按下 11f，这串字符就会成为 %TriggerValue% 的值，并可以进一步调用。

理想的脚注插入方式是：

- 按下 11f，输入一对 \[^1\]；

- 按下 22f，输入一对 \[^2\]；

- 按下 33f，输入一对 \[^3\]；

- ……（以此类推）

稍加观察，可以看出，按下的字符决定了最终文本中的数字，那么只需将 %TriggerValue% 抓到的数字插入文稿，就大功告成。

其中的思维跳跃在于，我们不再预设一系列的动作、并为之设置专用的触发方式，而是将类似动作合并为一个，通过侦测触发方式的细微差异，调整最终插入的文本。关于 %TriggerValue% 的更多讨论。可见 Keyboard Maestro 论坛。

## 小结

做一个复杂的 Keyboard Maestro Macro 是一件相对简单的事情，但做一个简单的 Macro，很可能是一件复杂的事情。此前介绍过的 Palette 也旨在简化 Keyboard Maestro Macro，不过只是停留在 Macros 层面，而 %TriggerValue% 则直接修改了 Macro 本身，简化程度更加彻底。

插入脚注，当然可以用传统思路，用得着几个序号就做多少个动作；可惜这样制作 Macro，水平很可能只是原地踏步——虽然也不耽误干活。而设计工具的乐趣，大概就在这些“只有上帝会看见”的内部细节上。

🛍 我撰写的付费栏目《Keyboard Maestro 进阶指引》正在 UNTAG 售卖，详解 Keyboard Maestro Macro 高级设计思路，欢迎选购：付费内容链接

---

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