模板片段

本贴最后更新于 663 天前,其中的信息可能已经沧海桑田

概述

模板片段用于在光标插入符位置快速插入之前设置好的文本内容,支持变量。模板片段使用 .md 后缀文件,存放在工作空间 data/templates 文件夹下。

编写模板

模板使用的是 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
  • name:该变量用于插入当前文档命名
  • alias:该变量用于插入当前文档别名
  • queryBlocks:该函数用于查询数据库,返回值为 blocks 列表,参数为 SQL 语句:.action{sql "SELECT * FROM blocks LIMIT 7"}
  • querySpans:该函数用于查询数据库,返回值为 spans 列表,参数为 SQL 语句:.action{sql "SELECT * FROM spans LIMIT 7"}
  • parseTime:该函数用于将时间格式的字符串解析为 time.Time 类型,以便使用更多格式化方法渲染该时间

queryBlocksquerySpans 支持类似 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 年的天数。

上架模板集市

请参考社区集市 README

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22338 引用 • 89385 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...