在 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 tomorrowscheduled 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) <优先级>:按优先级过滤。- 优先级分为:
low,medium,high。 - 示例:
priority is above low(查找所有medium和high优先级的任务) - 示例:
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 by 和 group 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. 总结与最佳实践
- 从简单开始:先尝试一两个过滤器,逐步增加复杂度。
- 善用括号:在组合
OR和AND时,使用()来明确逻辑优先级,避免意外结果。 - 活用
happens:happens是生成每日/每周待办视图的利器。 - 创建查询模板:将常用的查询(如“今日关注”、“本周复盘”)保存为模板,在每日笔记或项目笔记中快速插入。
- 结合 Dataview:对于更复杂的数据处理,可以考虑结合 Dataview 插件,但 Tasks 插件本身已能满足绝大多数任务查询需求。
现在,你已经掌握了 Obsidian Tasks 插件的核心查询功能。快去你的知识库中创建动态的任务中心,让你的工作流变得更加高效和清晰吧!
教程基于 https://publish.obsidian.md/tasks/Queries/Filters 内容编写,部分示例为便于理解进行了调整。