模板片段
概述
模板片段用于在光标插入符位置快速插入之前设置好的文本内容,支持变量。模板片段使用 .md
后缀文件,存放在工作空间 data/templates 文件夹下。
目前请使用其他文本编辑器编写模板,后续思源将支持内置编辑。#TODO#
编写模板
模板使用的是 Go 编程语言的文本模板进行实现,如果你对此有了解的话,可以实现一些程序逻辑在里面,比如比较逻辑、迭代逻辑等。另外,为了避免语法冲突,模板语法使用 .action{action}
(而不是 {{action}}
)。
我们通过开源项目 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}
,则调用后会以一级标题语法插入到当前文档内容中 -
id
:该变量用于插入当前文档 ID -
queryBlocks
:该函数用于查询数据库,返回值为 blocks 列表,参数为 SQL 语句:.action{sql "SELECT * FROM blocks LIMIT 7"}
-
querySpans
:该函数用于查询数据库,返回值为 spans 列表,参数为 SQL 语句:.action{sql "SELECT * FROM spans LIMIT 7"}
queryBlocks
和 querySpans
支持类似 SQL 预编译语句的变参列表,方便传入参数:
.action{$today := now | date "20060102150405"}
.action{$blocks :=queryBlocks "SELECT * FROM blocks WHERE content LIKE '?' AND updated > '?' LIMIT ?" "%foo%" $today "3"}
调用模板
在光标插入符位置,通过 /
选择模板来触发模板搜索,找到需要插入的模板后回车即可。
一个示例
.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 年的天数。
上架模板集市
上架前请确认你的模板仓库根路径下至少包含这两个文件(仓库示例):
-
template.json(请确保 JSON 格式正确)
-
preview.png(请压缩图片大小在 128 KB 以内)
确认无误以后请通过对社区集市仓库发起 pull request,修改 templates.json 文件。该文件是所有社区模板仓库的索引,格式为:
{
"repos": [
"username/reponame@commithash"
]
}
其中 commithash
请填写你的模板仓库上最近一次发布版本的 Git 提交哈希值,请使用完整哈希值,不要使用 7 位短值。
更新
如果你开发的模板更新了版本,请记得:
-
更新你的模板配置 template.json 中的 version 字段
-
再次对社区集市发起 Pull Request
链接到此文档的相关文档
templates
用于保存