# 让 LaunchBar 支持中文文件搜索

> 本文公开全文。

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

“LaunchBar 不支持用中文搜索文件”乃亘于中文用户眼前的最大门槛，也给了其他启动器（Launcher）工具机会。其中误会之深，恐怕三言两语解释不完，只能径下结论：LaunchBar 有两种模式，一种是导航（Navigation），一种是搜索（Search），而其他启动器一门心思钻研后者。笼统批评 LaunchBar 不支持中文，纯属以偏概全，人云亦云。

但一码归一码，应然与实然尚有一段距离，开发商忽视中文市场也是事实，中文搜索全靠民间人士自力更生。中文圈老玩家 @契丹神童 写过一个全局搜索动作，惜乎该动作依托 Spotlight 索引，搜索结果全凭运气。另外，总是全局检索，似乎网撒得太大了些，我遂写了一个动作，瞄准当前 LaunchBar 中已选中的文件夹，但囿于 LaunchBar 自身限制，交互不便。

在积累了控制 LaunchBar 的更多经验后，我结合另一款自动化利器 Keyboard Maestro，重新设计了 LaunchBar 中文文件搜索动作，以求：（一）支持中文，实际上支持任何语种；（二）轻松搜索 LaunchBar 中浏览到的任何一个文件夹，兼顾导航之迅猛和搜索之全面；（三）多文件夹批量搜索，节省时间；（四）快捷键操作，比纯 LaunchBar 更快。

\>\>LaunchBar 动作下载（GitHub）\<\<

## 动作使用

本方案由两部分的动作组成，分别为 Keyboard Maestro 启动动作和 LaunchBar 搜索动作，搜索最终在 LaunchBar 中完成。在 Keyboard Maestro 这边，为避免快捷键冲突，本 Keyboard Maestro Macro 使用 USB device key 而非快捷键，您在安装后需前往 Keyboard Maestro Editor 检查 Trigger 是否与下图一致，如果作为触发机关的字母 F 丢失，请点击“This USB device key”下方的输入框，再录制一次 F 键。

至于 LaunchBar 那边，还需要在 Advanced 设置中取消勾选“Abbreviate home folder in copied file paths with tilde sign”，以便 Keyboard Maestro 可以获得目标文件夹的完整路径。

万事俱备——中途如需要您授权自动化权限，请遵从提示——现在，可以在 LaunchBar 中导航至任何一个目标文件夹，随后连按两次 ⌘Command\-F，进而进入搜索界面，此时搜索范围即被限定为方才导航所至的文件夹。

选择双击 ⌘Command\-F 作为触发机关，是为继承平时搜索文件的快捷键 ⌘Command\-F，以求连贯。虽说在技术上完全可以继续使用单击 ⌘Command\-F，但为避免冲突而要考虑的工程细节甚巨，并不经济，故退而求其次，以双击代之。关于 Keyboard Maestro 的快捷键设计，冒昧推荐拙作《Keyboard Maestro 进阶指引》。

除了搜索单个文件夹，鉴于 LaunchBar 本身支持批量处理，故亦可多选文件夹以便批量检索多处。具体方法一如在 Finder 中多选项目，即按住 ⌘Command 键的同时点选文件夹，随后连按两次 ⌘Command\-F，再照常搜索。

多文件夹搜索系进阶操作，也是第三方搜索工具 HoudahSpot 的杀手锏——不过我和 Hum 分别找到了替代方法，且考虑到 HoudahSpot 依赖薛定谔的 Spotlight Index，我本人极度不推荐此软件——我在检索本地法条时就常常批量搜索。例言之，民法上有“效力性强制性规定”一说，其大范围划定在法律和法规两类文件中，其他机构制定文件一般不可，故在搜索相关依据时，我会先划定范围于前述两个文件夹，再进一步检索，避免遗漏，也免得误将类型错误的文件列入。

## 原理简析

本文方案涉及 Keyboard Maestro 和 LaunchBar 两款工具，来回交互细节复杂，不过原理却非常简单，大致流程如下：

- 运行 Keyboard Maestro Macro 后，通过模拟复制快捷键，获得当前 LaunchBar 中所选文件夹的路径，可单可多，Macro 中的大多数步骤主要负责处理多文件夹时的数据修整；

- 准备好目标文件夹的路径数据后，Keyboard Maestro 将通过 AppleScript 运行 LaunchBar 中的搜索动作；

- 该搜索动作预先从 Keyboard Maestro 变量中读取目标文件夹路径，输入框中仅需填写搜索关键词。

为两边的动作能够相互衔接，如您修改任一动作名称，请在另一侧相应调整。如更改了 LaunchBar 动作的名称，请在 Keyboard Maestro Macro 的“Execute AppleScript”模块中更新名称，将以下代码中的 Search in Current Folder 改为新动作名。

```
tell application "LaunchBar"
    perform action "Search in Current Folder"
end tell
```

LaunchBar 也需要调用 Keyboard Maestro 中的变量，一般而言不会出错，除非你还有其他 Macro 也占用了 filaPath 这个变量名。如确实如此，可考虑将 Keyboard Maestro Macro 中的 filaPath 变量更名，并对应调整 LaunchBar 脚本中获取变量的部分。

```
tell application "Keyboard Maestro Engine"
set kmVar to getvariable "filePath"
end tell
```

## 局限

由于个人意识形态倾向问题，本方案非常朴素，仅支持搜索文件名。

本方案的搜索部分基于 find 命令，不依赖 macOS 专有的 Spotlight Index，后者问题在于非常不准确。我曾经漏掉过重要文件，一朝被蛇咬，永远不可能再相信它。确有需要、有能力的读者可参照契丹神童的方案修改代码，以获得完整 Spotlight 搜索语法。

## 小结

LaunchBar 之所以有魅力，在于其根子上的 Unix 精神，LaunchBar 中的一切都是原子化的模块，模块组合成无数工作流，上一步的输出交予下一步作为输入。单向管道模型，简洁如斯，却千变万化，如同复杂的交通网络。

不过，单向的数据流动不意味着狭隘的输入方式。至少自《快马加鞭，用快捷键加速 LaunchBar 的常用功能》以降，虚拟快捷键、模拟按键乃至 AppleScript 轮番登场，LaunchBar 的单向管道隐喻理应被打破，再无必要死守一条道走到黑的 Unix 传统。何况 Unix 也早已引入重定向机制，早就不是一根水管通到底了。

惟需注意，新的自动化方式属于模块衔接方面的结构性调整，断不会打碎原子化的动作单位。易言之，LaunchBar 获得了一类有机大分子，但是它的物理学并未改变，仍然简洁优美。至于填补中文搜索的空白，只是上述新思路的牛刀小试罢了。

---

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