## Templater

Templater 是核心插件「模板」的上位替代，不仅满足基本的插入模板功能，还可以通过**模板语言**动态生成比如创建日期等很多内容。

我有为每个文件添加 front-matter 属性的习惯，我就可以使用 Templater 每次新建文件的时候都是用写好的属性模板。和默认模板不同的是，我可以创建的时候获取时间，然后用当前时间填写 creation 这个属性。这样我就可以实现自动记录创建时间了。

上述文件的模板是这样的：

```text
---
tags: 
doc_type: 
aliases: 
finished: false
creation: <% tp.file.creation_date() %>
---
```


模板不仅可以用于创建文件，还可以直接添加到笔记中，因此常用的表格、样式也可以用模板来创建。Templater 的这个用途和中的 [[Obsidian数学公式类插件#Latex Suite|Latex Suite]] 功能很相似，但是前者可以在生成内容的时候使用当前文件名称、当前文件路径、当前时间等信息，更适合处理模板的需求。
### 一、Templater 是什么

Templater 是 Obsidian 的**高级模板插件**，是核心插件「模板」的上位替代。核心区别：

|对比项|核心模板|Templater|
|---|---|---|
|变量支持|❌ 无|✅ 完整 JavaScript|
|日期函数|❌ 无|✅ 强大|
|用户交互|❌ 无|✅ 弹窗/建议器|
|逻辑判断|❌ 无|✅ if/for/函数|
|脚本调用|❌ 无|✅ 外部 .js 文件|

---

### 二、两种使用命令

|命令|场景| `tp.file.title` 的值|
|---|---|---|
| `Insert template` |往**已有笔记**插入内容|已有笔记的文件名|
| `Create new note from template` |**创建新笔记**|您输入的新文件名|

> ⚠️ 新手常见错误：用错命令导致变量值不对

---

### 三、基础语法

所有命令包裹在 `<% %>` 中：

`<% tp.模块名.函数名(参数) %>`

|语法|用途|示例|
|---|---|---|
| `<% %>` |输出值| `<% tp.date.now() %>` |
| `<%* %>` |执行代码（不输出）| `<%* let x = 1 %>` |
| `<%_ _%>` |去除空白字符| `<%_ tp.date.now() _%>` |
| `tR` |输出变量（代码块中追加内容）| `tR += "文字"` |

---

### 四、核心模块

#### 4.1 tp.date - 日期时间

markdown

<% tp.date.now() %>                        # 当前时间
<% tp.date.now("YYYY-MM-DD") %>            # 格式化
<% tp.date.now("YYYY-MM-DD", -1) %>        # 昨天
<% tp.date.tomorrow("YYYY-MM-DD") %>       # 明天

**常用格式代码**：

|代码|示例|说明|
|---|---|---|
| `YYYY` |2026|四位年份|
| `MM` |06|两位月份|
| `DD` |03|两位日期|
| `dddd` |星期三|星期几|
| `HH:mm:ss` |14:30:25|时分秒|

#### 4.2 tp.file - 文件操作

markdown

<% tp.file.title %>                        # 文件名（不含扩展名）
<% tp.file.name %>                         # 完整文件名
<% tp.file.creation_date() %>              # 创建时间
<% tp.file.last_modified_date() %>         # 修改时间
<% tp.file.cursor() %>                     # 光标定位
<% tp.file.cursor(3) %>                    # 光标定位到第 3 行
<% tp.file.rename("新标题") %>              # 重命名

#### 4.3 tp.system - 用户交互

markdown

<% tp.system.prompt("提示文字", "默认值") %>           # 文本输入
<% tp.system.suggester(["选项1","选项2"], ["val1","val2"]) %>  # 选择器
<% tp.system.confirm("确认吗？") %>                    # true/false

---

### 五、YAML Frontmatter 中的使用

#### 5.1 正确写法

```
---
creation: <% tp.file.creation_date() %>
tags: 
  - <% tagName %>
---
```

#### 5.2 常见错误

|错误 ❌|原因|正确 ✅|
|---|---|---|
|在 Frontmatter 内写 `<%* %>` |JS 代码块必须在外部|先写 `<%* %>`，再写 `---` |
|使用未定义变量|变量没声明|先在 `<%* %>` 中定义|
| `tp.file.cursor()` 后有内容|必须放在最后|确保它是最后一个命令|

#### 5.3 典型模板结构
```
---
// Frontmatter 区域
tags: <% tag %>
creation: <% tp.file.creation_date() %>
---
// 正文
# <% tp.file.title %>
 <% tp.file.cursor() %>

---
```


### 六、高级功能

#### 6.1 条件判断

```
<%* 
if (tp.date.now("dddd") === "Monday") {
    tR += "## 新的一周开始";
}
%>
```

#### 6.2 循环

markdown

```
<%* 
for (let i = 0; i < 5; i++) {
    tR += `- 项目 ${i+1}\n`;
}
%>
```

#### 6.3 调用外部脚本

**设置**：Templater 设置 → Script files folder location → 指定文件夹

**脚本文件** `Scripts/randomQuote.js`：

```javascript

function randomQuote() {
    const quotes = ["名言 1", "名言 2", "名言 3"];
    return quotes[Math.floor(Math.random() * quotes.length)];
}
module.exports = randomQuote;
```
## Dataview

## QuickAdd

## Excalidraw

## Base
Obsidian Bases 是 Obsidian 1.9.0 起推出、1.9.10 全面开放的官方核心插件，本质是把笔记以结构化数据库方式管理的工具，存储为 .base 后缀的 YAML 文件，可可视化整理笔记元数据、多视图展示并支持公式计算 Obsidian。

核心定位与原理
核心目标：将散落的 Markdown 笔记（通过 YAML 前置元数据）转为结构化数据，用表格、卡片等视图统一管理，实现 “所见即所得” 的数据化整理，无需复杂代码，比第三方 Dataview 更原生高效
存储机制：每个 Base 是独立 .base 文件，内容为 YAML 格式，定义过滤器（filters）、公式（formulas）、视图（views）；修改 Base 会实时同步到对应笔记的元数据，双向联动 Obsidian
依赖基础：完全基于本地库（Vault），不依赖云端；核心是读取 / 编辑笔记的 Properties（元数据），所以笔记需正确配置 YAML 前置属性
核心功能
多视图展示：支持表格、卡片等视图，可自定义列、排序、分页，适配不同浏览需求 Obsidian
精准筛选：用 filters 规则（如按标签、文件夹、链接关系）快速定位目标笔记，规则支持与 / 或 / 非组合 Obsidian
公式计算：formulas 支持字段运算、条件判断等，生成派生字段（如日期差、状态标记），字段类型含文本、数字、日期、单选 / 多选等 Obsidian
双向编辑：在 Base 视图修改笔记属性，会直接写入笔记的 YAML 前置元数据；反之笔记元数据更新也会同步到 Base，无需额外同步操作