Obsidian 插件篇 -Dataview 联合 Templater 脚本示例

来源

  • 触发点:在学习 Dataview 与 Templater 插件后,尝试结合使用,记录此文
  • 首次记录:2025-02-21
  • 作者:huan

洞见

Dataview 和 Templater 两个插件在 Obsidian 的插件市场中都举足轻重,那么联动后起到的作用自然是 1+1>2 的。本篇文章主要介绍 Dataview 联合 Templater 的使用。研究的不多,只收集却没有深入验证,以下是具体的脚本内容。

详情

📌 提示:以下代码中用 js 作为语言标识,以避免本地自动执行。若要在 Obsidian 中测试运行,请将代码块的标识从 ```js 改为 ```dataviewjs

Dataview 联合 Templater

  • 步骤

    • 同时安装了 Templater 以及 Dataview ,并启用。
    • 将代码放在模板文件中,用 Templater 调用这个模板即可。
  • 预期效果

    • 可以快速输出包含搜索关键词的文件,且生成表格,以下为对应的代码。
    <%*
    const query = await tp.system.prompt("请输入要搜索的关键词");
    if (!query) return;
    const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    -%>
     
    ## 搜索结果:“<%- query %>"
    ```js
    const query = "<%- escapedQuery %>";
    const files = app.vault.getMarkdownFiles();
    dv.paragraph("🔍 搜索关键词: " + query);
    dv.paragraph("📂 扫描文件数: " + files.length);
     
    const results = [];
    const MAX_RESULTS = 50;
     
    for (const file of files) {
      if (file.path ===  "<%- tp.file.path(true) %>") continue;
     
      try {
        const basename = file.basename;
        const cache = app.metadataCache.getFileCache(file);
        const frontmatter = cache?.frontmatter;
        const id = frontmatter?.id ?? "";
     
        const matchInName = basename.toLowerCase().includes(query.toLowerCase());
        const matchInId = id.toString().toLowerCase().includes(query.toLowerCase());
     
        if ((matchInName || matchInId) && results.length < MAX_RESULTS) {
          const displayId = id ? String(id) : "";
          results.push([`[[${file.path}]]`, displayId]);
        }
      } catch (e) {
        console.warn("处理文件失败:", file.path, e);
      }
    }
     
    dv.paragraph("✅ 匹配文件数(预估): ≥" + results.length);
    if (results.length === 0) {
      dv.paragraph("❌ 未找到文件名或 id 包含 \"" + query + "\" 的笔记。");
    } else {
      if (results.length === MAX_RESULTS) {
        dv.paragraph(`⚠️ 结果较多,仅显示前 ${MAX_RESULTS} 条。`);
      }
      dv.table(["文件", "id"], results);
    }

演化日志

  • v0.1 (2025-02-21):初始版本
  • v0.2 (2025-03-13):增删内容,润色笔记语句
  • v0.3 (2025-10-27):补充来源、洞见、详情、演化日志、待办事项,完善笔记结构
  • v0.4 (2025-10-27):重写示例脚本并验证正确性

待办事项

  • 发掘更多 Dataview 与Templater 插件结合的需求,提高效率。