Skip to content

Templater 高级教程

Templater 是 Obsidian 最强大的模板插件,相比核心模板插件,它支持动态内容、JavaScript 表达式、系统命令等高级功能。

为什么选择 Templater?

功能核心模板Templater
静态模板
动态日期
JavaScript 表达式
系统命令
条件逻辑
循环处理
用户输入表单

安装配置

安装插件

  1. 打开「设置 → 第三方插件」
  2. 关闭「安全模式」
  3. 浏览并搜索「Templater」
  4. 安装并启用

基础配置

进入「设置 → Templater」:

设置项建议值说明
Template folder locationtemplates模板存放目录
Automatic jump to cursor开启插入模板后自动跳转光标
Trigger Templater on new file creation开启新建文件自动应用模板

模板语法基础

插入动态内容

Templater 使用 <% %> 作为模板语法:

markdown
---
title: <% tp.file.title %>
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
tags:
---

# <% tp.file.title %>

创建时间:<% tp.date.now("YYYY-MM-DD") %>

常用内置函数

文件相关

javascript
// 文件名(不含扩展名)
<% tp.file.title %>

// 文件名(含扩展名)
<% tp.file.name %>

// 文件夹路径
<% tp.file.folder() %>

// 文件创建时间
<% tp.file.creation_date("YYYY-MM-DD HH:mm") %>

// 文件修改时间
<% tp.file.last_modified_date("YYYY-MM-DD HH:mm") %>

// 移动文件
<% await tp.file.move("/文件夹/" + tp.file.title) %>

// 重命名文件
<% await tp.file.rename("新名称") %>

日期相关

javascript
// 当前日期时间
<% tp.date.now("YYYY-MM-DD HH:mm:ss") %>

// 当前日期
<% tp.date.now("YYYY-MM-DD") %>

// 明天
<% tp.date.tomorrow("YYYY-MM-DD") %>

// 昨天
<% tp.date.yesterday("YYYY-MM-DD") %>

// 一周后
<% tp.date.now("YYYY-MM-DD", 7) %>

// 指定日期偏移
<% tp.date.now("YYYY-MM-DD", -30) %>  // 30天前

用户交互

javascript
// 文本输入
<% tp.system.prompt("请输入标题") %>

// 带默认值的输入
<% tp.system.prompt("请输入标题", "默认标题") %>

// 选择器
<% tp.system.suggester(["选项1", "选项2", "选项3"], ["值1", "值2", "值3"]) %>

// 是/否确认
<% tp.system.suggester(["是", "否"], [true, false]) %>

实用模板示例

1. 日记模板

markdown
---
title: <% tp.date.now("YYYY-MM-DD") %> 日记
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
tags:
  - 日记
  - <% tp.date.now("YYYY/MM") %>
---

# <% tp.date.now("YYYY年MM月DD日 dddd") %>

## 今日计划

- [ ]

## 日记内容

<% tp.file.cursor() %>

## 今日完成

## 明日计划

2. 读书笔记模板

markdown
---
title: 《<% tp.system.prompt("书名") %>》读书笔记
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
author: <% tp.system.prompt("作者", "未知") %>
rating: <% tp.system.suggester(["⭐", "⭐⭐", "⭐⭐⭐", "⭐⭐⭐⭐", "⭐⭐⭐⭐⭐"], [1, 2, 3, 4, 5]) %>
tags:
  - 读书笔记
---

# 《<% tp.file.title.replace("读书笔记-", "") %>》

## 基本信息

- **作者**:<% tp.frontmatter.author %>
- **评分**:<% tp.frontmatter.rating %> 星
- **阅读日期**:<% tp.date.now("YYYY-MM-DD") %>

## 内容简介

## 核心观点

1.
2.
3.

## 精彩摘录

>

## 我的思考

<% tp.file.cursor() %>

## 行动清单

- [ ]

3. 会议记录模板

markdown
---
title: <% tp.system.prompt("会议主题") %> - 会议记录
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
date: <% tp.date.now("YYYY-MM-DD") %>
attendees: <% tp.system.prompt("参会人员", "待填写") %>
tags:
  - 会议记录
---

# <% tp.file.title %>

## 会议信息

| 项目 | 内容 |
|------|------|
| 日期 | <% tp.date.now("YYYY-MM-DD") %> |
| 时间 | <% tp.date.now("HH:mm") %> |
| 参会人员 | <% tp.frontmatter.attendees %> |

## 会议议题

1.

## 讨论内容

<% tp.file.cursor() %>

## 决议事项

- [ ]

## 待办任务

| 任务 | 负责人 | 截止日期 |
|------|--------|----------|
| | | |

## 下次会议

- 时间:
- 议题:

4. 项目笔记模板

markdown
---
title: <% tp.system.prompt("项目名称") %>
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
status: <% tp.system.suggester(["进行中", "已完成", "暂停", "计划中"], ["进行中", "已完成", "暂停", "计划中"]) %>
priority: <% tp.system.suggester(["高", "中", "低"], ["高", "中", "低"]) %>
tags:
  - 项目
---

# <% tp.file.title %>

## 项目概述

**状态**:<% tp.frontmatter.status %>
**优先级**:<% tp.frontmatter.priority %>
**创建日期**:<% tp.date.now("YYYY-MM-DD") %>

## 目标

1.

## 里程碑

| 里程碑 | 截止日期 | 状态 |
|--------|----------|------|
| | | |

## 任务列表

### 进行中

- [ ]

### 待开始

- [ ]

### 已完成

- [x]

## 相关资料

- [[]]

## 笔记

<% tp.file.cursor() %>

5. 周报模板

markdown
---
title: 周报 - <% tp.date.now("YYYY年第WW周") %>
created: <% tp.date.now("YYYY-MM-DD HH:mm") %>
week: <% tp.date.now("WW") %>
tags:
  - 周报
---

# 周报 - <% tp.date.now("YYYY年MM月DD日") %>

## 本周工作

### 已完成

1.
2.
3.

### 进行中

1.
2.

### 未完成

1.

## 下周计划

1.
2.
3.

## 问题与风险

| 问题 | 影响 | 解决方案 |
|------|------|----------|
| | | |

## 学习与成长

## 其他事项

<% tp.file.cursor() %>

高级技巧

条件判断

使用 JavaScript 条件语句:

javascript
<%*
let status = tp.system.suggester(["重要", "普通"], ["重要", "普通"]);
if (status === "重要") {
  tR += "优先级:🔴 重要";
} else {
  tR += "优先级:🟢 普通";
}
%>

循环处理

批量生成内容:

javascript
<%*
let items = ["项目A", "项目B", "项目C"];
for (let item of items) {
  tR += `- [[${item}]]\n`;
}
%>

调用系统命令

执行系统命令并插入结果:

javascript
// 获取剪贴板内容
<% tp.system.clipboard() %>

// 执行系统命令(需在设置中开启)
<% tp.system.clipboard() %>

文件操作

javascript
// 在指定文件夹创建文件
<%*
await tp.file.create_new("templates/note-template", "新笔记", false, app.vault.getAbstractFileByPath("文件夹路径"));
%>

// 追加内容到已有文件
<%*
await tp.file.append("日记/" + tp.date.now("YYYY-MM-DD"), "\n## 新增内容\n\n内容...");
%>

动态文件夹选择

javascript
<%*
let folder = tp.system.suggester(
  ["工作", "学习", "生活"],
  ["工作", "学习", "生活"]
);
await tp.file.move(`${folder}/${tp.file.title}`);
%>

与其他插件联动

配合 QuickAdd

在 QuickAdd 中调用 Templater 模板:

  1. 创建 QuickAdd 选择
  2. 选择「Template」类型
  3. 指定 Templater 模板路径

配合 Dataview

在模板中结合 Dataview 查询:

markdown
## 最近相关笔记

```dataview
TABLE file.mtime as 更新时间
FROM ""
WHERE contains(file.outlinks, [[<% tp.file.title %>]])
SORT file.mtime DESC
LIMIT 5

### 配合 Calendar

为日记自动创建模板:

1. 设置 Templater 为日记模板
2. 配置 Calendar 插件调用

## 常见问题

### 模板不执行?

检查以下设置:

1. 确认模板文件夹路径正确
2. 确认文件扩展名为 `.md`
3. 检查语法是否正确(`<%` 和 `%>` 配对)

### 中文日期格式?

```javascript
// 使用 dddd 显示星期
<% tp.date.now("YYYY年MM月DD日 dddd") %>
// 输出:2024年01月15日 星期一

如何调试模板?

  1. 使用 console.log() 输出到控制台
  2. Ctrl/Cmd + Shift + I 打开开发者工具
  3. 查看 Console 中的输出
javascript
<%*
console.log("当前文件:", tp.file.title);
console.log("当前时间:", tp.date.now());
%>

异步操作不生效?

确保使用 await

javascript
// 错误
<% tp.file.move("/文件夹/" + tp.file.title) %>

// 正确
<% await tp.file.move("/文件夹/" + tp.file.title) %>

配置参考

完整设置说明

设置项说明
Template folder location模板文件存放目录
Templates interval定时执行模板间隔
Trigger Templater on new file creation新建文件自动应用模板
Folder Templates为不同文件夹指定不同模板
Startup Templates启动时自动执行的模板

启动模板示例

创建一个启动模板,在 Obsidian 启动时自动执行:

javascript
<%*
// 检查今日日记是否存在
let todayNote = tp.date.now("YYYY-MM-DD");
let notePath = `日记/${todayNote}.md`;
let noteExists = app.vault.getAbstractFileByPath(notePath);

if (!noteExists) {
  // 创建今日日记
  await tp.file.create_new("templates/日记模板", todayNote, false, app.vault.getAbstractFileByPath("日记"));
  console.log("已创建今日日记");
}
%>

相关内容

最后更新:2026年2月28日编辑此页反馈问题