Quantcast
Channel: 少数派
Viewing all articles
Browse latest Browse all 13772

什么情景该做什么任务?用 Todoist 灵活的过滤把它们筛选出来

$
0
0

玩转系列是王掌柜长期更新的系列文章,主要通过各种事例介绍应用或服务的使用方法,今次玩转系列更新到 Todoist,我们通过几个常用的过滤规则入手,一起玩转 Todoist。

为什么是 Todoist

GTD 理念的盛行使得市面上的充斥着众多 GTD 软件,他们各自都有特点,适合不同的场景,我用过的就包括 OmniFocus 、Things 和 Todoist 等软件,为什么选择了 Todoist 呢?下边列出它优秀的功能供大家参考。

1. Todoist 对「自然语义」的支持非常强大

自然语义,指的是我们可以像说话一样创建提醒任务,比如我们完全可以用「明天下午 3 点,提醒我打印材料」创建任务, Todoist 会很精准的创建一条提醒任务,任务标题为「提醒我打印材料」,任务的完成时间为「第二天下午 3 点」如图:

null

2. Todoist API 接口非常丰富

丰富的 API 代表着 Todoist 可以很好的被 IFTTT、Zapier、Drafts 5 等众多支持 URL 请求的应用或服务支持,极大的扩展了我们录入任务的方便性,并为「自动化」做好了基础准备。

Todoist 官方文档提供了非常详细的 API 使用说明,如图:

null

我们可以通过官方提供的 API 完成以下任务:

  1. 快速创建任务。
  2. 同步(可以同步整体数据库,实现一个任意版本的 Todoist)。
  3. 创建项目/标签。
  4. 上传任务附件。
  5. 创建过滤规则。
  6. Webhooks(可以监控任务的状态进行下一步操作等,类似 IFTTT)。

基本上利用这些 API,你能想到的场景 Todoist 都提供了。

3. Todoist 有良好的中文支持

刚才讲「自然语义」时举的例子可以看出,Todoist 对中文日期比如明天、后天、下周一、每天、每月等都能智能识别到,这对我们创建任务来说非常简单。

另外,Todoist 的帮助文档中文支持的也非常好,如果你喜欢这个软件,只需看帮助文档就能入门,甚至得到提高。

特别是涉及到后边讲的过滤,我们完全可以通过它的文档掌握语法和技巧。

4. Todoist 「过滤」功能非常强大

过滤对于任务管理软件有许多作用,但我认为最重要的作用就是把任务「场景化」。

有不少人对「场景」的概念只停留在地点这一个维度,比如大家普遍认为「在家里」和「在办公室」都是场景,顺着这个思路,如果想要找到「在家里」和「在办公室」两个场景的任务,根本不需要用到过滤这么复杂的功能,我们只需要给任务设置「项目」或者「标签」 ,以标签为例,当我在家的时候找到「标签=在家做的任务」的任务即可,如图:

null

然而,实际上一个「场景」它一定是包含时间、地点和人物,三个元素的,我们以在办公室为例:

事例 1:当我在办公室的时候,我想找出哪些事情是今天我需要处理的。

在事例 1 中,当我们身处办公室这个场景的时候,如果只靠「标签 = 在办公室」找出任务来,你一定是崩溃的,因为这里边混杂着「今天要完成的」、「将来要完成的」、「已过期未完成的」、「定期循环的」多种任务,我相信你一定想要的是需要「今天要完成的」和「已过期未完成的」,如图:

null

根据常识,当我们真的坐在办公室的时候,要处理的任务为以下条件:

  1. 任务标签为「在办公室的任务」。
  2. 任务状态为「已过期的」或者「今天到期的」。
  3. 还包括满足条件 1 和 2 的循环任务。

简单归纳一下,当我们坐在办公室的时候,希望筛选出来已过期的或者今天到期的任务(包括循环任务),且标签为「在办公室的任务」

那么如何设置过滤条件,完成事例 1的要求呢?接下来咱们一起来玩转 Todoist 过滤。

玩转 Todoist 过滤

简单介绍过滤功能,就是将多个查询条件组合在一起,最后找到我们想要的任务。事例 1 中,我们已经归纳好条件为:已过期的或者今天到期的任务(包括循环任务),且标签为「在办公室的任务」。接下来我们线连接一下 Todoist 的过滤支持哪些规则。

过滤器支持哪些规则

  • 截止日期:
    null
  • 优先等级:p1,p2,p3,无优先级:
    null
  • 标签:@标签名称、无标签:
    null
  • 项目&子项目:#项目名称、##项目名称:
    null
  • 任务的创建日期:
    null
  • 共享项目&任务接受人/分配者:
    null
  • 关键词:
    null

创建「过滤器」

在界面中找到过滤器,点击右侧的 + 弹出创建菜单,输入过滤器的名称和规则以及颜色即可。看起来非常简单,但是这里最难的一步就是填写规则。

Todoist 的过滤器规则符合逻辑运算原则。简单说就是通过「与」「或」「非」等进行逻辑计算,我们通过事例 1来说明一下。

1. 分析规律规则:

根据我们的过滤规则:「已过期的或者今天到期的任务(包括循环任务),且标签为在办公室的任务」 。

在 Todoist 中规则中的各个条件对应的关键字如下:

  • 已过期:overdue(中文「过期」)
  • 今天到期:today(中文「今天」)
  • 循环任务:recurring(中文「循环截止日期」)
  • 在办公室的任务(为了方便讲解,我们用 work代表「在办公室的任务」这个标签):@work

以上列表中我们分别给出了「英文关键字」和「中文关键字」,出于以下两点,接下来的内容我将用「英文关键字」来举例说明:

  • 原因 1:英文关键字简洁明了,非常适合进行逻辑运算,读起来也比较顺畅。
  • 原因 2:如果用中文关键字创建「过滤规则」,不排除在某些时候遇到不能识别的问题,王掌柜就遇到过,最终全部换成「英文关键字」解决的。

2. 进行逻辑运算,制定过滤规则

这一步非常关键,通过逻辑运算制定规律规则,在 Todoist 中使用通用的逻辑规则符号如下:

  • 与 :&
  • 或 :|
  • 非 :!
  • 分组 :()

接下来我们根据关键字和运算符,制定自己的过滤规则。

规则拆分如下:

null

上图 ①︎ 中,我们将规则拆分成一个个关键字。

上图 ②︎ 中,我们将规则拆分成两部分,分别是:

  • 已过期的或者今天到期的,且在办公室的任务(@work)
  • 已过期的或者今天到期的「循环任务」,且在办公室的任务(@work)

转换成「逻辑运算」分别为(对应上图 ②︎ ):

  • (overdue | today) & @work
  • (overdue | today) &recurring & @work

由于两部分的关系是「或」,所以最终的过滤规则为(对应上图 ③︎):

((overdue | today) & @work) | ((overdue | today) & recurring & @work)

最终我们得到了要过滤的「规则公式」,最终的设置界面,如图:

null

创建第二个过滤规则

为了便于大家理解,我们再举个例子:

事例 3:过滤出所有需要现在解决的循环任务。

在 Todoist 中我们经常会创建一些「循环任务」,当有一个循环任务提示我们要处理,我们忘记处理后,他不会出现在每天的任务清单里,而是变成过期任务存在,这时就需要一个过滤器,过滤出「所有需要今天解决的循环任务」。

所以我们的过滤规则为「所有需要今天解决的循环任务」。解析来我们还是用老办法分析一下:

null

上图 ①︎ 中是我们的初时规则「所有需要今天解决的循环任务」。

上图 ②︎ 中我们将规则进化成「截止日期为已过时或者今天的的循环任务」,它们的关键字为:

  • overdue | today
  • recurring

转换成「逻辑运算」为(对应上图 ③︎ ):

(overdue | today) & recurring

总结

今天是玩转 Todoist 系列文章的过滤篇,我们首先是讲一下 Todoist 的优势,然后引出来「过滤」的重要性,最后通过两个事例实际操作创建了连个过滤规则。通过今天的文章,大家应该对过滤规则有了一些认识,如果看起来比较吃力的话,应该是卡在了「逻辑运算」这里,因为「逻辑运算」是编程范畴的内容,Todoist 很好的把它引入到「过滤」这个规则中,虽然有点复杂,但是一旦熟悉了规则,用起来可谓得心应手。

为了便于大家真正的掌握 Todoist 的过滤,我再给大家一些已经制定好的过滤规则供大家参考:

  1. 明天的工作(在办公室的任务):(tomorrow & @work) | (tomorrow & recurring & @work)
  2. 将来要做的工作:no date & @work
  3. 没有标签的任务:no labels
  4. 未来 3 天的任务:3 days & @work
  5. 未分配任何人的任务:!assigned

>还没找到合适的任务管理工具?免费领 Todoist 一年高级会员试试☑️

>下载 少数派 iOS 客户端、关注 少数派公众号,让智能设备更好用 💪


Viewing all articles
Browse latest Browse all 13772

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>