article_image

注:为追求最佳交互(快捷键),本文引入 Keyboard Maestro,但纯 LaunchBar 实现也未尝不可,无非将 LaunchBar 中的步骤翻译为 LaunchBar 脚本而已。

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

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

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

Alt text
即刻搜索文件夹,支持中文

>>LaunchBar 动作下载(GitHub)<<

动作使用

注意:Keyboard Maestro 会自动禁用所有从网上下载的 Macro,您需要先在 Keyboard Maestro Editor 中手动启用。

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

Alt text
Keyboard Maestro Trigger 部分

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

Alt text
不要勾选“Abbreviate home folder in copied file paths with tilde sign”

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

Alt text
即刻搜索文件夹,支持中文

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

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

Alt text
同时搜索多个文件夹

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

原理简析

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

  1. 运行 Keyboard Maestro Macro 后,通过模拟复制快捷键,获得当前 LaunchBar 中所选文件夹的路径,可单可多,Macro 中的大多数步骤主要负责处理多文件夹时的数据修整;
  2. 准备好目标文件夹的路径数据后,Keyboard Maestro 将通过 AppleScript 运行 LaunchBar 中的搜索动作;
  3. 该搜索动作预先从 Keyboard Maestro 变量中读取目标文件夹路径,输入框中仅需填写搜索关键词。
Alt text
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,后者问题在于非常不准确。我曾经漏掉过重要文件,一朝被蛇咬,永远不可能再相信它。确有需要、有能力的读者可参照契丹神童的方案修改代码4,以获得完整 Spotlight 搜索语法

小结

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

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

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


  1. 关于 LaunchBar 交互方式的解释,可参阅拙作《魔法师的召唤兽与麻瓜的药水瓶:LaunchBar 及其他启动器》
  2. 一方面,LaunchBar 每次只能从上一步接收一个或一组同类项的参数,而目标文件夹路径和搜索关键词并不同类,只能添加特殊符号作为分隔符、将两者组合为一段文本,再交由 LaunchBar 拆开并分别处理,繁琐且易出错;另一方面,当时用 AppleScript 写了脚本,而 AppleScript 在 Big Sur 之后就不兼容 LaunchBar Live Feedback 了,每次调整关键词都要关掉 LaunchBar 窗口重新激活一次,几乎没有任何实用价值。
  3. 法律和法规只是判断“效力性强制性规定”的必要条件,并非充分条件。当然,例外也有之,例如法律和法规授权制定的规章以及部分金融规章也可为之,凡此种种,在法律工作中固然需要特别注意,但远不至于令日常文件搜索手足无措。
  4. 即使用 mdfind 命令,此命令相当于 Spotlight 搜索的命令行版本。我在《macOS 文件管理指南》也有介绍。

author_avatar

Lawyer, macOS/iOS Automation Amateur