看起来很复杂的 DEVONthink 搜索,用 Alfred Workflow 就能轻松搞定

DEVONthink 作为一款资料管理工具,在 macOS 平台上久负盛名。在 DEVONthink 的官网上,它是这么介绍自己的:Information management reinvented(重新发明信息管理)。 DEVONthink 可以统一保存、管理和检索各种常见格式的文档,包括但不限于 Office、PDF、网页书签等。而且, DEVONthink 还能关联、聚合相关文档(不支持中文),所以有许多人用它来作为学术工具使用。另外, DEVONthink 还支持 Dropbox、iCloud、WebDav 等多种同步方式,充分满足不同人群对于同步的需求。少数派网站上有多篇优秀的使用经验分享文章,有兴趣的可以看看。

延伸阅读:从 Evernote 到 DEVONthink
5 个实用脚本,把 DEVONthink 打造成个人知识库

起初我开始使用 DEVONthink 时,在官网上看到有 用于搜索的 Alfred Workflow,试用时却发现已经年久失修,早已不适配 2016 年发布的 Alfred 3。于是,我就拿来修改了一番,形成了 第一个版本。但是这个 Workflow 只能用 DEVONthink 打开搜索结果中的文档,这不能满足我的使用需求,所以在修复原有功能的基础上,我为它添加了两个功能:

  • 用外部程序打开文档,比如直接用 Word 打开 docx 文件等

  • 在 DEVONthink 中显示文档,就像常用的「在访达中显示」,用于在 DEVONthink 中执行一些后续的操作

但是,前段时间我又发现了这个 Workflow 的两个问题:

  • 搜索结果不够好,往往不能快速又准确地搜到自己想要的文档

  • 显示信息很单一,有效信息仅有文档名称,导致无法区分不同文件夹的同名文档

DEVONthink Search 全新版本

旧版本的 Alfred Workflow 效果不理想,所以我就试着能否改进下,就有了今天介绍的新版本。

由于新版本使用了与之前完全不同的数据来源和实现方式,无法支持 DEVONthink Personal,所以分成了两个版本来实现不同的功能:

  • DEVONthink Search:适用于 DEVONthink Personal,就是原有的 Workflow 去除了 Personal 版本所不支持的多余功能,仅支持使用下文中介绍的 dnt 动作进行搜索。

  • DEVONthink Pro Search:适用于 DEVONthink Pro / Pro Office,搜索结果更准确,功能更丰富。这也正是今天介绍的主角。

你可以在 GitHub 下载相应的 Alfred Workflow。然后,我们来看下如何使用。

1. 输入 dnt + 关键词 在所有数据库中进行搜索。如果同时使用这个 Workflow 和在 DEVONthink 中直接进行搜索,可以看到搜索得到的结果基本一致,并都按照搜索关键词匹配得分进行排序。不同的是,这个 Workflow 默认过滤了结果中的文件夹。

从上图的搜索结果中可以看到,每一个结果的副标题显示了目标文档所在数据库中的文件夹路径,这也就解决了同名文档无法区分的问题。当按下 ⌘Command 时,则显示为当前选中文档的标签信息 (Tag)。

2. 输入 dnm + 标签1,标签2,……,可以列出所有数据库中同时附有这些标签的文档。如果平时有加标签的习惯,使用这个功能可以很方便地得到某一类的文档。

需要注意的是:多个标签要以英文逗号分隔,而且标签必须是准确完整的,如标签“aBcD”,不能输入“aBc” 或 “abcd”。

3. 输入 dnd 选择需要搜索的数据库,这个功能对于使用多个数据库管理文档的用户比较有用。在选择需要的数据库后,可以:

  • 按下 ↩Return 确认,接着输入 关键词 以在该数据库中进行搜索

  • 按下 ⌘Command + ↩Return 列出该数据库中的所有标签。选择某个标签并按下回车键,可列出所有附有该标签的文档

在使用上述动作并成功显示搜索结果后,你可以继续使用以下动作:

  • 按下 ↩Return,用 DEVONthink 打开所选文件。(当你仅需查看文件时,可以使用这个动作)

  • 按下 ⌘Command + ↩Return,用外部程序打开所选文件。例如,使用默认编辑器打开 Markdown 文件,使用 PDF Expert 打开 PDF 文件等。(当你需要编辑文件等情况下使用这个动作)

  • 按下 ⌥Option + ↩Return,在 DEVONthink 窗口中显示所选文件。(当你需要在 DEVONthink 中操作文件时使用)

三种不同的打开方式

配置

动作 dntdnm 是在所有数据库中搜索,但是有时我们可能需要屏蔽某些数据库。例如,我有个名为「存档」的数据库,用来保存一些历史文件或备份一些网络上的网页或资料,平时一般不会查看,也就不需要出现在搜索结果中。所以,我为这个 Workflow 添加了个相关的配置项。

如果你想要屏蔽某些数据库,可以这么做:

  1. 打开 DEVONthink,在界面左侧右键点击某个数据库,选择 Copy Database Link,获得类似于 x-devonthink-item://abfds-fdsfsff 的链接。

  2. 链接中的 abfds-fdsfsff 部分就是该数据库的 UUID。

  3. 如果仅屏蔽一个数据库,直接在如图所示位置填入 UUID 即可。如果是多个,则以英文逗号分隔后填入,如 xxx-xxx,xxx-xxx

配置

其它

在开发过程中,因为 Alfred Workflow 需要 JSON 格式的数据,但是 AppleScript 不支持,所以只好转而使用 JXA(可以将其看作具有 AppleScript 功能的 JavaScript 版本)。JavaScript 原生支持 JSON,并且可以摆脱 AppleScript 那种「类似自然语言」的语法形式,这让我非常开心。但是在编写根据标签搜索的功能时,没想到竟遇到一个 Bug,无法获得搜索结果。于是,给 DEVONthink 官方发邮件,结果回信说不对 JXA 方面提供帮助,可能他们也知道 JXA 在 macOS 中不受重视,且存在各种 Bug。

当你在 DEVONthink 中搜索时,如果关键词中包含 CJK 文字(中国、日本、韩国),则需要在其前面加上~。例如,搜索你abc我他,需改为~你abc~我他。在 DEVONthink Pro Search 这个 Workflow 的设置中,我使用正则表达式 /(\p{Unified_Ideograph}+)/ug 找出中文字符并自动添加~,免去了每次手动添加的麻烦,但是该正则表达式无法匹配日韩文字,我对其也不太了解,请懂得相关正则表达式的帮忙改进下。

原来的 Alfred Workflow 版本是利用 DEVONthink 生成的 Spotlight Index 来实现搜索的,可获取的数据非常有限。而我制作的新版本选择直接从 DEVONthink 中读取数据后,可获取的数据与可完成的操作就非常多了,并且还有很大的成长空间。下一步,我还计划为它添加筛选出未读文档的功能,对于使用 DEVONthink 做稍后读等用途的用户可能会比较有用。如果你有什么需求也可以说出来讨论下。

这个 Workflow 在 GitHub 上开源,欢迎下载使用、共同改进。

> 下载少数派 客户端、关注 少数派公众号 ,让你的工作更有效率 ⏱
> 获取特惠、正版、高品质软件,尽在 少数派数字商城·正版软件 🎉