我是怎么用模版增强Obsidian的
6 min read

我是怎么用模版增强Obsidian的

介绍一下我定制 Obsidian Template 模版的技术路线,同时介绍我是如何在 Obsidian 使用中涉及的 kanban、canvas、diary、专题写作、时间进度等场景高效应用这些模版的
我是怎么用模版增强Obsidian的
Photo generated by Gemini

书接上回,在我是如何用Obsidian进行创作管理的一文中我介绍了如何使用 Dashboard 模版进行个人的写作管理,有订阅者私信想知道除了 Dashboard 模版之外,我还有哪些 Obsidian 模版可以直接复用的,另外有哪些 Obsidian 插件或者工具推荐的,这篇文章就是介绍一下这些内容。

关于 Obsidian 模版、工具、插件这些辅助工具我的思考跟开发插件 Personal Assistant 是一样的,我期望使用 Obsidian 的时候它可以解放我的时间精力,让我少耗费时间来做管理,多把时间花在记录和思考上,就像我很喜欢的博主小胡在他的印记中写道的 —— 多写点内容,少折腾工具 | 印记,所以模版、工具、插件我也是抱着同样的态度,能帮助我减少管理成本专注于记录和思考就好。

当然,这只是我自己的态度,不是对读者的劝诫,折腾工具甚至赚到不菲的报酬的大有人在,读者知道自己要什么就好。

基本原理

除了格式化文本之外,模版我主要依赖的是 Templater 插件和 js 脚本,同时我尝试 go wasm 技术栈,技术路径行得通但是效率不高,用在 Obsidian 模版上有点杀鸡用牛刀(可以参考我的技术验证文档:go WASM 技术在 Obsidian 中的 MVP 验证),另外我也尝试过 python 脚本,它需要用到 nodejs 的 API 会导致模版只能在桌面端生效,移动端无法使用。

模版

我常用的模版涉及到 Obsidian 的多个场景,主要包括:kanban、canvas、diary、专题写作、时间进度条模版工具等,具体内容可以在 pkm-template/8.templates 中找到,可以按需自取。因为技术是大同小异,我以 Diary 模版为例介绍一下怎么定制和应用模版的,如下是 Diary 模版:

---
title: <% tp.file.title %>
date: <% tp.file.creation_date("YYYY-MM-DD HH:mm:ss") %>
modify: <% tp.file.last_modified_date("YYYY-MM-DD HH:mm:ss") %>
author: edony.zpc
tags: []
aliases:
  - <% tp.file.creation_date("YYYY-MM-DD") %>
---
%%
subject: #005-diary
status: 
type: 
publish: false
%%
# <% tp.file.title %>
> ==[[<% tp.date.now("YYYY") %>]]==,甲辰年,我在杭州。记录自己的生活,经历自己的生命,观察这个可爱的世界。

## reminder
%%
- **yesterday**:
> [!abstract]-  [[Diary-<% tp.date.yesterday("YYYY-MM-DD") %>]]      ❌  =  **`= length(filter([[Diary-<% tp.date.yesterday("YYYY-MM-DD") %>]].file.tasks, (t) => !t.checked))`**,✅  =  **`= length(filter([[Diary-<% tp.date.yesterday("YYYY-MM-DD") %>]].file.tasks, (t) => t.checked))`**
> 
> \`\`\`dataview
> TASK FROM "4.permanent/permanent-diary/permanent-<% tp.date.now("YYYY") %>/Diary-<% tp.date.yesterday("YYYY-MM-DD") %>"
> \`\`\`

- **reminder**:记录 daily task,结合 Reminder 插件进行适当提醒
%%
- [ ] 

## memos
%%
memos:一个摘抄和浏览的地方,一些好词、好句、好的思考的聚集地,这里都是别人的东西,作为一个语料库,同时满足自己的收藏癖……
%%
$$\textcolor[RGB]{250,0,0}{------\varkappa------}$$

<%* 
    let fileName = tp.file.title
    let year = tp.date.now("YYYY")
    let targetFile = tp.file.find_tfile("1.index/index-diary/"+year)
    let content = await this.app.vault.read(targetFile)
    if (content.includes("- " + "[[" + fileName + "]]")) {
        new this.window.Notice("already have linked " + fileName + "in " + year)
    } else {
        this.app.vault.append(targetFile, "\n"+"- "+"[["+fileName+"]]")
    }
%>

**关键词总结**:

结构化文本

结构化文本可以根据需要填写固定的稳定和格式内容,Diary 模版包括了 obsidian property 以及一些固定的文本内容章节段落结构、关键词、标签等,还包括一些结构化的 markdown 语法内容,例如待办事项 - [ ]、wiki link [[]] 等。

自动化关联

如下所示,在指定的文档中添加当前文档的 backlink,以 Diary 模版为例,因为我的模版 index 管理 Diary 笔记是根据年进行划分的,所以就在 index-diary/{year} 中添加当前 Diary 笔记文档的 backlink。

let fileName = tp.file.title
let year = tp.date.now("YYYY")
let targetFile = tp.file.find_tfile("1.index/index-diary/"+year)
let content = await this.app.vault.read(targetFile)
if (content.includes("- " + "[[" + fileName + "]]")) {
    new this.window.Notice("already have linked " + fileName + "in " + year)
} else {
    this.app.vault.append(targetFile, "\n"+"- "+"[["+fileName+"]]")
}

如下所示,根据文档命名的规则或者固定文档名添加 outgoing link。

[[<% tp.date.now("YYYY") %>]]

[[Diary-<% tp.date.yesterday("YYYY-MM-DD") %>]]

3. dataview DSL

模版中会添加一些用 dataview 做统计或者数据分析之类的能力,如下所示 Diary 添加 dataview 的 DSL 用作昨天任务(task)的统计和现实,并结合 callout 现实相关未完成任务的内容信息:

- **yesterday**:
> [!abstract]-  [[Diary-<% tp.date.yesterday("YYYY-MM-DD") %>]]      ❌  =  **`= length(filter([[Diary-<% tp.date.yesterday("YYYY-MM-DD") %>]].file.tasks, (t) => !t.checked))`**,✅  =  **`= length(filter([[Diary-<% tp.date.yesterday("YYYY-MM-DD") %>]].file.tasks, (t) => t.checked))`**
> 
> ```dataview
> TASK FROM "4.permanent/permanent-diary/permanent-<% tp.date.now("YYYY") %>/Diary-<% tp.date.yesterday("YYYY-MM-DD") %>"
> ```

效率改善

将模版直接绑定快捷键从而提升使用模版的效率:

  1. 在 Obsidian vault 中创建一个模版目录,例如 8.templates
  2. 在第一步创建的目录下创建 markdown 文件,文件自行命名即可;
  3. templater 配置,如下图所示三处需要配置:1)指定模版目录;2)打开触发执行;3)配置快捷键;
  4. 创建好笔记文档之后,直接用 Templater 中配置的对应模版的快捷键(例如 cmd + 1)自动生效模版;

附录

读者们很好奇我用了哪些插件和自定义样式,文末我就附上在使用的 obsidian plugin 和自定义用的 snippets,具体内容都以在我的 pkm-template 中找到。

plugin list

snippets

snippets 中大多是 css 文件,这里就不贴了,具体内容在 pkm-template 中。

References

  1. User Scripts - Templater
  2. Dataview

Public discussion

足迹