# 魔法师的召唤兽与麻瓜的药水瓶：LaunchBar 及其他启动器

> 本文公开全文。

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

我向来不喜欢轻易推荐工具，这大概是我一直在写杂文方面赚不到钱的原因。曾有读者问，能不能推荐几款装机必备工具？旋即有其他读者回应：Minja 只会给你推荐 Keyboard Maestro 和 DEVONthink，然后剩下的他自己写脚本解决。

不过我愿意给 LaunchBar 破例。管见以为，世界上只有两种启动器（Launcher），一种叫 LaunchBar，一种叫其他。这两者不是并列的，它们之间的距离，是魔法师的召唤兽与麻瓜的药水瓶之间的差别：魔法师可以对着一个空白的输入框吟唱魔法，从而召唤出任何强大的魔物；而麻瓜只会这里掏掏、那里找找，然后慌慌张张往外丢现成道具。

这篇文章初稿写于多年前的业余时间，当时觉得“魔法”隐喻过于晦涩，遂未发布。而今人工智能与魔法隐喻已经汇入流行文化，完全可以这样回过头介绍 LaunchBar：这是一款超前时代二十载的启动器，可以学习您的使用习惯，轻松打开任何文件、软件、网站或自动化工具等等几乎一切。

可惜，仅有上述说法实在不负责任，好像是普朗克所说的观念接受过程：旧一代人死光了，新一代人成长起来，于是新科学就被当作自然而然。或许还是从 LaunchBar 和 Alfred 旷日持久的对立说起，方能还历史原貌。

## 从在喉之鲠谈起

LaunchBar 在启动方式上是绝对的小众，以至于关于 Alfred 和 LaunchBar 使用方式差异的讨论很容易变成针对 LaunchBar 一方的抨击或热捧。一定程度上，我也赞同应该聚焦 LaunchBar 的特点，但更重要的是离开打成一团的人群、冷静想想它为何这样设计，而非进去站队。

本节将先尝试回答“不能输入中文”和“无法删除已输入文本”这两个“LaunchBar 特色”，之后再回到和 Alfred 的操作细节对比上去。

### 第一个槛：LaunchBar 不支持中文？

关于 LaunchBar 不支持中文的抱怨多见于搜索系统文件和启动中文名应用时，可见这是不少新手对于 LaunchBar 的一个心结。

如果单说中文——其实也包括别的东亚字符——实际情况是 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 仓库，可以把同步的快捷键全设成一样，敲完后接着按仓库名首字母同步指定仓库。

说回 LaunchBar，它的“模糊匹配”和快捷键在操作上非常相似：你只管一直输一直输，万一出错就敲 ⎋Esc 重来。更进一步，LaunchBar 的模糊算法不要求把项目名输入齐全，打一部分就能弹出可选项目，使用中需要推倒重来的情况并不多（我的 ⎋Esc 键坏了，用改键工具自己设置了一个，所以有使用记录——基本是日均个位数）。在很多写到 LaunchBar 的文章里，我更愿意使用“键入”而非“输入”来描述 LaunchBar 的启动方式，就是为了和 Spotlight、Alfred 等工具区分考虑，强调 LaunchBar 和快捷键的类似之处。

早在使用 Automator 和 Alfred 时，我在每个工具里就各拥有 100 多个常用自动化动作（部分在 这里），即便耐得住性子给所有动作设置缩写，也基本不可能全部背下来。

在整个工作流高度依赖 Automator\+Alfred 的情况下，我转到 LaunchBar 的原因就是后者支持模糊匹配，不需要记缩写，如果不是读者 @blithe 提醒，我估计不会想到 LaunchBar 实际上也能设置缩写。如果说 LaunchBar 是一台浪漫的三角钢琴那么其他启动器，只能算是质量还不错的投币式电唱机。

读到这里不难发现，“不支持中文”和“不准删除”其实是同一枚硬币的不同侧面：LaunchBar 吸收了快捷键的部分特性，便于你形成肌肉记忆，Type less but access more。这种操作需要一个下午乃至几天的成本来习惯，如果真的跟不上，可以试试把 LaunchBar 的延迟时间调久一点——只是，最好早日拆掉辅助轮，否则就说明 LaunchBar 是真的不对你胃口。

末了，本节开头的问题甚至可以改改用来反问关于 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 自己会报错暂停就是了。对于有能力编写自动化动作的用户来说，动作要求宽松的 LaunchBar 打理起来更加省心；当然，更高的理解门槛也正是 LaunchBar 比起 Alfred 所欠缺的。

## 从使用道具到吟唱魔法

在 DALL\-E 和 ChatGPT 最热闹的那会儿，其标志性的输入框交互方式也遭到批评，被指为懒惰的交互界面。诚然，输入框缺乏提示——用唐纳德·诺曼的话说，“示能”（affordance）——使用者几乎全靠自己编写提示词（prompts）；而个中高手，也被半开玩笑地称为魔法师——使用 ChatGPT 者，确实就像在吟唱魔法。

和黑箱（black box）、超链接（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 大概没有什么心理障碍，只要把“学习”这个黑箱砸到读者头上即可。莎士比亚的诗句已经融入街头妇女的骂战，结构主义死亡的标志是所有学科都采纳了结构视角，卡尔·马克思的器官隐喻经芒福德和麦克卢汉之手已然转生为“媒介即讯息”——您没吃过猪肉恐怕也见过猪跑。这绝不表示莎翁、福柯和马克思的思想已经烂大街，相反，有志之士更应当关注这些大家，而不要止步于流行文化。

在人工智能真正脱离深夜情感热线和赛博春宫图阶段之前，或许 LaunchBar 这样的古典工具，仍然是成为数字魔法师的必由之路。

---

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