在 Obsidian 中,Tasks 插件无疑是最强大的任务管理工具之一。它能将你的笔记库变成一个动态、可查询的任务系统。而其真正的力量,来自于 Queries(查询) 中的 Filters(过滤器)

本教程将带你深入理解并掌握 Tasks 插件的过滤器,让你能像数据库专家一样,精准地筛选和展示你需要的任务。

1. 什么是 Tasks 插件查询和过滤器?

简单来说:

  • 查询:你向你的笔记库提出的一个问题,例如“给我看看所有未完成的任务”。
  • 过滤器:构成这个问题的具体条件,例如“任务必须是未完成的”、“任务必须包含 #工作 标签”、“任务截止日期是今天”。

你可以在任何笔记中使用 代码块 来执行查询,Tasks 插件会实时渲染出结果。

```tasks
(这里是你的过滤器)
```

2. 基础过滤器详解

让我们从最常用、最核心的过滤器开始。

2.1 任务状态过滤器

这是最基础的过滤,用于区分任务的完成情况。

  • not done:查找所有未完成的任务。
  • done:查找所有已完成的任务。
  • done (before|on|after) <date>:在特定日期之前/当天/之后完成的任务。
    • 示例:done on 2023-10-27
  • (created|completes|due|scheduled|start) (before|on|after) <date>:根据任务的各个时间属性进行筛选。
    • due before tomorrow
    • scheduled after yesterday

2.2 文本匹配过滤器

根据任务描述中的文本来搜索。

  • (description|path) (includes|does not include) <文本>:任务描述或文件路径包含/不包含某段文本。
    • 示例:description includes #紧急
    • 示例:path does not include Personal (不查找 Personal 文件夹下的任务)
  • (description|path) (regex matches|regex does not match) /<正则表达式>/:使用更强大的正则表达式进行匹配。
    • 示例:description regex matches /^\\[.*\\]/ (查找以方括号开头描述的任务)

2.3 标签与优先级过滤器

  • tags (include|do not include) <标签>:按标签过滤。
    • 示例:tags include #projectA (查找所有带有 #projectA 标签的任务)
    • 你可以使用 # 符号,但非必需。
  • priority is (above|below|not) <优先级>:按优先级过滤。
    • 优先级分为:lowmedium, high
    • 示例:priority is above low (查找所有 mediumhigh 优先级的任务)
    • 示例:priority is high

2.4 时间日期过滤器

这是 Tasks 插件最强大的功能之一,它理解自然语言日期(如 today, tomorrow)和相对日期(如 in 2 weeks)。

  • due (before|on|after) <日期>:按截止日期过滤。
    • 示例:due on 2023-10-27
    • 示例:due after yesterday and due before next week (查找本周到期的任务)
  • happens (before|on|after) <日期>:一个“智能”过滤器,它会查找在指定日期 due(到期)、scheduled(计划开始)或 start(可以开始)的任务。非常适合用于生成“某天需要关注的任务”列表。
    • 示例:happens today

3. 组合过滤器:使用逻辑运算符

单一过滤器功能有限,但通过逻辑运算符 AND, OR, NOT 将它们组合起来,就能构建出极其复杂的查询。

3.1 AND (与)

默认行为:在查询中简单地排列多个过滤器,它们之间就是 AND 关系。

	```tasks
	not done
	due before next Monday
	tags include #work
	```

解释:查找所有 未完成并且 截止日期在下周一之前,并且 包含 #work 标签的任务。

3.2 OR (或)

使用 OR 来扩大搜索范围,满足任一条件的任务都会被列出。

	```tasks
	not done
	(due on today) OR (due on tomorrow)
	```

解释:查找所有 未完成并且 (截止日期是今天 或者 明天)的任务。

注意:使用 OR 时,强烈建议用圆括号 () 将条件分组,以确保逻辑清晰准确。

3.3 NOT (非)

使用 NOT 来排除特定任务。

	```tasks
	not done
	NOT tags include #someday
	```

解释:查找所有 未完成并且 包含 #someday 标签的任务。

4. 综合实战示例

让我们来看几个贴近实际应用的复杂查询。

示例 1:今日重点关注

	```tasks
	not done
	happens today
	sort by priority
	sort by due
	```

解释:找出所有今天需要关注的任务(包括到期、计划开始或可以开始的),并按优先级和截止日期排序。

示例 2:本周工作高优先级任务

	```tasks
	not done
	due after yesterday and due before next Monday
	tags include #work
	(priority is high) OR (priority is medium)
	sort by priority reverse
	sort by due
	```

解释:找出所有未完成的、本周截止的、工作相关的、并且是高级或中级优先级的任务。结果按优先级降序排列(高的在前),同级则按截止日期排序。

示例 3:清理“某天/也许”任务

	```tasks
	not done
	tags include #someday
	sort by created
	```

解释:找出所有未完成的、被打上 #someday 标签的任务,并按创建时间排序,方便你回顾和清理。

5. 排序和分组

除了过滤,你还可以使用 sort bygroup by 来组织结果。

  • sort by <字段>:按指定字段排序(如 priority, due, created)。默认是升序。
  • sort by <字段> reverse:按指定字段降序排序。
  • group by <字段>:按指定字段对任务进行分组,形成清晰的视觉区域。常用的分组字段是 due, priority, backlink(来源文件)等。

示例:清晰的任务看板

	```tasks
	not done
	due before in four weeks
	group by due
	sort by priority reverse
	sort by due
	```

解释:将未来四周内到期的未完成任务,按截止日期分组,并在每个分组内按优先级从高到低排序。

6. 总结与最佳实践

  1. 从简单开始:先尝试一两个过滤器,逐步增加复杂度。
  2. 善用括号:在组合 ORAND 时,使用 () 来明确逻辑优先级,避免意外结果。
  3. 活用 happenshappens 是生成每日/每周待办视图的利器。
  4. 创建查询模板:将常用的查询(如“今日关注”、“本周复盘”)保存为模板,在每日笔记或项目笔记中快速插入。
  5. 结合 Dataview:对于更复杂的数据处理,可以考虑结合 Dataview 插件,但 Tasks 插件本身已能满足绝大多数任务查询需求。

现在,你已经掌握了 Obsidian Tasks 插件的核心查询功能。快去你的知识库中创建动态的任务中心,让你的工作流变得更加高效和清晰吧!


教程基于 https://publish.obsidian.md/tasks/Queries/Filters 内容编写,部分示例为便于理解进行了调整。


本站由 困困鱼 使用 Stellar 创建。