我向来不喜欢轻易推荐工具,这大概是我一直在写杂文方面赚不到钱的原因。曾有读者问,能不能推荐几款装机必备工具?旋即有其他读者回应:Minja 只会给你推荐 Keyboard Maestro 和 DEVONthink,然后剩下的他自己写脚本解决。
不过我愿意给 LaunchBar 破例。管见以为,世界上只有两种启动器(Launcher),一种叫 LaunchBar,一种叫其他。这两者不是并列的,它们之间的距离,是魔法师的召唤兽与麻瓜的药水瓶之间的差别:魔法师可以对着一个空白的输入框吟唱魔法,从而召唤出任何强大的魔物;而麻瓜只会这里掏掏、那里找找,然后慌慌张张往外丢现成道具。
这篇文章初稿写于多年前的业余时间,当时觉得“魔法”隐喻过于晦涩,遂未发布。而今人工智能与魔法隐喻已经汇入流行文化,完全可以这样回过头介绍 LaunchBar:这是一款超前时代二十载的启动器,可以学习您的使用习惯,轻松打开任何文件、软件、网站或自动化工具等等几乎一切。
可惜,仅有上述说法实在不负责任,好像是普朗克所说的观念接受过程:旧一代人死光了,新一代人成长起来,于是新科学就被当作自然而然。或许还是从 LaunchBar 和 Alfred 旷日持久的对立说起,方能还历史原貌。1
本文基于 Alfred 4 和 Alfred 5 早期版本,配图和技术细节可能已经落伍,但是 Alfred 的操作逻辑从未有过多大变化,应当不影响本文观点。从在喉之鲠谈起
LaunchBar 在启动方式上是绝对的小众,以至于关于 Alfred 和 LaunchBar 使用方式差异的讨论很容易变成针对 LaunchBar 一方的抨击或热捧。一定程度上,我也赞同应该聚焦 LaunchBar 的特点,但更重要的是离开打成一团的人群、冷静想想它为何这样设计,而非进去站队。
本节将先尝试回答“不能输入中文”和“无法删除已输入文本”这两个“LaunchBar 特色”,之后再回到和 Alfred 的操作细节对比上去。
第一个槛:LaunchBar 不支持中文?
关于 LaunchBar 不支持中文的抱怨多见于搜索系统文件和启动中文名应用时,可见这是不少新手对于 LaunchBar 的一个心结。
如果单说中文2——其实也包括别的东亚字符——实际情况是 LaunchBar也能支持,自带的 Spotlight 搜索动作就是一个曲线方案;LaunchBar 教程作者@契丹神童曾写过一套中文搜索动作,基本解决了文件搜索方面的中文支持问题。
拉上用户的劳动成果固然有点不公,只是希望大家能够明白一点:LaunchBar 并不是中文绝缘体。追本溯源一点,契丹神童这套动作和 Alfred 都借用了 macOS 的 Spotlight 索引,好比朝着同一片田野开了两扇窗子,看到的是同一片风景。
剥开第一层“中文水土不服”的外衣后,理性的读者可能会把话题往前推一步:好,姑且认为两者在功能上是等价的,但是 Alfred 操作方式更简单吧?恰恰相反,Alfred 搜东西的操作步骤要多于 LaunchBar,问题的症结在于谁更符合直觉、而不是比操作步数。尽管我已经习惯了 LaunchBar 的简捷,但仍然赞同 Alfred 更符合天性:
- Alfred 天然就是搜索界面,可以直接搜文件,符合我们的直觉,但一个瑕疵是需要加上空格(会输入
'
前缀)。 - LaunchBar 给你一个动作选择界面,需要启动指定搜索动作后再进行中文搜索(不管是自带的 Spotlight 跳转还是契丹神童写的自定义动作)。如果想直接定位到中文搜索动作,代价是请外援、另外记一组快捷键(比如引入 Keyboard Maestro 或在 Automator 里绑定)。
另外,在 Alfred 里启动动作一般要切到英文(最起码也是按一下 ⇪Caps lock
键让英文上屏),以至于在一些输入法玩家论坛里可以看到类似“如何开启 Alfred 时自动切换到英文输入方案”的讨论。
说白了,LaunchBar 的“缺点”在于第一次用时有理解成本,而 Alfred 继承了和 Spotlight 近似的操作,方便上手的同时稍稍牺牲了操作速度(尤其在运行动作时)——这是一个工具更贴近 Launch Bar(启动栏)还是 Search Bar(搜索栏)所决定的,在基础功能部分曾提到有些用户被工具外观“骗”了,指的就是 LaunchBar 的 Launch Bar 外观很难让人第一眼找到输入文字的地方——总之在文件搜索这件事上,中文从来就不是问题,至于操作方式两者则是各有偏向。
第二道关:LaunchBar 不能删除输入的字符?
你见过有人敲完快捷键还能删掉的吗?
如果要用一句话向我的朋友解释 LaunchBar“不能删已输入文本”的设计,我大概率会像上面这样反问对方。在此,还是要展开解释一下到底怎么回事。
把快捷键拉来做对比的意思是,LaunchBar 作为一个启动器,注重的是连贯、不假思索的输入,久而久之形成一种肌肉记忆。与其说你是在等待 LaunchBar 给你返回搜索结果,不如说你是在 LaunchBar 里使用快捷键快速、连番下达指令。
如果有读者用过 Keyboard Maestro,对于快捷键和启动器之间相似点的理解会更容易。Keyboard Maestro 是一个主打“魔改”键盘的自动化工具,快捷键嘛,一旦设置多了就容易重复、冲突,而 Keyboard Maestro 的解决方案是“Conflict Palette”,即提供一个展示冲突快捷键的小浮窗,你按好快捷键后接着按所需动作的首字母(仍然重复就下一位,以此类推)就能快速启动。比如我有六七个 GitHub 仓库,可以把同步3的快捷键全设成一样,敲完后接着按仓库名首字母同步指定仓库。
说回 LaunchBar,它的“模糊匹配”和快捷键在操作上非常相似:你只管一直输一直输,万一出错就敲 ⎋Esc
重来。更进一步,LaunchBar 的模糊算法不要求把项目名输入齐全,打一部分就能弹出可选项目,使用中需要推倒重来的情况并不多(我的 ⎋Esc
键坏了,用改键工具自己设置了一个,所以有使用记录——基本是日均个位数)。在很多写到 LaunchBar 的文章里,我更愿意使用“键入”而非“输入”来描述 LaunchBar 的启动方式,就是为了和 Spotlight、Alfred 等工具区分考虑,强调 LaunchBar 和快捷键的类似之处。
早在使用 Automator 和 Alfred 时,我在每个工具里就各拥有 100 多个常用自动化动作(部分在 这里),即便耐得住性子给所有动作设置缩写,也基本不可能全部背下来。
在整个工作流高度依赖 Automator+Alfred 的情况下,我转到 LaunchBar 的原因就是后者支持模糊匹配,不需要记缩写,如果不是读者 @blithe 提醒,我估计不会想到 LaunchBar 实际上也能设置缩写。如果说 LaunchBar 是一台浪漫的三角钢琴4那么其他启动器,只能算是质量还不错的投币式电唱机。
读到这里不难发现,“不支持中文”和“不准删除”其实是同一枚硬币的不同侧面:LaunchBar 吸收了快捷键的部分特性,便于你形成肌肉记忆,Type less but access more。这种操作需要一个下午乃至几天的成本来习惯,如果真的跟不上,可以试试把 LaunchBar 的延迟时间调久一点——只是,最好早日拆掉辅助轮,否则就说明 LaunchBar 是真的不对你胃口。5
末了,本节开头的问题甚至可以改改用来反问关于 LaunchBar 和中文的质疑:
你见过中文快捷键吗?
当然,在不加解释的情况下这样说就只是耍小聪明了,因而也只好现在才说。
操作细节:LaunchBar 更统一,Alfred 更丰富
过了“中文输入”和“不准后悔”两道难关之后,我们对于 LaunchBar 的执拗应该已经有了更客观的理解。能不能接受这些设计是另一回事,不过,很庆幸我们能够回归理性的对比上来。
现在我们看看其他的操作细节。在 LaunchBar 中,一切都是键入、键入再键入,偶尔敲空格或回车来选中和处理一些东西,但在 Alfred 里(可控的)操作细节就要丰富许多。
第一个讨人喜欢的细节就是搜索结果快捷键。在 Alfred 里,前几个搜索结果都会被绑上对应的快捷键,比如我同时装了 DEVONthink 的 2.0 正式版和 3.0 测试版,现搜 DEVONthink
出现两个结果,就可以按 ⌘Command-2
快速打开第第二个。搜索结果中可选项越多 Alfred 的这套快捷键就越好用,可以让手不必离开键盘输入区,尤其招“键盘流”用户喜爱。
第二个优点是每种功能都有自己的启动方式,容易区分和理解。最简单的在线搜索,想当然地输入关键词就好;至于搜索本地文件,比刚才开头多空一格而已;而处理文件,不用问也知道先搜出文件、然后调出所需动作……
但是 Alfred 触发方式的低理解门槛,到了后期是要以一部分管理成本为代价的。Alfred 为不同动作设置了各自专用的使用方式,我们把刚才提及的触发方式整理、拓展一下,不难看出典型的一套用法是:
- 处理文本:输入
待处理文本 动作名
。 - 运行命令:输入
> 待运行的命令
。 - 处理单个文件:输入
'关键词
搜到文件,再按⇥Tab
,接着输入动作名
来移交给指定动作。 - 批量处理文件:使用 Alfred 自带快捷键
⌥Option-⌘Command-\
,再通过动作名找到所需动作。 - ……
为了让不同类型的动作顺利运行,用户还要在 Alfred workflow 界面里另行设置一次不同的触发条件(Trigger):搜索是 Keyword,处理文件是 File Action,偶尔还要同上 Hotkey……不一而足。
相比之下,LaunchBar 的触发方式极其统一,这为日常的动作维护减轻了成本。单个文件、一打文件、一段文本、一个网页……不同类型的处理对象在 Alfred 里都分得较为清楚,不过这些东西在 LaunchBar 看来全是一样的,甚至要再加上一条:软件、脚本和自动化动作和它们也是一样的。这些都只是“参数”,自动化动作也是参数,可以丢给别的动作来处理——有点函数式编程的味道。
不懂这些术语也没事,只需知道 LaunchBar 不用手动区分所选对象类型——万一不真小心把图片丢给一个“统计字数”的动作——LaunchBar 自己会报错暂停就是了。对于有能力编写自动化动作的用户来说,动作要求宽松6的 LaunchBar 打理起来更加省心;当然,更高的理解门槛也正是 LaunchBar 比起 Alfred 所欠缺的。
从使用道具到吟唱魔法
在 DALL-E 和 ChatGPT 最热闹的那会儿,其标志性的输入框交互方式也遭到批评,被指为懒惰的交互界面。诚然,输入框缺乏提示——用唐纳德·诺曼的话说,“示能”(affordance)——使用者几乎全靠自己编写提示词(prompts);而个中高手,也被半开玩笑地称为魔法师——使用 ChatGPT 者,确实就像在吟唱魔法。
和黑箱(black box)7、超链接(hyper link)以及信息高度公路一样,人工智能的魔法隐喻也成了大众文化的一部分,只要你说一款软件会“学习”并达到一系列匪夷所思的效果,然后贴上一个“人工智能”的标签,多数人都不会继续追问,这实在不利于理解新事物。上一节不遗余力地对比 Alfred 和 LaunchBar,就是希望在技术乃至器物层面——即物质层面——介绍 LaunchBar,尝试把事情说清;一旦处理完比较底层的问题,就可以总结 LaunchBar 的优势:
- 相比 Alfred 等其他启动器,不需要预先设置缩写词(但也可以这么做)。
- 相比 Keyboard Maestro 等工具,不占用快捷键。
- 实现上述两项的是模糊匹配,只要输入了对象名称中的部分字符,即可启动它,例如想启动
neeva search
,neeva
、nees
和ns
等都可以; - 学习用户习惯,经年累月,越频繁打开的文件或软件、越频繁使用的自动化动作,在启动器列表中越靠前,最终达到人器合一的境界。
这一切,大概只能用吟唱魔法来类比。
后记
五年前,我写过一篇 LaunchBar 和 Alfred 的深度对比文章(因为著作权争议,我无法贴链接,好奇的读者可以私下找我),在我大大小小写过的几百万字中,那恐怕是投入产出比最糟糕的一篇:前前后后阅读了几千篇文章和贴子,亲自编写了几百个自动化脚本(比较成熟的还可以在这里下载到),但最终还是只能写出一篇自助餐式的文章——一切凭君好恶。
当时讨论启动器,样本实在太少,我只能对比 LaunchBar 和 Alfred,并且怀疑自己只是凑巧用上了 LaunchBar,就像和一个平庸的男人结了婚,事已至此只好凑合过。如今有了跨平台的 Utools,有了吃投资一口吃成胖子的 Raycast,而 Slack、Obsidian 和 Logseq 等知名工具都配备了启动器,再回过头来看 LaunchBar,事情就明朗许多。
我选择 LaunchBar 不是偶然,而是必然:在所有启动器工具中,LaunchBar 是唯一能够主动学习用户习惯的。早在人工智能闯入大众视野之前,LaunchBar 就用一种古典的“机器学习”方式,开辟了一支卓尔不群的启动器分支。
尽管看似有些远,但 LaunchBar 确实是当前人工智能支柱技术的早期践行者。当我洋洋洒洒,在笔下让 LaunchBar 与 Alfred 华山论剑之时,不曾想到,多年后的今天,当时删去没有发布的魔法隐喻章节,如今看上去竟然如此合理。“魔法”二字之于人工智能,已经成了乔治·莱考夫所说的死隐喻,司空见惯;今天的人们理解 LaunchBar,就像 EVA 的忠实粉丝去欣赏古典乐一样,毫无压力。
在机器学习时代,理解 LaunchBar 大概没有什么心理障碍,只要把“学习”这个黑箱砸到读者头上即可。莎士比亚的诗句已经融入街头妇女的骂战,结构主义死亡的标志是所有学科都采纳了结构视角,卡尔·马克思的器官隐喻经芒福德和麦克卢汉之手已然转生为“媒介即讯息”——您没吃过猪肉恐怕也见过猪跑。这绝不表示莎翁、福柯8和马克思的思想已经烂大街,相反,有志之士更应当关注这些大家,而不要止步于流行文化。
在人工智能真正脱离深夜情感热线和赛博春宫图阶段之前,或许 LaunchBar 这样的古典工具,仍然是成为数字魔法师的必由之路。
- 近几年,大量启动器新秀登场,但一律采用 Alfred 的基本逻辑,因此仍然可用 Alfred 带 代表 others。 ↩
- LaunchBar 的英文搜索和 Alfred 一样好,甚至常用文件夹取用起来更便捷,打几个首字母就能调出来。 ↩
- Pull/Push,为了降低理解成本我姑且称呼为“同步”。 ↩
- LaunchBar 确实也产自古典乐之国,德国。 ↩
- 另外,为常用动作设置缩写,比如通过“imgcv”启动“image convert(图片格式转换)”也是一种选择。 ↩
- 你可以让一个 LaunchBar 动作只用来处理文件,但不设置也不会出什么事儿。 ↩
- 源自维纳和阿什比的概念,指一个内部封闭的系统,只能通过观察输入输出来理解它。如今大部分的电子设备和软件,对于普通用户而言都是黑箱。 ↩
- 法国哲学家,结构主义的代表人物。 ↩