模板片段
概述 模板片段用于在光标插入符位置快速插入之前设置好的文本内容,支持变量。模板片段使用 .md 后缀文件,存放在工作空间 data/templates 文件夹下。
编写模板 模板使用的是
Go 编程语言的文本模板 进行实现,如果你对此有了解的话,可以实现一些程序逻辑在里面,比如比较逻辑、迭代逻辑等。另外,为了避免语法冲突,模板语法使用
.action{action} (而不是
{{action}} )。
我们通过开源项目 Sprig (GitHub repo: Masterminds/sprig) 内置了一些变量和函数来丰富模板。比如可通过
.action{now | date "2006-01-02 15:04:05"} 来渲染当前时间,更多用法请参考
Sprig 帮助文档 (
中文版 )。
关于日期时间格式化有个细节需要
注意 :Go 编程语言的格式化比较特殊:不是使用
yyyy-MM-dd HH:mm:ss ,而是使用
2006-01-02 15:04:05 这个固定时间格式(
知乎讨论 )。
除了 Sprig 内置的变量和函数,还支持如下变量和函数:
title :该变量用于插入当前文档名。比如模板内容为 # .action{.title} ,则调用后会以一级标题语法插入到当前文档内容中
getHPathByID :该函数用于返回块 ID 对应块的可读路径
queryBlocks :该函数用于查询数据库,返回值为 blocks 列表
.action{$today := now | date "20060102150405"}
.action{$blocks :=queryBlocks "SELECT * FROM blocks WHERE content LIKE '?' AND updated > '?' LIMIT ?" "%foo%" $today "3"}
querySpans :该函数用于查询数据库,返回值为 spans 列表
.action{querySpans "SELECT * FROM spans LIMIT ?" "3"}
querySQL :该函数用于查询数据库,返回值为结果集
.action{querySQL "SELECT * FROM refs LIMIT 3"}
.action{ (statBlock .id).RuneCount} .action{ (statBlock .id).WordCount}
runeCount :该函数用于返回字符串中的字符数
wordCount :该函数用于返回字符串中的字数
parseTime :该函数用于将时间格式的字符串解析为 time.Time 类型,以便使用更多格式化方法渲染该时间
Weekday :该函数用于返回周几 Sunday=0, Monday=1, ..., Saturday=6
WeekdayCN :该函数用于返回周几 Sunday=日, Monday=一, ..., Saturday=六
WeekdayCN2 :该函数用于返回周几 Sunday=天, Monday=一, ..., Saturday=六
调用模板 在光标插入符位置,通过 / 选择模板来触发模板搜索,找到需要插入的模板后 回车 即可。
一个示例
plaintext
.action{$before := (div (now.Sub (toDate "2006-01-02" "2020-02-19")).Hours 24)}
.action{$after := (div ((toDate "2006-01-02" "2048-02-19").Sub now).Hours 24)}
今天是 `.action{now | date "2006-01-02"}`。
* 距离 `2020-02-19` 已经过去 `.action{$before}` 天
* 距离 `2048-02-19` 还剩 `.action{$after}` 天
$before 和 $after 定义了两个变量,分别记录当前日期距离 2020 年和 2048 年的天数。
上架模板集市