Templater 高级教程
Templater 是 Obsidian 最强大的模板插件,相比核心模板插件,它支持动态内容、JavaScript 表达式、系统命令等高级功能。
为什么选择 Templater?
| 功能 | 核心模板 | Templater |
|---|---|---|
| 静态模板 | ✅ | ✅ |
| 动态日期 | ❌ | ✅ |
| JavaScript 表达式 | ❌ | ✅ |
| 系统命令 | ❌ | ✅ |
| 条件逻辑 | ❌ | ✅ |
| 循环处理 | ❌ | ✅ |
| 用户输入表单 | ❌ | ✅ |
安装配置
安装插件
- 打开「设置 → 第三方插件」
- 关闭「安全模式」
- 浏览并搜索「Templater」
- 安装并启用
基础配置
进入「设置 → Templater」:
| 设置项 | 建议值 | 说明 |
|---|---|---|
| Template folder location | templates | 模板存放目录 |
| 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 模板:
- 创建 QuickAdd 选择
- 选择「Template」类型
- 指定 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日 星期一如何调试模板?
- 使用
console.log()输出到控制台 - 按
Ctrl/Cmd + Shift + I打开开发者工具 - 查看 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("已创建今日日记");
}
%>相关内容
- 模板系统 - 核心模板功能
- QuickAdd 插件 - 快速添加内容
- 日记功能 - 日记系统配置
- 最佳实践 - 模板使用技巧