article_image

支持 Markdown 已经成了一种政治正确,如果一个笔记软件不支持 Markdown,那么它很可能被划入异端邪教的范畴;而一款身无长物的编辑器,最差也可以标榜自己“支持 Markdown”,就像一个没什么魅力的相亲对象,至少能安慰自己“人还不错很好”一样。

仔细想想,“支持 Markdown”本身就是一个奇怪的说法:Markdown 是纯文本,难道有什么编辑器不支持输入纯文本吗?所谓的“支持 Markdown”,其实有两层意思:第一,快速输入 Markdown 标记符号;第二,渲染这些符号,预览它们的最终效果。

一旦把“Markdown Support”剖析为具体操作,我们就可以借用自动化工具,把任何一款软件——从日记软件到 Safari 浏览器——变成 Markdown 编辑器,快速输入 Markdown 标记符号。

Alt text
左:常见 Markdown 编辑功能;右:KM 的 Markdown 编辑模式

>> Keyboard Maestro Macro Group 下载 <<

为什么

首先要明白,到底什么时候用 Markdown 才得体。有两种情况,都适合用 Keyboard Maestro 搞个 Markdown 编辑模式。第一种毫无疑问,就是软件本身不能快速输入 Markdown 标记,比如我常用的任务管理工具 Taskpaper,以及大纲软件 Bike。写在里面的东西往往要誊到写笔记软件乃至作软件里,因此我想一开始就标好 Markdown 标记。

另一种情况则是,编辑器本身有 Markdown 相关的快捷键,但是键位极其诡异。比如 Slack 网页版,它的快捷键自成一套,违背习惯不说,还容易和系统打架,这时候就适合派 Keyboard Maestro 去管管治安,用标准——这里的标准完全看你的喜好——键位输入 Markdown 标记。而在 Slack 里本来就不会写文章,只是在发表长留言的时候偶尔用一下 Markdown,稍稍修整排版,这时候临时开个 Markdown 编辑模式就很应景,用完退出,也不耽误使用 Slack 的其他快捷键。除了 Slack,还有很多和编辑器八竿子打不着的软件也开始蹭 Markdown 的名气,比如 Things,显然它们不会为 Markdown 输入设计一套合理的快捷键,遇上这些能输入、但不方便输入 Markdown 的软件,都可以试试自己搞一个 Markdown 输入模式。

Alt text
Slack 可以渲染 Markdown,但是输入不方便

怎么做

严格来说,我不是要把所有软件变成 Markdown 编辑器,而是要给任何软件开启 Markdown 编辑模式。此中差别在于,编辑模式(Mode)只是临时的,用完可以关掉,除了输入 Markdown 标记的那段时间,其他时候并不影响软件本身的快捷键——所以从一开始就不需要担心键位冲突。

于是,在 Keyboard Maestro 里就要做两件事,第一是准备一堆快速输入 Markdown 符号的 Macro,第二则是为这一组 Macro 设置启动条件,让 Keyboard Maestro 在普通模式和 Markdown 模式之间切换,只有进入 Markdown 模式才会令其中的 Macro 生效。

快速输入 Markdown 符号

Markdown 符号原本是为了简化 HTML 而设计的,比起后者当然简单了不少,比如从 HTML 格式的链接到 Markdown 链接,省下的工作量就很可观。

<a href="link">标题</a>
[标题](link)

上为 HTML 格式的链接,下为 Markdown,我想没有多少人愿意手动输入上面那一行;同样,乐意手动输入下面那一行的人,估计也是屈指可数(除了刚刚遇上 Markdown 的人,尚有三分钟热度支撑着)。

传统的输入方式是打完所有符号,然后把光标挪回括号里面,继续输入标题或链接。算上中英文切换和输入符号,怎么也要四五步,而简化后只用一步。这里用到的特性是 Keyboard Maestro 的模块“Insert Text by Pasting”,顾名思义,就是把一堆事先准备好的文本粘上去;而移动光标则依靠内置变量 %|%,它表示把光标放在某个位置。用 Keyboard Maestro 输入 [%|%](),就可以在粘上整组符号的同时,把光标移到填标题的位置,等待下一步输入。

Alt text
快速输入 Markdown 链接符号

上图中的红黑配色小浮窗只是起到提示作用,表示当前处于 Markdown 编辑模式,里面的选项可以点击,不过诸位想必还是更喜欢自定义快捷键。链接语法 []() 在 Markdown 标记中已属复杂,解决了它之后,其他符号就不在话下。

Alt text
Keyboard Maestro 中的步骤

当然,具体实现的时候,我还考虑了一些交互细节,例如已选择一段文本时,会直接把选中的文本当作标题填进 Markdown 链接里,然后把光标移到链接的位置;而如果没有选中任何东西,则直接输入空的 Markdown 链接符号。为加粗、斜体或删除等其他 Markdown 编辑功能设计 Macro 时,也可以照顾一下这些细节。

实现“Markdown 模式”

准备好 Markdown 输入动作——丰俭由人——之后,就可以着手设置 Markdown 编辑模式。首先把上一节中创建的 Macro 都放入一个 Macro Group 中,然后在“Shows/hides a palette when:”选项中重点设置如下两项:

  1. 勾选“The hot key 你设置的快捷键 is pressed”,在按下自定义快捷键后才会启用整组 Macro,用完关掉,则退出 Markdown 编辑模式,
  2. 勾选“Display when toggled”,这表示在整组 Macro 启用时,会显示一个类似悬浮菜单的玩意儿(在 Keyboard Maestro 里叫 Palette,可参考 这篇 文章),充当一个视觉信号,提示现在已进入编辑模式。
Alt text
Macro Group 设置

如果想要提示更明显,可以把盛放 Markdown 编辑功能的 Palette 设置成特殊样式,比如下图这个红黑配色,足够醒目。

Alt text
为 Palette 设置特殊外观

小结

模式的灵感,来自于 Vim 等古老的编辑器,它们都讲究模式,各个模式下的快捷键截然不同,这样既可以容纳更多的快捷键组合——在鼠标还不普及的年度,这确实很重要——也可以提供一个场景,在一个模式下只能进行一组操作,专事专办。

“Markdown 编辑模式”只是一个朴素的例子,我的电脑上至少还有三五种特殊操作模式,比如复制粘贴模式,套用样式模式(相当于全局通用的格式刷),等等。这些模式,各自设置了不同外观的 Palette,好像准备了几套不同的工具,瞟一眼就知道现在处于哪个模式下。

Alt text
几个不同的 Keyboard Maestro 模式

author_avatar

Lawyer, macOS/iOS Automation Amateur