一文掌握Obsidian模板

关键字

  • Obsidian教程
  • 模板
  • 插件

2021年4月7日声明

插件Templater在2021年4月6日进行了更新,其内部模板(后称内部模板)发生了极大的变化,我会在不影响工作的前提下尽早经行更新。读者如不耐其烦,可先行浏览Templater官方文档。此次更新对于本文中关于Obsidian核心插件模板内容没有任何影响。

约定和声明

本文中会提及三种形式的Obsidian模板

  1. 由Obsidian作者自行创建的核心插件Template,在翻译为中文后被称为“模板”。该插件提供了一组变量参数,可在被调用时自动替换文件名以及日期时间信息。
  2. Obsidian第三方插件Templater提供了更为丰富的变量,插件作者也将其称之为“模板”,在日常实践中单独使用Templater即可。安装Templater当然可以利用Obsidian客户端,同归之径是从GitHub的Templater代码仓库下载。
  3. 使用上述两种插件后,可在文档中添加大量变量以备后续之用。这些具备“框架”性质的文档,也应被称作“模板”。

凡此种种必须加以区分,否则思绪错综难于理解。因此,对各种使用情景辨析如下:

  1. Obsidian核心插件Template在简体中文UI中被定名为“模板”。为维持一致性,文中所有提及该插件时都会使用“模板”。
  2. 模板之所以强大高效,在于内置“变量”在被调用时可被替换为对应的信息,以不变应万变。例如,核心插件“模板”所含变量{{date}}会被替换为当天日期。后续为核心插件”模板”内置的“变量”均称为”模板变量“。
  3. 第三方插件Templater是核心插件”模板“的极大超集。对应于”变量“也加以区分:其一为Templater系统所内置,被称为”内部变量“。其二为使用者自定予以定制,可称为”定制变量“。
  4. 对于使用了众多“变量”的文本文件,我做了变通处理,全文做“模板样章”或“样章”使用。

概述和背景

我们大约都听说过这样一句话:

复杂的事情简单做,简单的事情重复做,重复的事情用心做。

确实,无论是专家、行家还是赢家,唯有做事才能成就自己和周围的一切。而本文要阐述的就是如何在Obsidian中使用模板(Template)“套壳”撰写文章。在日常实践中,使用第三方插件Templater即可。但假如使用者更加注重安全和稳定,亦或无法下载安装第三方插件,Obsidian核心插件模板也有其实用之处。

易学易用的核心插件“模板”

Obsidian中的绝大多数功能都是以插件的形式提供的,有些插件甚至为Obsidian的开发者自行研发,这些插件提供了很多非常基础和实用的功能。正式透过这些被称为核心插件(Core plugins)的功能,在使用Obsidian的过程中渗透出卡片式写作(Zettelkästen)的文化和哲学。本文所要着重阐述的模板就是其中之一。只需少许学习外加一点巧思,就能非常便利地为描摹出文章的大致框架。

“模板”基础概念

Obsidian核心插件模板,相较于第三方插件Templater更简单且易于掌握。在Obsidian中,无论何种类型的插件,在使用之前都需予以手动开启。操作路径依次为:

设置 按键→ 核心插件页面 → 开启模板选项

开启Obsidian核心插件模板之后,还需要配置适当才能使用。其操作路径为:

设置按键 → 插件选项选区 → 模板页面

配置核心插件“模板”

重点在于:

  1. 模板样章须集中存放,如此便于配置时予以指定。依我使用习惯,所有的样章都贮存于010-Templates目录。其中,既有日记、文章,也有todo-list其他形式的样章。需要注意的是,文档库彼此独立,相互之间都可单独安装、设置不同的插件和主题。因此,样章文件夹必须与文档库一一对应,样章文件夹也必须置于文档库统辖之内
    我的“模板文件夹”中保存了多种不同目的和作用的样章文件
  2. 我们可以指定默认的日期时间显示格式。一旦设定妥当,今后使用{{date}}日期变量和{{time}}时间变量表征当前日期和时间。具体说明配置细节,请参阅下一条目。
  3. 内部变量就是用来折腾的,假如不习惯样例中的格式,可以学习Moment.js中相关日期和时间格式的文档说明后自行调整[1],适用性囊括核心插件模板和第三方插件Templater,包括了所有关于日期和时间格式化字符串的描述。
  4. 如果怕“污染”模板环境,可在调用内部变量时饰以参数,用于调整显示效果。例如:{{date:MMM. Do. YYYY}}表征的是形如Mar. 10th. 2021的日期格式。其中:
    • {{date}}是日期变量,代表当天日期。而 MMM. Do. YYYY是其参数,被才成为格式化字符串,用于说明以何种方式进行显示。需要特别注意的是,:负责在内部变量与参数施以间隔,不可或缺。
    • {{date:MMM}}代表三位字母的英文月份简写(即Mar)。
    • {{date:Do}}表示英文序数词类型的日期(即10th
    • {{date:YYYY}}为四位数字年份(即2021)。
    • 穿插于格式化字符串之间的符号.空格字符)仅用于占位显示。占位字符当然绝非仅限此两种,除特定意义字符外,绝大多数中英文信息都可胜任。
    • 如此格式化字符串使用起来极为繁复,如不纠结细节,可代之以{{date:ll}}。其显示结果形如Mar 10, 2021
  5. 除了日期变量{{date}}和时间变量{{time}}之外,变量 {{title}}用于表示当前文件(标题)的名称。

谜题时间
读者在学习过日期和时间变量,以及格式化字符串的相关知识后,是否能设计形如2021年3月25日 星期4的日期字符串?

如何“套壳”样章?

有了样章,还需要套壳才能使用。但要如何套用?还需要详细阐述。

假设我已在010-Templates(核心插件模板中设定此目录为“模板文件夹”)中创建了样章new-template。其中内容如下:

# {{title}}

{{date}}是个**好日子**,特别是{{time}}更是特别!

我在020-Dailies[2]目录中创建文件我今天的故事。此时,我只需按下快捷热键Ctrl + P开启命令面板。为了加快搜寻速度,不妨键入“模板”二字,插入模板命令随即脱颖而出。键入Enter加以确认。

插入模板

用户样章众多,Obsidian不知所求。在键入“new”后,筛选出了new-template。使用鼠标或再次键入Enter确认。

选择套壳new-template

于是,文档我今天的故事从空无一物变成了下面这般模样:

套壳样章new-template的效果

当然,实际使用时样章不可能如此随意,但陷于核心插件模板能力有限,复杂和实用的演示案例留待下节细数。

远为强大的第三方插件Templater

本文“约定和声明”时既已强调,Templater高能强大之处在于众多不同类型的“内部变量”,以及可予订制的“定制变量”。如此搭配,既辖驭了众多而丰富的功能,同时开放接口外扩了灵活性,可以被运用于更多的使用场景之中。

因缘于此,稍作尝试Templater,核心插件模板就被我永久关闭。关闭核心插件模板的操作路径为:

设置按键 → 核心插件页面 → 关闭模板选项

安装并配置Templater

安装第三方插件Templater的方法有两种:

  • 通过Obsidian客户端安装,必备条件是需要拥有访问国际化网络的能力。
  • 通过Templater在Github的代码仓库下载后,解压缩至文档库下.obsidian\plugins\目录之中。不幸的是,近来GitHub断断续续也是访问异常。
    除了利用Obsidian客户端进行安装,也可从Templater在GitHub代码仓库下载后安装
除了在客户端中直接安装,也可将下载插件并解压至Obsidian中的插件目录

开启Templater控制权限,操作路径为:

设置按键 → 第三方插件页面 → 开启Templater

之后,通过以下操作路径配置Templater:

设置按键 → 插件选项选区 → Templater页面

配置第三方插件Templater

高效起见,快捷热键也需加以留意:

设置按键 → 快捷键页面 → 搜索Templater

之后,会有如下提示选项可做配置:


使用快捷热键是提升效率的有效途径

本节小结

  1. 安装Templater需要依据网络条件变通解决。
  2. 如果能够使用Templater,则完全可以弃用核心插件“模板”。
  3. 配置时类似于“模板”,必须指定众多样章的存储目录。
  4. 配置选项中的Locale(地区)选项非常重要,会直接影响日期、时间的显示效果。使用“Chinese(China)”还是“English”,需要读者自行权衡斟酌。
    例如:对应于日期变量Thu, Mar 25, 2021 6:06 PM,“Chinese(China)”套壳样章后会替换信息形如2021年3月24日星期三 17:46,而“English”则为Wed, Mar 24, 2021 5:46 PM
  5. 快捷热键可提高使用效率,建议读者熟练掌握。
  6. 定制变量具体见后续小节说明。

Templater中的内置变量

比之核心插件模板,Templater最为直观的印象,就是作者预先定义了大量直接可用的内置变量。这些内置变量灵活可、适用性强,稍加学习即可应用于绝大多数应用场景。

阅读文档通常是学习专业知识的终南捷径,插件作者笔耕不辍在GitHub提供了内部变量的完整说明。我自知浅薄,囫囵翻译之余略加注释,也就冗列于此:

内部变量 参数 功能描述 代码示例 显示效果
{{tp_title}} 取得当前文件的名称 {{tp_title}} 一文掌握Obsidian模板
{{tp_folder}} - vault_path: 取得文本库到当前文件夹的相对路径。取值范围truefalse,默认为false 获取当前目录的名称。 1. {{tp_folder}}
2. {{tp_folder:vault_path=true}}
1. Obisdian教程
2. 写作/技术类/Obsidian教程
{{tp_include}} - f:此为必填项。须指定从文档库开始到某一具体文件的相对路径,将该文件全部内容填充到当前文档中书写有{{tp_include:f="location"}}的位置。 将指定文件中全部内容的填入当前文档。指定文件可为另一样章,其中包含的变量也将解析替换(替换深度10)。 {{tp_include:f="location"}}
{{tp_date}} - f: 指定日期格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: YYYY-MM-DD)。
- offset: 设置偏移天数,例如设定为-7时可获得上周日期(默认值为0)。
取得今日+偏移天数的日期。 {{tp_date:f="ll", offset=7}} Apr 1, 2021
{{tp_yesterday}} - f: 指定日期格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: YYYY-MM-DD)。 取得昨天的日期。 {{tp_yesterday}} 2021-03-24
{{tp_tomorrow}} - f: 指定日期格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: YYYY-MM-DD)。 取得明天的日期。 {{tp_tomorrow}} 2021-03-26
{{tp_time}} - f: 指定时间格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: HH:mm)。 取得当前时间。 1. {{tp_time}}
2. {{tp_time:f="H:m:s"}}
1. 08:36
2. 8:36:9
{{tp_creation_date}} - f: 指定日期格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: YYYY-MM-DD HH:mm)。 获取当前文档创建时的日期。 {{tp_creation_date}} 2021-03-21 13:03
{{tp_last_modif_date}} - f: 指定日期格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: YYYY-MM-DD HH:mm)。 获取当前文档最后修改的日期。 {{tp_last_modif_date}} 2021-03-25 08:36
{{tp_title_date}} - title_f: 指明适用于文档名称中的日期字符串格式。请参考Moment.js中关于格式化字符串的相关文档 (默认格式为: YYYY-MM-DD)。此处设置应与核心插件“日记”中指定日期格式化字符串相同。
- f: 指定日期格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: YYYY-MM-DD)。
- offset: 设置偏移天数,例如设定为-7时可获得上周日期(默认值为0)。
多用于“日记”。可获取文件名中包含的日期 + 偏移天数。 {{tp_title_date:title_f="YYYY-MM-DD_dddd", f="YYYY-MM-DD"}} 2021-03-26
{{tp_title_yesterday}} - title_f: 指明适用于文档名称中的日期字符串格式。请参考Moment.js中关于格式化字符串的相关文档 (默认格式为: YYYY-MM-DD)。此处设置应与核心插件“日记”中指定日期格式化字符串相同。
- f: 指定日期格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: YYYY-MM-DD)。
- offset: 设置偏移天数,例如设定为-7时可获得上周日期(默认值为0)。
多用于“日记”。可获取文件名中包含的日期前一天 + 偏移天数。 {{tp_title_yesterday:title_f=="YYYY-MM-DD_dddd, f="YYYY-MM-DD"}} 2021-03-25
{{tp_title_tomorrow}} - title_f: 指明适用于文档名称中的日期字符串格式。请参考Moment.js中关于格式化字符串的相关文档 (默认格式为: YYYY-MM-DD)。此处设置应与核心插件“日记”中指定日期格式化字符串相同。
- f: 指定日期格式化字符串,请参考Moment.js中关于格式化字符串的相关文档 (缺省格式为: YYYY-MM-DD)。
- offset: 设置偏移天数,例如设定为-7时可获得上周日期(默认值为0)。
多用于“日记”。可获取文件名中包含的日期后一天 + 偏移天数。 {{tp_title_tomorrow_title:title_f=="YYYY-MM-DD_dddd, f="YYYY-MM-DD"}} 2021-03-27
{{tp_daily_quote}} 利用https://quotes.rest提供的API取得每日名言摘引。 {{tp_daily_quote}}
{{tp_random_picture}} - size: 以如下方式设置图片尺寸 <宽>x<高>(默认值为: 1600x900).
- query: 输入一个关键字用于限定选定图片的范围。如需使用多个关键字,彼此之间需要以英文半角,加以间隔。此时,还有另一注意事项:需使用英文双引号"用以在两端定界。(默认值为: 没有搜索关键字)
基于搜索关键字从unsplash.com获取一张随机图片。 {{tp_random_picture:size="800x600", query="beijing"}}
{{tp_title_picture}} - size: 以如下方式设置图片尺寸 <宽>x<高>(默认值为: 1600x900). 基于笔记标题从unsplash.com获取一张随机图片。 {{tp_title_picture:size="800x600"}}
{{tp_cursor}} 将当前位置设定为套壳样章后游标的操作位置。 {{tp_cursor}}

本节重点

  1. Templater提供了更为丰富灵活的内部变量,形式上仍以{{ }}加以包络,但变量命名时以tp开头以避重复。
  2. 比之核心插件模板,Templater对于内部变量配置参数的方式变动较大。所幸日常使用仅需运用Templater一途即可。读者诸君聪明博学在我之上,稍加用心上表“功能描述”、“代码示例”和“输出效果”,定能触类旁通。
    读者读后昏昏欲睡,只因我码字功利粗陋。于此之时,回顾Templater文档有言:

All internal template patterns are prefixed with the keyword tp_ and are placed between double braces like so {{tp_<name>}}. This is to recognize them and to avoid conflicts with user defined templates.
Internal templates accept user arguments, they should be passed like so: {{<template_name>:<argument_name1>=<argument_value1>,<argument_name2>=<argument_value2>}}.
If your argument value contains a special character (, or =) you can add quotes around your argument value like so: <argument_name>="<argument_value>". If you want to use a quote inside quotes, you can escape it like so: \".

Templater中的定制变量

是否还记得配置Templater截图中的我私人订制的变量{{北京天气}}

配置第三方插件Templater

经过Templater解析处理,能实时将天气状况嵌入文档之中。其实,Templater作者在文档示例中也只小露一手,我只有嗟来之能。

Templater定制变量与操作系统指令有关,使用者需要针对电脑操作系统自行订制开发,展现出更为宽阔的适用空间。可惜我学艺不精,仅只掌握了如何查询天气,共享与读者诸君。

定制变量名称 功能描述 适用平台 对应代码 显示效果
{{北京天气}} 利用工具curl从网站wttr.in获取天气信息。低版本Windows如未内置curl,请用户自行下载并置于搜索路径之内。 Windows、Linux、Mac curl "curl -H "Accept-Language: zh-CN" "wttr.in/Beijing?format=2"" ☀️ 🌡️+21°C 🌬️↑19km/h

其中,代码信息对应为:

  1. Beijing是需查询天气的城市名称,仅适用于英文名称。
  2. format=2为天气的实现形式,可选范围1~4,各自有所不同。
  3. Accept-Language: zh-CN,对应于显示语言和本地天气信息样式。

Templater套壳样章

我现在使用的文章写作样章命名为paper-template,形式如下:

---
author: your_name
created: {{tp_date:f="llll"}}
aliases: [{{tp_title}}]
description:
tags:

---

# {{tp_title}}



## 关键字



## 概述和背景




---
## 注释



其中:

  • YAML区metadata大致描述了文档作者、创建时间和其他分类信息,便于日后检索。
  • 一级标题、文档别名,与文档名称相同,一目了然。

需要创建文档时,调用Templater内置的快捷热键Alt + E,即可弹出菜单挑选需要应用的样章。其形式与核心插件“模板”相同:

Templater筛选样章的过程与核心插件模板相同

套壳样章后,会建立类似如下文档:


套壳Templater的文章

本节重点

  1. Templater套壳样章的方法与核心插件“模板”相同,须将所有样章置于配置时指定的“样章文件夹”内。
  2. 套壳时,可使用Templater默认的快捷热键Alt + E,在弹出的对话框内选用具体样章。
  3. 在写作文档的过程中,也可适时填写Templater内置变量或定制变量。如需解析时,可使用默认快捷热键Alt + R自动完成。

注释


  1. Obsidian模板与Moment.js:毫无疑问,Obsidian在设计模板功能时是使用到了Moment.js这个“轮子”。所以,在修改默认日期和时间格式时,Obsidian作者直接让用户参考Moment.js文档。而本文另一个重点介绍的第三方插件同样调用了Moment.js来格式化日期和时间字符串。当然,作为非专业人士的普通用户面对如此庞杂的信息能面心生怨尤,但事实上我们只需查询文档并做少量修改即可。

  2. 套用样章的文件与所处目录无关:套用样章的关键在于配置模板插件时,指定样章文件夹。至于新创建的文件处于何位置,其实与套用样章无关。换言之,只要文件处于文档库内,随时随地可以套用样章,甚至多次套用不同样章。极端示例是样章互为嵌套,此种情景绝少发生。同时,套用样章只是在文末续写,所以非常安全。
    事实上,在我的文档库中020-Dailies目录对应的是另一款核心插件日记。将文档我今天的故事添加于此,只求截图便利,实属下策。当然,读者有何使用习惯纯属审美习惯,不能一概强求。关于笔记分类归档的知识,建议读者自行学习MOC和PARA技术。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344

推荐阅读更多精彩内容