在我关于任务管理的两场知乎 Live 和之后的 Todoist 的教程里,我都把「过滤」这个功能称为「现代工具与传统工具的分界线」。这个说法是为了体现过滤在现代任务管理工具中的特殊作用,从而引起对这个概念尚不熟悉的人对它的重视。
后来和 Anki 作者 Windy 讨论教程思路时,他提出了 Anki 中搜索的模糊性和过滤的严格性——搜索中:一个并不完全正确的搜索语法也可以出现些许模糊匹配的结果;过滤中:如果按照同样不正确的语法来制作过滤,则不会有匹配到的结果;审 Evernote 的付费教程时,作者 Louiscard 在文中提到 Evernote 里「切换到(Switch to…)」这个概念同样是很多优秀软件都具备的,便利程度非常高的功能。
这两次沟通,搭配上之前的过滤,让我意识到:围绕着信息提取效率,有一条隐隐的线是杰出的现代工具都要具备的,这条线上的三个关键点就是——搜索、过滤和启动器。它们乍一看关联不大,但实际上背后倚靠的都是相近甚至是相同的语法,目的都是为了快速提取信息。
高级搜索(Advanced Search)
当软件、文件多到一定地步时,传统的图形界面反而会成为累赘:因为我们用肉眼一次性不能过滤太多信息。但通过搜索,我们却可以瞬间从茫茫信息中瞬间定位到符合要求的那一个。
如今搜索已经成了大多数操作系统、带有文件库(Library)属性的软件的标配,所以搜索的作用已经没有人感到新鲜了,⌘Command-F 打开搜索框,就可以直接输入自己需要搜索和匹配的信息。但不少基础的用户不知道,很多优秀的工具在搜索之上都提供了进阶的搜索语法(一般被称为「Advanced Search」),这种语法可以帮助我们更快地定位信息。
这些纯粹的网络服务,给了我们一个完整的搜索界面,在这个界面里,我们可以根据自己的需要来选择自己的搜索条件。比如我要在 Twitter 搜索我看到的一条来自他人的推文,我想不起来完整内容了,但是我知道是谁发的、大概是几月发的、还知道有哪个关键字,三个点串起来,可以把搜索范围缩小很多。
高级搜索语法(Advanced Search Syntax)
前面两者由于是网络服务,所以可以提供完整的搜索条件页面,但是有很多软件介于服务和应用之间,比如 Gmail 和 Evernote,它们很难直接提供一个搜索条件页面,这时候的一个补救措施,就是搜索语法。
注:「语法」的英文有很多,在这个情境下用的词是「Syntax」,一般软件、计算机工具的语法都会用这个词,不知道一个工具的进阶搜索语法是什么,用 Syntax 这个关键字搜很有效。
在网页端的 Gmail、或者 Airmail 等段位比较高的第三方邮件客户端,都可以通过在搜索栏中,按照 Gmail 的搜索语法来进行搜索,达到精准筛选邮件的目的。比如你想知道今年(2018)在苹果花了多少钱,国区的搜索语法就是:
from:no_reply@email.apple.com after:2018/01/01 "apple 提供的收据" OR "your invoice from apple"
这一句里:
from:no_reply@email.apple.com 表示的是来自 no_reply@email.apple.com 这个地址,也可以用联系人名来表示,但我一直直接用邮箱;
after:2018/01/01 表示的是范围缩小到 2018 年之后的邮件;
"apple 提供的收据" OR "your invoice from apple" 是说,包含 「apple 提供的收据」 或 「your invoice from apple」 的邮件。因为我也不知道为什么,Apple 有时候给我发的是英文有时候给我发的是中文。
这句里中间的 OR 是精髓,因为这个语法本身隐含了一个背景条件,是三个条件同时成立。而 OR 在这三个条件里的第三个条件里加了一个任一成立的情况,也就是说,是「apple 提供的收据」或者「your invoice from apple」的情况下,都对。
像是 Gmail 搜索语法中的 from:、after:,还有 Evernote 搜索语法中特有的 intititle:、notebook:,还有更常见的 OR、AND 这些,都是 Operator(运算符、操作符)。高级语法的本质就是记住这些操作符,有很多自称是自然语义的服务,譬如 Fantastical、Todoist,实际上使用的就是这种操作符,而并非使机器真正理解了我们的语言。
所以我看到一些类似于「Evernote 是否支持自然语义搜索」的问题,实际上是不准确的,因为 Evernote 和现在这些商业软件中用的所谓自然语义,都是通过操作符实现的搜索语法。
进而,当这些公司是英文背景的时候,自然就会更完善英文的操作符。所以「某某某软件中文的自然语义支持得不好」这种问题也偏离了问题的实质。
从真正的人类交流那种自然语义层面,中文的实现难度我想要比英文大很多,但是如果是运算符层面的话,中文的实现难度估计就没那么大了。真的做出来不管是自用还是开源出去成为共同标准,都是大功一件,只是看有没有公司愿意踏实地做好这件事了。
从搜索到过滤
读到这,相信很多人已经可以看出来,搜索和过滤之间是一层窗户纸的关系,一点就破——过滤就是把搜索的结果进行了保存。
图形界面的过滤同样基于搜索语法
如果你和我一样之前没有意识到这一点,很有可能是因为被过滤的图形界面给迷惑了。图形界面将搜索语法中的运算符改为了一个个的选项,关联就没有直接从搜索到搜索语法那么紧密,但如果我们仔细看,还是可以看出端倪。比如我想用一个 Smart Playlist 把我最近在 iCloud 里添加的 High 的音乐笼到一起,它的条件基本是这样的:
这里有个小技巧先讲一下,在 macOS 里,过滤的条件背景是要么 AND(符合所有标准) 要么 ANY(符合任一标准),如果想做到上图这样在 AND 里包含 ANY 的,需要在选择添加条件的那个加号 + 时,按一下 ⌥Option 键:
如何在 AND 中使用 ANY
纯粹由搜索语法实现的过滤
任务管理软件里的 2Do 和 Todoist,实际上都是直接由搜索语法实现的过滤:
2Do 表现得最为明显,因为它的过滤就是直接保存搜索结果的形式(在这点 Evernote 也是一样)。不过与此同时,它为了方便对语法畏难的基础用户,也保留了图形界面。
而在 Todoist 里,按下 f 键的搜索和过滤中的条件完全是通用的,比如说我想找到所有指派给我的任务,我可以搜 assigned to: me,也可以做一个过滤,里面的语法部分同样是 assigned to: me。所以当初在 Todoist 的 iOS 端不支持搜索时,可以通过做个临时的过滤来救急。
这种由搜索语法实现过滤的方式我个人是比较推崇的,它减少了用户学习的成本,对于 Power User 来说,只要记住了一种语法,就可以同时掌握搜索和过滤的诀窍。对于开发者来说,如果使用同一套语法规则也肯定可以减轻开发难度。
启动器
相信到了这里我已经阐明了我的观点:高级搜索语法和过滤实质上是一样的东西,只是表现的形式有所区别,基本可以理解为:过滤是一组搜索结果的保存。根据软件用途、特性不同,对于过滤的位置安放也有一定区别:比如任务管理工具,会给过滤一个优先度很高的位置,而 Evernote 这样的工具则是有一个「保存搜索」的功能,随后在使用搜索框时会有提示。
插一下 Evernote 如何实现保存搜索(官方文档页): 那么搜索和过滤和文首提到的「启动器」这个概念有什么关系呢?我们还要回到文首提到的那个问题来:
对于 Power User 来说,在提取信息时实际上是两个步骤:筛选信息和打开结果。筛选信息要用到的是搜索和过滤,而打开结果最快的就是通过启动器了。当你搜索完毕后,鼠标移动后再双击也远不如输入后敲回车那么过瘾。
所以如果你希望成为一个操作系统的 Power User,整体提高你使用计算机的效率,提高你使用进阶软件的效率,「启动器」都是一个避不开的选择。
启动器是我临时为这样的功能起的统一的名字,在 Evernote、Ulysses、OmniFocus、Slack 等软件里都存在这这样的功能:
这个功能本质上就是弹出了一个搜索框,在搜索之后,它的第一个结果是被选中的状态,所以搜索之后按下回车就可以跳转到搜索结果,还可以用方向键选择结果再按回车跳转。
很多工具对这个功能进行了一些特殊的改良,比如在 Slack 里(快捷键是 ⌘Command-K),它会自动把未读的信息排在上面,不知道能节省多少操作的时间。
但是令我觉得遗憾的是,大多数工具并没有把这个位置视为一个高级搜索的入口。还是拿 Slack 来举例子,我们虽然在这里是搜索,但是并不能搜索信息,只能搜索频道与用户,如果想搜索信息,还是要在软件右上角的搜索框里进行。
但是有没有做得到位的呢?有,macOS 就把高级搜索语法做到了 Spotlight 里(文档页)。 通过搜索类型和关键字,我把搜索结果极其精确地缩小到了几个聊稿录音中。
结语
Spotlight 支持高级搜索语法算是为我整条思路的最后一截提供了一个例证。各个软件在这个功能上的命名方式也很不统一:Evernote 叫「切换到(Switch to…)」、Slack 叫「跳转到(Jump to…)」……所以,这个功能是否应该叫「启动器」还值得商榷。
但总而言之,这整篇文章记录的是我对基于文档库(Library)的「现代工具」的一个新的思考:此类工具都应该支持规范的高级搜索语法、过滤以及启动器的功能,而且它们背后的语法应该是统一的。这也会是我判断一个工具是否优秀时的一个重要的参考标准。
不知道你对我的这个思考是怎么看的?它让你产生了共鸣还是异议?欢迎在评论里告诉我。