Skip to content

tasknotes 插件教程

TaskNotes 插件使用指南

TaskNotes 是 Obsidian 中用于为任务创建独立笔记页面的插件,实现任务与笔记的双向关联,让任务管理更加结构化和深度化。

插件特点

特性说明
📝 任务笔记为每个任务创建独立的笔记页面
🔗 双向链接任务和笔记自动双向关联
📋 笔记模板自定义任务笔记的模板
🔍 快速导航从任务直接跳转到对应笔记
📊 笔记概览在侧边栏查看所有任务笔记

安装插件

  1. 打开「设置」→「第三方插件」→ 关闭「安全模式」
  2. 点击「浏览」→ 搜索「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: &#123;&#123;date:YYYY-MM-DD&#125;&#125;
due: &#123;&#123;date+7d:YYYY-MM-DD&#125;&#125;
priority: 
tags: [任务, 会议]
related-meeting: [[会议记录/2026-06-09]]
---

# &#123;&#123;title&#125;&#125;

## 来源会议

[[会议记录/2026-06-09]]

## 会议决议

1. 

## 执行要求

- [ ] 
- [ ] 

## 进度

- [ ] 方案设计
- [ ] 评审确认
- [ ] 实施执行
- [ ] 结果汇报

## 负责人

@

## 时间节点

| 节点 | 日期 | 状态 |
|------|------|------|
| 方案完成 | &#123;&#123;date+3d:YYYY-MM-DD&#125;&#125; | ⏳ |
| 评审会议 | &#123;&#123;date+5d:YYYY-MM-DD&#125;&#125; | ⏳ |
| 实施完成 | &#123;&#123;date+7d:YYYY-MM-DD&#125;&#125; | ⏳ |

项目里程碑模板

markdown
---
type: milestone
created: &#123;&#123;date:YYYY-MM-DD&#125;&#125;
project: &#123;&#123;project&#125;&#125;
tags: [里程碑]
---

# 🎯 里程碑:&#123;&#123;title&#125;&#125;

## 概述

> 里程碑目标描述

## 关联任务

```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: 任务笔记太多难以管理?

  1. 按项目或时间分类到子文件夹
  2. 使用 Dataview 建立索引视图
  3. 定期归档已完成的任务笔记