不知道大家还记不记得前阵子的 Mac ‘Pick a Bundle’ 2017(我派文章:《这也许是 2017 年省钱最多的 Mac Bundle 软件套装》),我当时犹豫了很久,因为我不知道我是不是真的需要这些 App,不过后来还是剁了。因为之前没有用过,我很天真的以为 TextExpander 是买断制的,激活的时候才发现自己亏了。
对很多人来说 TextExpander(下称 TE)的必要的功能 Keyboard Maestro(下称 KM)基本可以代替。而且 KM 在中文输入法下也能正常工作,TE 则会有很多问题。本文尝试给出一个全面的替代方案帮助你省钱省心。还没有尝试过这种效率工具的朋友也可以照着教程弄一个试试,说不定就有用呢。参考链接中还有一些 KM 的其他使用场景,希望你能帮到你。如果你已经用了一阵子 TE,还有比较方便的迁移方案。
不过如果你比较在意在 iOS 上做这件事情,那恐怕还要继续用 TE,很显然在 iOS 上除了用功能单一的系统自带的文本替换,并没有什么好的办法来代替它。
基本的文本替换
这是一个邮箱地址的 snippet:
这是其在 KM 中的实现:
激活条件
点击 New trigger 添加一个激活条件。
我这里选择的是 Typed string trigger,和 TE 的激活方法是一样的:用户在某一文本框中输入一些关键词。你也可以按自己的习惯把一部分常用的 snippet 改成用快捷键激活。
- Case dose not matter 可以选择侦测是否大小写敏感,TE 也有类似的设置。
- Match after any character 可以设置替换的时机,我目前的选择代表只要侦测到字符就替换。如果你改成了 Match after a word break 则在字符前没有一个空格作为分隔的话,就不会被替换。
- Diacritical matter 我搞不懂有什么意义,不过改掉会让带有特殊符号的关键词失效,所以就这样吧。
- Simulate n deletes before executing 如果不选中那就是只执行脚本不删除关键词。这是一个 TE 没有的功能。
你还可以再添加一个 trigger 来指定这个脚本只在某些程序内执行。避免不必要的干扰。
输入方式
点击 New Action 添加一个动作,在左边的列表里找到 Text 可以看到前两项是我们需要的东西。
这里又是一个 KM 的优势,在 TE 中建立的 snippet 是不能在密码框工作的,在网页中也需要调整 Safari 的安全选项才能输入密码。比如说我们移动文件到系统目录需要确认,这个时候就可以用 KM 做一个快速确认的脚本。
- Insert text by Pasting 文本会被先复制到剪贴板再粘贴到区域。(输入到 Apple ID 登录框时要使用此选项)
- Insert text by Typing 文本会被以模拟键盘的方式输入到区域。(输入到系统密码区域或想避免影响剪贴板时使用此选项)
一般我都会用前者,大部分情况下都是适用的。因为有用一些剪贴板管理软件,所以也不在乎影响剪贴板。顺便给出我输入系统密码的脚本。(不过注意,密码是明文存储的,如果别人有可能碰到你电脑,我不建议你这么做。)
复杂点的模版输入
在 TE 中我们可以指定一个模版,比如说邮件回复的模版,在实际使用的时候可以直接在模版中填空来输入大段文字。下面是一个案例:
运行效果大概是这样的:
这是其在 KM 中的实现:
运行效果大概是这样的:
询问输入
添加的第一个 Action 是 Variables/Prompt for User Input。
- Title 和 Prompt 没什么好说的,就是标题和提示语
- Variables and Default Values 这里你可以定义需要输入的变量名和他们的默认值,注意变量名不能重复,必要时可以后面加 123 之类的。这些变量名也会显示在要求输入的提示框里。
构造文本
点击 Insert Token 就可以在文本中加入之前的变量。
只需要把光标定位在变量要放的位置然后加就行了,如果你熟悉语法也可以自己打字,这都没关系的。
我解释一下其他两个重要选项:
- Calculation 会在你的文本中插入一段计算代码,默认是
%Calculate%1+2%
你可以利用这个语法来对输入的变量进行一些计算。比如说你有两个变量「单价」和「数量」,就可以写一个%Calculate%单价+数量%
,会输出相乘的结果。这是一个 TE 没有的功能。 - Position Cursor 输入文本后将光标放在某处。如果你需要在模版中间再自己打字的话,这是一个很方便的选项。
再重点介绍一下和时间有关的公式:
- Date/Formatted (ICU) Date Time 会插入一个格式化的当前时间戳,默认格式是
%ICUDateTime%EEE, MMM d, yyyy h:mm%
。你可以调整百分号之间的 EEE(星期)yyyy(年)MMM(月)d(日)h(小时)mm(分)ss(秒)的位置和周围的字符串来形成一个自己需要格式的一般时间戳。 - Date/Formatted (ICU) Date Time For 默认会插入一个 30 秒后的时间戳,默认格式是
%ICUDateTimeFor%NOW()+30%EEE, MMM d, yyyy h:mm:ss%
。修改数字 30 可以指定距今多少秒,可以配合一些变量实现输入之类的。格式调整同上。 - Date/Formatted (ICU) Date Time Minus 默认会插入一个 21 天前的时间戳,默认格式是
%ICUDateTimeMinus%3*7%Days%EEE, MMM d, yyyy h:mm%
。可以修改数字和单位,都是时间单位英语的复数。格式调整同上。 - Date/Formatted (ICU) Date Time Plus 默认会插入一个 21 天后的时间戳,默认格式是
%ICUDateTimeMinus%3*7%Days%EEE, MMM d, yyyy h:mm%
。参数修改方法同上。
剩下的东西如果大家需要可以自己研究一下或者参见官方文档。
富文本问题
有时候我们会需要输入一些带有格式的文本,KM 并不能原生对这种东西提供支持,这是一个很尴尬的缺点。不过办法还是有的,比如说可以用 RTF 文件。
我们先用文本编辑新建一个文件。内容如图:
然后在 KM 里加入 File/Read a File 和 Clipboard/Paste,把文件定位到刚才建立的文件上。
效果如下:
你也可以把这个操作穿插到之前的「模版输入」章节中使用。
其它常用操作
插入图片
插入图片的做法如图,注意过程中会修改剪贴板。
分别是 Image/Read a File 和 Clipboard/Paste。
运行脚本
运行脚本的 Action 可以在 Execute 中找到。
用法也都很简单,和 Automator 类似。
模拟功能键
Interface Control/Type a Keystroke。
小技巧
你可以把一些 snippet 放在一个文件夹中,并制作一个弹出选择菜单的脚本来做备忘。内容和效果如图:
Keyboard Maestro/Show Macro Group 会让这个菜单一直显示,Keyboard Maestro/Show Macro Group for One Action 则会在执行后消失。
数据迁移
我在 Github 上找到了一个迁移脚本,可以帮助你把那些简单的 snippet 直接迁移到 KM。但是那个脚本中的配置文件位置已经是上一个版本的了,我更新了一下放在我自己的 GitHub,大家可以取用。(GitHub 链接)
先把这个脚本下载到本地,再在终端中运行:python TE.py
就可以在桌面生成 KM 的配置文件,双击导入即可。
对于比较「花哨」的 snippet,你可能就需要自己去折腾一下了。可以先做一个模版,然后多复制几遍改一改。这里是我上面模版输入的 snippet 文件。
小结
相关链接
- Keyboard Maestro Wiki
- rjames86/textexpander_to_keyboardmaestro
- Keyboard Maestro 入门指南 - Oscar Gong
- Keyboard Maestro 和它的 Macro 们 - Janner Chang
- Keyboard Maestro:键盘大师 - Mac 玩法
- TextExpander and Keyboard Maestro: How I Use Both
- Text Expansion Using Keyboard Maestro (First Cut)