Keyboard Maestro 是一款 macOS 平台类似 Alfred 的效率神器。

Keyboard Maestro

Keyboard Maestro 是一款 macOS 平台类似 Alfred 的效率神器,其核心思想也是以一个触发器(Trigger)操作触发一连串组合动作(Action)来高效便捷的完成复杂任务,同时也十分符合『一个程序只实现一个功能,组合小程序完成复杂任务』的 Linux 哲学。

关于 Keyboard Maestro(以下简称 KM) 本身的介绍和基本使用可以先行拜读少数派的这篇长文,很详细覆盖也很全面,本篇主要记录分享下我个人使用中的一些用例和场景。

使用场景

只要我们的任务可以被分解为多个目的单一的小步骤,步骤与步骤之间可以通过标准输入输出传递数据串起来,这个任务就很可能可以使用 KM 来简化操作。

tech-0-1.png

在 KM 里作为触发器的就是一组快捷键,为了解决 macOS 上可用的快捷键总是捉襟见肘的情况,可以参考上一篇《Karabiner Elements 键位定制神器》先配置一下 Hyper Key,可以尽可能的避免快捷键冲突问题。

快捷键启动(切换)任意应用

快捷键直接启动指定应用程序,这应该是最简单直接的应用场景,系统默认的 Cmd + Tab 显然总是无法 Get 到我到底想要切换哪个 App…最直接的方式就是给要切换的 App 钦定一个快捷键,无论在什么窗口下直接按下指定的快捷键就能马上脉动回来。

以 Sublime 为例,我设置的快捷键为 Ctrl + Alt + Shift + Cmd + s,其中 Ctrl + Alt + Shift + CmdHyper Key,实际操作只需要按下 CapsLock + s

15020295730202.jpg

与此类似,我给一些工作里切换频率最高的 App 如 Sublime、iTerm2、微信、QQ、Sequel Pro、AirMail、Chrome 和 Firefox 等都设置了一键直达,切换起来酣畅淋漓。

快捷键映射组合键

在浏览器里切换标签页,主流浏览器的快捷键基本都是:

  • Alt + Shift + t,恢复最近关闭的标签。
  • Ctrl + Shift + Tab,切换上一个标签。
  • Ctrl + Tab,切换下一个标签。
  • Cmd + w,关闭当前标签。

记忆和单手操作起来都没有那么方便,而且的我的浏览习惯是同时开多个标签放着,然后一个个去看,有时候查资料会频繁来回切换多个页面的内容做参考,所以对我来说这几个快捷键的使用频率很高。

在 KM 里我给这些快捷键做了映射:

  • F1 -> 恢复最近关闭的标签。
  • F2 -> 切换上一个标签。
  • F3 -> 切换下一个标签。
  • F4 -> 关闭当前标签。

浏览多个标签时,左手放在键盘最上面那一行,操作距离极短且记忆成本很低,效率高到飞起。

快捷键执行脚本

最强大的莫过于执行脚本了,允许执行脚本基本就意味着 you can do whatever you want,随便举几个例子:

清空回车站

虽然忘掉手动清空回收站并设置一段时间自动清空回收站是更优雅的做法,但相信太多的强迫症患者看到 Dock 上塞满的回收站图标都忍不住手动将它清空。

这里不讨论为什么 Apple 直到最近的版本才给 macOS 加上了直接删除(不经过回收站)快捷键(Option + Alt + Del),只以清空回收站作为例子来说明 KM 的用法。

15025228256102.jpg

图中的配置,按下 Ctrl + Shift + Cmd + E 会执行一段 AppleScript,代码如下:

1
2
3
tell application "Finder"
empty trash with security
end tell

脚本的功能就是执行清空回收站的操作,一秒解救强迫症。

更强大的是不止能执行 AppleScript,还能执行 Swift 和 Shell 等,能执行 Shell 也就意味着什么不该做的事你都可以做 😂。

15025231818781.jpg

开关 Wifi 网络

因为公司工位的有线网比无线网要稳定很多,所以只要在工位上我就会插上网线断开 Wifi,在会议室或者回家后则会打开 Wifi,所以对我来说开关 Wifi 也是一个平均每天都会用的操作。

常规的操作当然是鼠标点击任务栏中的网络图标然后关闭,一来需要精确定位,二来需要两次操作,每天都需要操作的话也是很烦。所以我在 KM 里配了一个快捷键专门来实现开关 Wifi:

15025370436789.jpg

这个配置中首先定义了一个快捷键 Hyper Key + n,当快捷键被按下时:

  1. 执行一段 Shell 脚本,来实现检查 Wifi 状态并切换状态(Execute text script)。
  2. 开关操作完成后,弹出一个通知信息,显示目前的 Wifi 状态(Notification)。

Shell 代码为:

1
2
3
4
5
6
#!/usr/bin/env bash
device=$(networksetup -listallhardwareports | grep -E '(Wi-Fi|AirPort)' -A 1 | grep -o en.)
[[ "$(networksetup -getairportpower $device)" == *On ]] && v=off || v=on
networksetup -setairportpower $device $v
echo $v

注意图中有一个配置项 Save to variable,意思是把 Shell 脚本的输出内容存放到一个变量中,这个例子里变量名为 Status

通知部分:

  1. Title 填写 %ExecutingMacro% 表示标题会显示当前执行的配置名称,也就是图中的『Wifi Toggle』。
  2. Message 中填写 Wifi is %Variable%Status%.%Variable%Status% 部分表示会取用上一步 Action 所保存的变量 Status 的内容。

最终按下快捷键时的效果:

15025376867405.jpg

快捷键执行工作流

以上列举的几个场景为了尽量简单都只涉及到通过快捷键触发一个 Action 的情况,单个 Action 已经可以实现很多简单的高效操作,但更复杂的操作还是得靠多个 Action 串联起来形成工作流才能实现,这也正是 KM 和 Alfred 类似的工作流概念强大的地方。

查有道词典

虽然 Mac 上或者浏览器里有一万种取词查词的方法,但我还是会有一些场景下想要打开有道词典看看更详细的释义和例句,然后添加到单词本方便后续记忆。

手动操作:

  1. 选中文本。
  2. Cmd + c 复制选中文本。
  3. 双击有道图标或者 Alfred 打开。
  4. Cmd + v 粘贴复制的文本。

KM 工作流:

  1. 按下快捷键,一步搞定。
15025254568016.jpg

这个配置的核心是通过一个快捷键触发 复制文本、打开应用、粘贴文本 等一系列的操作,来最终完成一个相对复杂一些的任务。

可惜的是有道词典一直到目前的版本都还没有提供添加单词本的快捷键,不然添加单词本的操作也可以一气呵成在这一个工作流里。

类似的场景其实工作中还有很多,将任务分解然后结合 KM 提供的各种 Action 组合完成,效率陡增,事半功倍。

小结

虽然 Windows 上的 AHK 更为灵活,配合上 Spy++ 获取窗体控件 ID 更是能把上述例子里的单词本快捷键都加上去,但过于灵活和强大的同时,通常也意味着更高的复杂性和上手难度。

个人觉得 Keyboard Maestro 在功能强大和易用性之间找到了一个良好的平衡点,在上手难度不那么大的前提下可以变换出众多带来极大效率提升的组合,和 Alfred 并称 macOS 效率神器并不为过。

本篇只是粗浅的记录一些自己实际使用的例子,要解决更多实际的痛点还得仔细分析拆解自己的使用场景,结合 KM 种类繁多的 Action,或多或少一定能带来效率的提升,日积月累,节省出来的时间,多赚点钱或多陪陪心爱的人,随便干点什么都好 :D

参考

关注 NewtonIO - 创造者们的技术与工具