介绍
Dice Roller 是 Obsidian 的一个插件,可以用来掷骰子,嗯,就是你想的那个🎲️。我第一次见到这个插件也觉得没什么用,可能就和鲤鱼王的水溅跃差不多。而且 GitHub star 不过 200,各项指标和 5.1k stars 的 Dataview 相比确实不够看。
其貌不扬的 Dice Roller 除了用作桌游判定,还能够解决人生三大烦恼:早上吃啥、中午吃啥、晚上吃啥。
语法
文档: Dice Roller
List Roller
下面这行代码修改自 List Roller,首先在 Das Kapital 里做个列表,然后在列表末尾赋予一个 id(统一用 dice1234
的格式):
# Das Kapital
- 就
- 像
- 这
- 样
^dice1867
然后直接在 inline dice roller 代码中引用即可:
dice: 4d[[Das Kapital^dice1867]]
效果是随机抽取列表中的一项,不会抽到列表之外的内容,所以 Linter 和 tag 啥的可以放心大胆地用。不过这样还是有个缺点,原本的 section roller 是 quote 格式,骰子按钮可以常驻,现在扔一次就要手动点出去才会再次显示。
Formula
使用 dice: <formula>
的格式,formula
可以在设置中自定义,一开始尝试创建 RandomJournal
的 alias 没成功,因为我在 formula
里写的是 dice: #journal|link
,而实际上只需要写冒号后面那部分即可,在渲染时空格会被忽略。
// Alias
RandomJournal
// Formula
#journal|link
// Usage
dice: RandomJournal
dice: #journal|link
Dataview
Dataview in Dice Roller 就更有意思了,比如下面这一行,会返回一个带有 #journal
标签的笔记链接,注意是链接,点击可以直接跳转的那种。
dice: #journal|line
也可以直接使用 Dataview Query,不过 where 和 from 不能同时使用,只能用 list 不能用 table。比如下面这行,效果是在今天创建,且修改时间最近的 10 条笔记中随机抽取一个,并返回链接。
dice: dv(list where file.cday = date(today) sort file.mtime desc limit 10)|link
Dice-mod
有的时候🎲️只需要 roll 一次,希望能够保留结果(比如用作模板的时候),就可以使用 Dice-mod,格式看起来很简单,但实际不知道怎么用,贴下 相关 issue,有空再研究吧。
dice-mod: 3d100 + 12|noform
实例
外卖
Dice Roller List Roller 最大的贡献就是解决了「今天吃啥」的历史性难题。实际上这个用法并不局限于外卖列表,也可以用在菜谱看板上,随机 roll 一个带做法和预览图的菜谱,想吃就跳转开始做,不想吃就重新 roll。
首先,新建一个名为 Takeout
的笔记,然后打开饿了么 / 美团 / Uber Eats / foodpanda /随便什么平台,输几个常点的外卖:
# Takeout
- ¥15 肠粉
- ¥17 麻辣烫
- ¥20 炸鸡
- ¥25 すき家
- ¥45 寿司/刺身
- Taco #todo
^dice3150
然后在 Dice Roller 模板中进行下面的设置:
// Alias
RandTakeout
// Formula
2d[[Takeout^dice3150]]
最后在日记模板里加上外卖骰子:
# {{date: YYYY-MM-DD}}
今天吃啥:
`dice: RandTakeout`
每日一文
笔记的最终目的并不是储存,而是使用。不是说把想看的内容复制进 Obsidian 就万事大吉,知识不会趁你不注意自己渗透进脑子里。「看了」不等于「会了」,所以我在日记模板中加入了类似「每日一句」的「随机一文」的功能,用于每日复习过往记录的笔记。
Obsidian 提供了 random note 的核心插件,绑定快捷键后即可快速开启随机笔记,但这个插件确实过于随机,并且没有提供排除特定文件/文件夹等进阶功能,对于笔记占大头的 vault 而言,roll 10 次可能有 7 次是日记,我已经在日记模板中加入了「去年今日」功能,所以默认插件的用处不大,于是用 Dataview 和 Dice Roller 自己实现了该功能,也不需要用到 DataviewJS。
废话不多说,直接上代码:
// Alias
RandOld
// Formula
dv(list where file.mday + dur(90 days) < date(today) and !contains(file.name, "W") and !contains(file.etags, "walkthrough") sort file.mtime asc limit 30)|link
// Usage
dice: RandOld|noform
如果看过前面一篇 Obsidian Dataview 入门实例,理解起来应该没什么难度。
只简单解释一下筛选笔记的几个条件:
- 90 天以上未修改(避免同一条笔记频繁出现)
- 文件名不包含
W
(排除周记,可以自己拓展) - 笔记不包含
walkthrough
标签(排除特定标签) - 按照文件修改时间升序(从旧到新)
- 限制 30 个结果(和 4 组合,确保笔记足够旧且足够随机)
结语
Dice Roller 用好了会是很强大的工具,不过这玩意儿和桌游这么契合,居然没有 Obsidian 游戏插件/模板,利用 dice-mod 明明可以实现不错的玩法!