IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    我是怎么用模版增强Obsidian的

    茴香发表于 2024-07-28 21:27:02
    love 0

    书接上回,在我是如何用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 [[]] 等。

    自动化关联

    1. backlink

    如下所示,在指定的文档中添加当前文档的 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+"]]")
    }
    

    2. outgoing link

    如下所示,根据文档命名的规则或者固定文档名添加 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

    • personal-assistant
    • calendar
    • callout-manager
    • dataview
    • find-unlinked-files
    • hotkeysplus-obsidian
    • markdown-table-editor
    • obsidian-advanced-uri
    • obsidian-charts
    • obsidian-contextual-typography
    • obsidian-emoji-toolbar
    • obsidian-frontmatter-tag-suggest
    • obsidian-git
    • obsidian-hider
    • obsidian-hover-editor
    • obsidian-html-plugin
    • obsidian-image-toolkit
    • obsidian-kanban
    • obsidian-memos
    • obsidian-minimal-settings
    • obsidian-quiet-outline
    • obsidian-reminder-plugin
    • obsidian-snippet-downloader
    • obsidian-style-settings
    • obsidian42-brat
    • quickadd
    • readwise-official
    • table-editor-obsidian
    • tag-search
    • tag-wrangler
    • tasks-calendar-wrapper
    • templater-obsidian
    • obsidian-importer
    • telegram-sync
    • better-word-count
    • novel-word-count
    • send-to-ghost
    • surfing
    • auto-card-link
    • gemini-assistant
    • note-gallery
    • code-styler
    • canvas-mindmap
    • apple-books-import-highlights
    • advanced-canvas
    • homepage
    • mononote
    • tabs
    • canvas-css-class

    snippets

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

    References

    1. User Scripts - Templater
    2. Dataview


沪ICP备19023445号-2号
友情链接