Obsidian随机生成读书笔记

现在阅读,以多看和微信读书为主,在阅读过程中会做笔记。已经把这些笔记都变为 Markdown 文件统一用 Obsidian 管理起来,希望可以把其中标记出需要复习的内容,每天随机生成,便于复习巩固。
Roam Research 有一个插件叫 Roam42,可以随机生成指定标签的笔记到新的笔记中,以便于复习。之前在推特上看 @Jiayuan 就是用这种方式管理笔记的,非常羡慕这个功能。
后来经过摸索,发现 Dataview 可以在 Obsidian 中使用 JS 实现所有自己想要的效果,包括随机生成笔记复习这件事。我写了一个代码片段,可以随机生成 3 个带指定标签的读书笔记段落。

具体代码块如下,term 表示标签名 #Quote,ranNum 表示随机数 3,可以根据自己的需要修改。将以下内容粘贴至笔记中,预览。拖动 Banner 可以重新生成随机笔记。
```dataviewjs
// 设定随机笔记标签关键词
const term = "#Quote";
const files = app.vault.getMarkdownFiles();
// 遍历所有文件,收集带关键词的行 + 文件名
const results = [];
// 设定踢除规则1:当前脚本所在文件
const currentFilePath = dv.current().file.path;
// 设定踢除规则2:文件名包含在 excludeText 字段中,全部排除
const excludeText = ["",""];
const arr = files.map(async (file) => {
// 执行踢除规则
if (file.path === currentFilePath || file.basename.includes(excludeText)) return;
const content = await app.vault.cachedRead(file);
const lines = content.split("\n").filter(line => line.contains(term));
lines.forEach(line => {
results.push({
text: line.trim(),
fileName: file.basename, // 文件名(不带后缀)
path: file.path // 文件完整路径
});
});
});
Promise.all(arr).then(() => {
if (results.length === 0) {
dv.paragraph("未找到带 #Quote 的内容");
return;
} // 随机抽取 3 条
const ranNum = 3;
const shuffled = [...results].sort(() => 0.5 - Math.random());
const selected = shuffled.slice(0, ranNum); // 输出:内容 + 双链文件名
selected.forEach(item => {
dv.paragraph(`${item.text} ——[[${item.fileName}]]`);
});
});
其他更多更详细的功能可以看知乎上的一个全面解读 Dataview 编写的教程 。
Obsidian 系列文章
- 2026.9.16 update:随机笔记 Dataview 脚本增加笔记文件名显示。



评论