任务行的结构
任务是带复选框的列表项。描述之后是字段,每个字段由一个符号加一个值组成。Obsidian Tasks 从右往左读一行,所以字段要放在文字之后、行尾,两个字段之间出现任何无法识别的文字,读取就会在那里停止。
同一个任务,用各种内联格式写出来:
- [ ] Pay rent ⏫ 🔁 every month ➕ 2026-01-02 ⏳ 2026-01-14 📅 2026-01-15 - [ ] Pay rent [priority:: high] [repeat:: every month] [created:: 2026-01-02] [scheduled:: 2026-01-14] [due:: 2026-01-15] - [ ] Pay rent #project/Home @bank ⏫ 📅 2026-01-15 09:00 [repeat:: every month] 任务文件把同样的信息放在 YAML frontmatter 里。见下面的任务文件一节。
字段并排对照
日期始终是 YYYY-MM-DD。Dataview 一列使用方括号。Obsidian Tasks 和 Dataview 也读取圆括号 (due:: 2026-01-15);Task Genius 只读取方括号。Task Genius 同时读取表情符号和方括号两种形式,所以它那一列只列出新增或写法不同的内容。
屏幕较窄时请左右滚动。
| 字段 | Obsidian Tasks 表情符号 | Dataview 风格 | Task Genius |
|---|---|---|---|
| 截止日期 最后期限。Obsidian Tasks 也把 📆 和 🗓 读作截止日期。 | 📅 2026-01-15 | [due:: 2026-01-15] | 与另外两列相同 |
| 计划日期 你打算处理它的那一天。Obsidian Tasks 也读取 ⌛。 | ⏳ 2026-01-14 | [scheduled:: 2026-01-14] | 与另外两列相同 |
| 开始日期 在这一天之前,任务还不能开始。 | 🛫 2026-01-10 | [start:: 2026-01-10] | 与另外两列相同 |
| 创建日期 如果插件设置为自动添加,会在创建任务时写入。 | ➕ 2026-01-02 | [created:: 2026-01-02] | 与另外两列相同 |
| 完成日期 勾选任务时写入。Dataview 风格里的键是 completion,不是 done。 | ✅ 2026-01-15 | [completion:: 2026-01-15] | 与另外两列相同 |
| 取消日期 与 [-] 这类取消状态配合使用。 | ❌ 2026-01-15 | [cancelled:: 2026-01-15] | 与另外两列相同 |
| 优先级 从高到低共五级。普通优先级什么都不写。 | 🔺 highest ⏫ high 🔼 medium 🔽 low ⏬ lowest | [priority:: highest] [priority:: high] [priority:: medium] [priority:: low] [priority:: lowest] | [#A] |
| 重复 Obsidian Tasks 和 Dataview 风格使用以 every 开头的普通英文短语。Task Genius 除了这些,还读取 iCalendar 规则。见重复一节。 | 🔁 every week on Sunday when done | [repeat:: every week on Sunday when done] | [recurrence:: FREQ=WEEKLY;BYDAY=SU] |
| 完成时操作 任务完成后如何处理它。Obsidian Tasks 支持 keep 和 delete。 | 🏁 delete 🏁 keep | [onCompletion:: delete] | 与另外两列相同 |
| 任务 ID 只能使用字母、数字、连字符和下划线。 | 🆔 abc123 | [id:: abc123] | 与另外两列相同 |
| 依赖于 一个或多个任务 ID,用逗号分隔。 | ⛔ abc123,def456 | [dependsOn:: abc123,def456] | 与另外两列相同 |
| 具体时间 Obsidian Tasks 没有时间字段。Task Genius 会读取日期之后的时间。 | 不支持 | 不支持 | 📅 2026-01-15 14:30 [due:: 2026-01-15 14:30] |
| 项目和情境 Obsidian Tasks 没有项目或情境字段,请改用标签。Task Genius 会读取这些字段。 | 不支持 | 不支持 | #project/Website @phone [project:: Website] [context:: phone] |
Obsidian Tasks 写入字段的顺序
Obsidian Tasks 写一行时,先写 ID、依赖、优先级、重复和完成时操作,然后是创建、开始、计划和截止日期,最后是取消和完成日期。手写时顺序不同也能工作,只要所有字段都在行尾。
状态字符
方括号里的字符就是状态。只有空格和 x 是通用的。其余都是约定,由插件、主题或状态集合赋予含义。
| 字符 | 通常含义 | 谁能识别 |
|---|---|---|
[ ] | 待办 | 所有,包括 Obsidian 本身 |
[x] | 已完成(x 或 X) | 所有,包括 Obsidian 本身 |
[/] | 进行中 | Task Genius 默认支持,Obsidian Tasks 作为自定义状态 |
[-] | 已取消或已放弃 | Task Genius 默认支持,Obsidian Tasks 作为自定义状态 |
[>] | 进行中(Task Genius)或已转交 | Task Genius 默认支持,其他地方是约定 |
[<] | 已安排 | 状态集合和主题中的约定,不是 Task Genius 的默认设置;在 Obsidian Tasks 中是自定义状态 |
[?] | 已计划 | Task Genius 默认支持,其他地方常被理解为疑问 |
[!] | 重要 | 状态集合和主题中的约定,不是 Task Genius 的默认设置;在 Obsidian Tasks 中是自定义状态 |
在 Obsidian Tasks 中,没有配置过的字符会显示为 Unknown 状态。请在插件的 Custom Statuses 设置里添加,或加载现成的状态集合。
Task Genius 只把 x 和 X 视为已完成。TaskNotes 文件根本不使用复选框字符,而是用 status 属性,下文会讲到。
重复
各格式差别最大的就是重复。同一个每周任务,四种写法:
- [ ] Water plants 🔁 every week on Sunday when done 📅 2026-01-18 - [ ] Water plants [repeat:: every week on Sunday when done] [due:: 2026-01-18] - [ ] Water plants [recurrence:: FREQ=WEEKLY;BYDAY=SU] [due:: 2026-01-18] recurrence: "DTSTART:20260118;FREQ=WEEKLY;BYDAY=SU"
recurrence_anchor: completion Obsidian Tasks 能理解的规则
每条规则都以 every 开头。加上 when done,则从你完成的那天起算,而不是从原日期起算。
every 3 days
every 10 days when done
every weekday
every week on Sunday
every week on Tuesday, Friday
every 2 weeks
every 3 weeks on Friday
every 2 months
every month on the 1st
every month on the last
every month on the last Friday
every month on the 2nd last Friday
every January on the 15th
every April and December on the 1st and 24th
every year 完成时的行为
- Obsidian Tasks:勾选重复任务会把那一行标为完成,并添加一个日期顺延的新行,默认放在原行上方。可以通过设置改放在下方。
- Obsidian Tasks:重复任务至少需要截止、计划或开始日期之一。没有的话,规则就没有可以顺延的日期。
- Obsidian Tasks:月度规则遇到不存在的日期(4 月 31 日)时,会提前到当月最后一个有效日。明确指定 31 日的规则则会跳过没有 31 日的月份。
- Obsidian Tasks:新行不会保留 ID 和依赖字段,所以依赖关系不会一直卡住。
- TaskNotes:文件始终是同一个任务。已完成和已跳过的日期写入 complete_instances 和 skipped_instances,日程随之推进。
- Task Genius:下一个日期来自 iCalendar 规则,或 every 2 weeks 这样的简单短语。Obsidian Tasks 中更复杂的短语,比如 every weekday 或 the last Friday of the month,读法并不相同,依赖之前请先测几个。
- 不要把重复任务放进每日笔记。每日笔记里的重复行会被复制到每一天的笔记中。
任务文件:TaskNotes frontmatter
TaskNotes 每个笔记存一个任务。信息放在 YAML frontmatter 里,正文是自由文本。文件带有你在插件设置中指定的标签或属性(默认是 task 标签)时,就算作任务。
---
tags:
- task
title: Review quarterly report
status: in-progress
priority: high
due: 2026-01-15
scheduled: 2026-01-14
contexts:
- office
projects:
- "[[Q1 Planning]]"
timeEstimate: 90
recurrence: "DTSTART:20260115;FREQ=MONTHLY;BYMONTHDAY=15"
recurrence_anchor: scheduled
---
Notes, links and a checklist go in the body. 属性
| 属性 | 示例 | 含义 |
|---|---|---|
| title | | 任务名称。 |
| status | | 状态列表中的一个值。默认是 open、in-progress 和 done。 |
| priority | | 优先级列表中的一个值。默认是 low、normal 和 high。 |
| due | | 截止时间,可以是日期,也可以是日期加时间。 |
| scheduled | | 你打算处理它的那一天。 |
| completedDate | | 任务完成时设置。 |
| dateCreated | | 创建时间,ISO 时间戳。 |
| dateModified | | 最后修改时间,ISO 时间戳。 |
| tags | | YAML 列表,不带井号。 |
| contexts | | 地点或模式的 YAML 列表。 |
| projects | | 指向项目笔记的链接的 YAML 列表。 |
| timeEstimate | | 以分钟计的数字。 |
| recurrence | | iCalendar 规则。DTSTART 设定锚点日期。 |
| recurrence_anchor | | scheduled 或 completion:下一个日期从哪里起算。 |
| complete_instances | | 重复任务已完成各次的日期。 |
| skipped_instances | | 已跳过各次的日期。 |
| blockedBy | | 必须先完成的任务,写成包含 uid、关系类型和可选间隔的对象。 |
属性名是可配置的。如果你在插件里把 due 改名为 deadline,文件里就必须使用 deadline。
即使只有一项,列表也必须写成列表。该用列表的地方写成单个值,是任务文件不出现在视图里最常见的原因。
能让人折腾一晚上的陷阱
- Obsidian Tasks 一次只读写一种格式。如果它的设置是 Dataview,在切换回去之前,它自己的表情符号不会被读取。
- Dataview 需要两个冒号,即 [due:: 2026-01-15]。一个冒号不构成字段。
- 括号必须配对。[due:: 2026-01-15) 不会被读取。
- Dataview 风格下 Obsidian Tasks 的键区分大小写:repeat、dependsOn 和 onCompletion 有效,Repeat 和 dependson 无效。Task Genius 匹配键时不区分大小写。
- 完成日期的键是 completion。[done:: 2026-01-15] 只是个未知字段。
- Dataview 文档中把 🗓️ 作为截止日期的简写,而 Obsidian Tasks 写的是 📅。如果你用 Dataview 查询表情符号日期,请先在自己的版本上测试。使用方括号字段可以避开这个问题。
- 粘贴的文本可能带有不换行空格,或表情符号后面的变体选择符。Obsidian Tasks 读不了它们,而屏幕上看起来一切正常。
- Dataview 只为五种日期提供简写。优先级和重复没有简写,需要用方括号形式。
- Obsidian Tasks 中像 #task 这样的全局过滤器,会让它忽略所有不带该标签的复选框。任务从查询里消失,往往就是这个原因。
- 围栏代码块里的复选框行,在这些插件中都不算任务。
权威来源
插件会更新。如果这里的内容与你的版本不符,请以下列文档为准,而不是本页。
在手机上使用
TaskForge 是面向 iPhone、iPad、Mac、安卓和 Windows 的独立应用,能从同一个文件夹读取上面的表情符号、Dataview 和 Task Genius 写法,以及 TaskNotes 风格的任务文件。它不是 Obsidian 插件,与 Obsidian 也没有关联。使用本页的任何内容都不需要它。
大家常问的问题
Obsidian Tasks 里截止日期怎么写?
输入日历表情符号、一个空格和日期:- [ ] Pay rent 📅 2026-01-15。Dataview 风格写作 [due:: 2026-01-15]。两者都使用 YYYY-MM-DD。
Obsidian Tasks 的优先级表情符号有哪些?
🔺 最高,⏫ 高,🔼 中,🔽 低,⏬ 最低。普通优先级没有符号。Dataview 风格里字段是 priority,值为 highest、high、medium、low 和 lowest。
Obsidian Tasks 可以用 Dataview 内联字段代替表情符号吗?
可以。在 Obsidian Tasks 设置里把任务格式设为 Dataview,它就会读写 [due:: 2026-01-15] 这种字段。它只读取你所选的格式,所以已有的表情符号行需要转换。做法见转换页面。
在 Obsidian 里怎么写重复任务?
用 Obsidian Tasks 时,加上 🔁 和以 every 开头的规则,再至少加一个日期:- [ ] Water plants 🔁 every week on Sunday 📅 2026-01-18。用 TaskNotes 时,把 recurrence 属性设为 iCalendar 规则,比如 FREQ=WEEKLY;BYDAY=SU。
Obsidian 任务可以有哪些状态字符?
方括号之间可以放任意单个字符。空格和 x 是标准用法。/、- 和 > 这类字符,只有在插件或主题为它们定义含义之后才有意义。
Task Genius 使用的语法和 Obsidian Tasks 一样吗?
它在同一行里读取相同的表情符号和 Dataview 方括号形式,所以为 Obsidian Tasks 写的库也能用。它还增加了日期之后的时间、项目和情境字段,以及 iCalendar 重复规则。它写入哪种格式由设置决定。