tasknotes 插件教程
TaskNotes 插件使用指南
TaskNotes 是 Obsidian 中用于为任务创建独立笔记页面的插件,实现任务与笔记的双向关联,让任务管理更加结构化和深度化。
插件特点
| 特性 | 说明 |
|---|---|
| 📝 任务笔记 | 为每个任务创建独立的笔记页面 |
| 🔗 双向链接 | 任务和笔记自动双向关联 |
| 📋 笔记模板 | 自定义任务笔记的模板 |
| 🔍 快速导航 | 从任务直接跳转到对应笔记 |
| 📊 笔记概览 | 在侧边栏查看所有任务笔记 |
安装插件
- 打开「设置」→「第三方插件」→ 关闭「安全模式」
- 点击「浏览」→ 搜索「obsidian-tasknotes」→ 安装并启用
基础配置
设置存储位置
Task notes folder: Tasks/Notes
Template: Tasks/Templates/Task Note.md任务笔记模板
创建 Tasks/Templates/Task Note.md:
markdown
---
id: {{task.id}}
created: {{task.created}}
due: {{task.due}}
priority: {{task.priority}}
tags: [任务, {{task.project}}]
---
# {{task.title}}
## 任务描述
{{task.description}}
## 相关信息
**创建时间**: {{task.created}}
**截止日期**: {{task.due}}
**优先级**: {{task.priority}}
## 执行记录
-
## 备注基础操作
为任务创建笔记
| 方法 | 操作 |
|---|---|
| 命令面板 | TaskNotes: Create note for task |
| 快捷键 | 在任务上使用 Ctrl + Shift + N |
| 右键菜单 | 右键任务 → Create task note |
任务语法
markdown
- [ ] 为项目 A 撰写文档 ⏭️ [[Tasks/Notes/project-a-doc]]
- [ ] 完成代码评审 ⏭️ [[Tasks/Notes/code-review]]INFO
使用 ⏭️ 或 ⏩ 表情符号标记有独立笔记的任务。
快速导航
创建笔记后,任务行会自动包含指向笔记的链接:
markdown
- [ ] 撰写项目文档 ⏭️ [[Tasks/Notes/project-doc]]点击链接可直接跳转到对应的任务笔记。
任务笔记结构
典型任务笔记
markdown
---
id: task-20260609-001
created: 2026-06-09
due: 2026-06-15
priority: 高
tags: [任务, 项目A]
---
# 撰写项目文档
## 任务描述
完成项目 A 的技术文档,包括:
- 系统架构图
- API 接口文档
- 部署指南
## 进度追踪
- [ ] 架构设计
- [ ] 编写文档
- [ ] 评审修改
- [ ] 正式发布
## 相关资源
- [[项目 A 主笔记]]
- [[会议记录/架构评审]]
- [外部文档链接](https://example.com)
## 讨论记录
> 2026-06-09: 确定文档结构
> 2026-06-10: 完成初稿
## 附件
-使用场景
复杂任务管理
markdown
# 项目 Alpha - 主任务
## 子任务(各自有独立笔记)
- [ ] 需求分析 ⏭️ [[Tasks/Notes/alpha-requirements]]
- [[Tasks/Notes/alpha-requirements#与客户确认需求|确认进度]]
- [ ] 系统设计 ⏭️ [[Tasks/Notes/alpha-design]]
- [ ] 编码开发 ⏭️ [[Tasks/Notes/alpha-development]]
- [ ] 测试验证 ⏭️ [[Tasks/Notes/alpha-testing]]
- [ ] 部署上线 ⏭️ [[Tasks/Notes/alpha-deployment]]项目管理
markdown
# 📊 项目管理仪表盘
## 进行中的项目
```dataview
TABLE
file.link AS 项目,
file.frontmatter.progress AS 进度,
file.frontmatter.due AS 截止
FROM "Tasks/Projects"
WHERE file.frontmatter.status = "进行中"
SORT file.frontmatter.due ASC里程碑
### 习惯养成
```markdown
# 🎯 习惯养成追踪
## 每日习惯
- [ ] 早起 06:30 ⏭️ [[Tasks/Habits/early-rising]]
- [ ] 晨跑 30 分钟 ⏭️ [[Tasks/Habits/morning-run]]
- [ ] 冥想 10 分钟 ⏭️ [[Tasks/Habits/meditation]]
- [ ] 阅读 30 分钟 ⏭️ [[Tasks/Habits/reading]]
---
# Tasks/Habits/morning-run.md
## 晨跑习惯
### 目标
每周跑步 4 次,每次 30 分钟以上
### 记录
| 日期 | 时长 | 距离 | 感受 |
|------|------|------|------|
| 2026-06-09 | 35min | 5km | 良好 |
| 2026-06-08 | 30min | 4.5km | 一般 |与其他插件配合
配合 Tasks 插件
markdown
- [ ] 重要任务 📅 2026-06-15 ⏭️ [[Tasks/Notes/important-task]]
- 优先级: !!!!
- 标签: #紧急 #重要配合 Dataview
dataview
TABLE
file.link AS 任务,
file.frontmatter.priority AS 优先级,
file.frontmatter.due AS 截止日期,
length(filter(file.tasks, t => t.completed)) AS 子任务进度
FROM "Tasks/Notes"
WHERE file.frontmatter.due <= date(today) + dur(7 days)
SORT file.frontmatter.due ASC配合 Calendar
在日历视图中显示有任务笔记的日期:
dataview
LIST file.link AS 任务
FROM "Tasks/Notes"
WHERE file.frontmatter.due = date(today)配置选项
| 选项 | 说明 | 默认值 |
|---|---|---|
| 任务笔记文件夹 | 存储任务笔记的目录 | Tasks/Notes |
| 笔记模板 | 任务笔记使用的模板 | Tasks/Templates/... |
| 自动创建 | 标记时自动创建笔记 | false |
| 反向链接显示 | 在笔记中显示关联任务 | true |
常见问题
Q: 如何批量创建任务笔记?
使用 QuickAdd 或 Templater 宏批量处理:
javascript
// 批量为已标记的任务创建笔记
const tasks = app.workspace.getActiveFile().tasks;
for (const task of tasks) {
if (task.text.includes('⏭️')) {
await app.commands.executeCommandById('tasknotes:create-note');
}
}Q: 任务笔记和任务本身如何保持同步?
建议将任务笔记作为主要信息来源,任务行作为快速概览,两者定期同步更新。
Q: 如何导出任务笔记数据?
使用 Dataview 查询并导出:
dataview
EXPORT
TABLE file.link, file.frontmatter.due, file.frontmatter.priority
FROM "Tasks/Notes"
WHERE file.frontmatter.due <= date(today)TaskNotes 高级使用案例
本文介绍 TaskNotes 的进阶用法,涵盖自动化工作流、跨插件联动、数据可视化和团队协作。
自动化工作流
Templater 任务笔记生成
创建笔记时自动生成任务笔记:
markdown
<%*
const taskTitle = await tp.system.prompt("任务名称:");
const taskDue = await tp.system.prompt("截止日期 (YYYY-MM-DD):");
const taskPriority = await tp.system.suggester(
["高", "中", "低"],
["高", "中", "低"]
);
const taskProject = await tp.system.prompt("所属项目:");
// 创建任务笔记
const noteName = taskTitle.replace(/\s+/g, '-').toLowerCase();
const notePath = `Tasks/Notes/${noteName}.md`;
const template = `---
id: task-${moment().format('YYYYMMDD-HHmmss')}
created: ${tp.date.now("YYYY-MM-DD")}
due: ${taskDue}
priority: ${taskPriority}
project: ${taskProject}
tags: [任务, ${taskProject}]
---
# ${taskTitle}
## 任务描述
## 执行计划
- [ ] 步骤 1
- [ ] 步骤 2
- [ ] 步骤 3
## 相关资源
-
## 备注
`;
await tp.file.create_new(template, noteName, false);
-%>任务到期提醒
javascript
// 任务到期前自动发送提醒
module.exports = {
// 使用 Obsidian Tasks 插件的到期检查
check: () => {
const today = moment();
const tasks = app.plugins.getPlugin('tasks-plugin').getTasks();
tasks.forEach(task => {
if (task.due) {
const daysUntil = moment(task.due).diff(today, 'days');
if (daysUntil === 1) {
new Notice(`⚠️ 任务 "${task.text}" 明天到期!`);
} else if (daysUntil === 0) {
new Notice(`🚨 任务 "${task.text}" 今天到期!`);
} else if (daysUntil < 0) {
new Notice(`❗ 任务 "${task.text}" 已过期!`);
}
}
});
}
};跨插件联动
与 Dataview 深度联动
任务网络可视化
dataview
```dataview
TABLE
file.link AS 任务笔记,
file.frontmatter.due AS 截止日期,
file.frontmatter.priority AS 优先级,
length(file.outlinks) AS 关联数,
length(file.inlinks) AS 被引用数
FROM "Tasks/Notes"
WHERE file.frontmatter.due >= date(today)
SORT file.frontmatter.priority DESC
LIMIT 20
#### 任务依赖分析
```dataview
TABLE
file.link AS 任务,
file.frontmatter.due AS 截止,
filter(file.outlinks, l => l.path.includes("Tasks/Notes")) AS 依赖任务
FROM "Tasks/Notes"
WHERE length(filter(file.outlinks, l => l.path.includes("Tasks/Notes"))) > 0与 Timeline 插件联动
在时间线中显示任务笔记:
markdown
<!-- Timeline 插件语法 -->
- 2026-06-15: [[Tasks/Notes/project-doc|项目文档撰写]] 完成
- 2026-06-20: [[Tasks/Notes/code-review|代码评审]] 截止
- 2026-06-25: [[Tasks/Notes/deployment|部署上线]] 发布与 Kanban 插件联动
在看板中展示任务笔记:
markdown
# 任务看板
## 🔴 紧急
- [ ] 任务 A ⏭️ [[Tasks/Notes/task-a]]
- [ ] 任务 B ⏭️ [[Tasks/Notes/task-b]]
## 🟡 进行中
- [ ] 任务 C ⏭️ [[Tasks/Notes/task-c]]
- [ ] 任务 D ⏭️ [[Tasks/Notes/task-d]]
## 🟢 就绪
- [ ] 任务 E ⏭️ [[Tasks/Notes/task-e]]数据可视化
任务进度仪表盘
dataview
```dataview
TABLE
"进度" AS 状态,
length(filter(file.tasks, t => t.completed)) AS 已完成,
length(filter(file.tasks, t => !t.completed)) AS 待完成,
round(length(filter(file.tasks, t => t.completed)) / length(file.tasks) * 100, 0) AS 完成率
FROM "Tasks/Notes"
WHERE file.frontmatter.due <= date(today) + dur(7 days)
GROUP BY file.frontmatter.project
```甘特图视图
dataview
TABLE
file.link AS 项目,
file.frontmatter.start AS 开始,
file.frontmatter.due AS 截止,
date(file.frontmatter.due) - date(file.frontmatter.start) AS 周期天,
length(filter(file.tasks, t => t.completed)) AS 完成
FROM "Tasks/Notes"
WHERE file.frontmatter.start
SORT file.frontmatter.start ASC优先级矩阵
dataview
```dataview
TABLE
file.link AS 任务,
file.frontmatter.priority AS 优先级,
file.frontmatter.due AS 截止,
file.frontmatter.effort AS 工作量
FROM "Tasks/Notes"
WHERE file.frontmatter.due
FLATTEN {
"!!!": file.frontmatter.priority = "高" and file.frontmatter.effort = "大",
"!!": file.frontmatter.priority = "高" and file.frontmatter.effort = "中",
"!": file.frontmatter.priority = "中"
} AS 象限
SORT 象限 DESC团队协作
任务分配系统
markdown
---
assignee: @张三
reviewer: @李四
status: 待审核
tags: [任务, 团队]
---
# 任务名称
## 分配信息
- **负责人**: @张三
- **审核人**: @李四
- **创建时间**: 2026-06-09
- **预计工时**: 8h
## 进度报告
### 2026-06-10
- 完成需求分析
- 开始设计文档
### 2026-06-11
- 完成初稿
- 提交审核
## 审核意见
> @李四: 文档结构清晰,建议补充 API 接口说明。
## 审核状态
- [ ] 代码审查
- [ ] 文档审核
- [x] 最终批准项目周报自动生成
dataview
```dataview
TABLE
file.link AS 任务,
file.frontmatter.assignee AS 负责人,
file.frontmatter.due AS 截止,
file.frontmatter.status AS 状态
FROM "Tasks/Notes"
WHERE file.frontmatter.due >= date(today) - dur(7 days)
WHERE file.frontmatter.due <= date(today) + dur(7 days)
SORT file.frontmatter.due ASC
```高级模板
会议任务模板
markdown
---
type: meeting-task
created: {{date:YYYY-MM-DD}}
due: {{date+7d:YYYY-MM-DD}}
priority: 高
tags: [任务, 会议]
related-meeting: [[会议记录/2026-06-09]]
---
# {{title}}
## 来源会议
[[会议记录/2026-06-09]]
## 会议决议
1.
## 执行要求
- [ ]
- [ ]
## 进度
- [ ] 方案设计
- [ ] 评审确认
- [ ] 实施执行
- [ ] 结果汇报
## 负责人
@
## 时间节点
| 节点 | 日期 | 状态 |
|------|------|------|
| 方案完成 | {{date+3d:YYYY-MM-DD}} | ⏳ |
| 评审会议 | {{date+5d:YYYY-MM-DD}} | ⏳ |
| 实施完成 | {{date+7d:YYYY-MM-DD}} | ⏳ |项目里程碑模板
markdown
---
type: milestone
created: {{date:YYYY-MM-DD}}
project: {{project}}
tags: [里程碑]
---
# 🎯 里程碑:{{title}}
## 概述
> 里程碑目标描述
## 关联任务
```dataview
TASK
FROM ""
WHERE contains(file.frontmatter.milestone, "{{title}}")
GROUP BY file.link关键交付物
验收标准
风险点
| 风险 | 影响 | 应对措施 |
|---|---|---|
里程碑历史
| 日期 | 状态 | 说明 |
|---|---|---|
| {{date:YYYY-MM-DD}} | 🟡 进行中 | 启动 |
## 常见问题
### Q: 如何处理复杂的任务依赖?
使用任务笔记中的「前置任务」和「后续任务」字段明确依赖关系:
```markdown
## 依赖关系
**前置任务**:
- [[Tasks/Notes/task-requirements|需求分析]]
**后续任务**:
- [[Tasks/Notes/task-design|系统设计]]
- [[Tasks/Notes/task-testing|测试计划]]Q: 如何批量更新任务笔记属性?
使用 QuickAdd 宏或 Templater 脚本批量处理:
javascript
// 批量更新截止日期
const files = app.vault.getFiles()
.filter(f => f.path.startsWith('Tasks/Notes'))
.filter(f => f.extension === 'md');
for (const file of files) {
const content = await app.vault.read(file);
if (content.includes('due: null')) {
const updated = content.replace('due: null', `due: ${moment().add(7, 'days').format('YYYY-MM-DD')}`);
await app.vault.modify(file, updated);
}
}
new Notice(`已更新 ${files.length} 个任务笔记`);Q: 任务笔记太多难以管理?
- 按项目或时间分类到子文件夹
- 使用 Dataview 建立索引视图
- 定期归档已完成的任务笔记