📑 模板说明

🗂️ 模板对应

模板type什么时候用
notenote📝 随手记、想法、一般笔记
conceptconcept💡 想弄懂的概念、原理、判断标准
practicepractice🧪 实验、评测、项目、踩坑
configprompt | skill | mcp | agent | model⚙️ 可复用 AI 配置:提示词、skill、mcp、agent、模型接入
reftool | site | article📚 工具、网站、文章
daily无📅 每日笔记,由核心插件自动生成

新建笔记时选好模板,把 type 填成合适的值。分类系统只有 type 一个字段,没有 kind、ref_kind 这些子字段,也没有分类 tags。

🏷️ type 词表

  • 📝 note 随手记、想法
  • 💡 concept 概念、原理、判断标准
  • 🧪 practice 实验、评测、项目、踩坑
  • 💬 prompt 提示词
  • 🧩 skill agent skill
  • 🔌 mcp MCP server 配置
  • 🤖 agent agent 配置
  • 🧠 model 模型接入配置方法
  • 🧰 tool 工具、应用
  • 🌐 site 网站、文档站
  • 📄 article 文章、教程

type 是列表,一篇笔记一个或多个值,可以组合,例如 [tool, agent]。带多个 type 的笔记会同时进首页所有相关的表——它同时满足多个查询条件。

🧾 其他字段

  • status:draft → active → archived;broken 表示链接失效待重验
  • url:资源本体链接
  • source:内容来源(文章、教程)
  • icon:文件树和标签页里显示的 emoji,内容专属、不跟 type 绑定
  • tags:不用作分类,只在有跨类标记需要时才加(例如 #ai 标记 AI 相关、#topic/music 标记非 AI 主题)

三个日期字段

格式统一 YYYY-MM-DD HH:mm:ss:

  • created:笔记首次创建时间。自动,Obsidian Linter 在新建时写入一次,之后不变
  • modified:最后一次保存修改的时间。自动,每次保存内容变更时更新
  • verified:上次亲自确认文中外部链接仍可打开的时刻。人工,链接类笔记必填,复核后手动更新

verified 必须独立于前两个:它是「我确认过链接能打开」这个动作的记录,只有你亲手点开才该更新。合并进 modified 会让复核操作污染真实的修改时间,也会让首页「链接超半年未验证」的告警失去输入。

模板不预置 created / modified:新笔记从模板创建后由 Linter 从零写入,逻辑更简单,也避免 Linter 把预置的空值当成「字段已存在」而跳过写入。verified 则按需手填。

🔗 链接与附件约定

  • 外链用 markdown 语法 [描述](https://…),不裸贴 URL
  • 本地笔记互链用 wikilink [[笔记名]],不加路径
  • 图片 PDF 拖进 附件/,Obsidian 自动管理路径
  • 需要长期维护的链接放 verified 字段,别只写在正文

⚠️ 已验证的坑

Dataview(插件已移除,仅存档):

⚠️ Dataview 插件已于 2026-09-29 移除,首页 11 个块全部改用原生 Bases。以下 6 条对当前 vault 已全部失效,保留仅供判断——迁移过程、失败路径与 Bases 侧的对应写法见 Dataview 迁移到 Bases 实践。

  • 配置改完必须重载 Obsidian(文件 → Reload app)。Dataview 只在启动时读一次配置,热重载不生效
  • DQL 没有 datetime(),只有 date() / dur()
  • dataviewjs 里 now 不是 Luxon DateTime、没有 diff。算天数用原生 Date.now() / Date.parse()
  • TABLE WITHOUT ID 会丢掉第一列的 wiki 链接列。要可点击链接就保留默认 ID 列
  • 链接必须给完整 URL,缺协议头的相对路径不会被识别为字段
  • type 是列表后,DQL 必须用 contains(type, "x")。type = "x" 打不上列表,会静默返回空而不是报错——表看起来就是空的,容易误以为没笔记
  • dataviewjs 里列表字段是数组,判空要归一化:Array.isArray(p.type) ? p.type.length : (p.type ? 1 : 0)。单判 !p.type 只挡住 undefined,空列表 [] 挡不住,会漏报

代码块:

  • 代码围栏不能包在 HTML 块(如 <details>)里,Obsidian 不解析,Linter 会当正文格式化
  • 代码围栏前后各留一个空行

Iconize(obsidian-icon-folder):

  • 图标配在 frontmatter 的 icon: 字段(一个 emoji),这是唯一要维护的地方。插件把它同步进 data.json 渲染,所以 iconInFrontmatterEnabled 必须是 true
  • 单个文件改完立即生效,不用重载:保存笔记会触发 metadataCache.on('resolve'),插件在线同步(实测验证)。但启动 / 重载不会批量同步——那批 resolve 事件在插件注册前就触发了,启动时全漏。所以批量改过一批文件后(比如一次性给 17 篇补 icon:),得跑一次设置里的 Refresh icons from frontmatter 才补齐
  • ⚠️ Refresh 按钮会删图标:凡 frontmatter 没有 icon: 的 md 就 removeFolderIcon,不管图标原来怎么设的。所以每个 md 都得有 icon:。新建笔记从模板出来时模板里已带 icon:,不会漏
  • ⚠️ 别在开关开着时删 icon: 字段:live handler 会当成「图标被移除」调 removeSingleIcon,把 data.json 里那条删掉。要撤 frontmatter 模式,先关开关,再删字段
  • data.json 顶层是插件的渲染缓存,键是 vault 相对路径:文件夹写纯字符串 "模板": "📑",文件写对象 "笔记/x.md": {"iconName": "🧠"},两种形状都认。别手动改它——Obsidian 一保存设置就用内存副本覆盖整个文件,正在手改时会全被冲掉
  • 别把图标写进 settings.rules——那套是自定义规则,字段名是 rule(按正则匹配),还要 for(folders/files)和 order;字段名写错不报错,只是永远匹配不上
  • Obsidian 这版文件树本身不渲染默认图标(文件只显文件名,图片/PDF 等多一个类型角标,文件夹只有一个折叠箭头),所以 emoji 是那一行里唯一的图标,不用写 CSS 隐藏默认图标。.nav-file-icon 在本版是死 CSS,JS 里从不创建;设置里的「默认笔记图标」在本版也不存在
  • 正文 :emoji: 行内语法不支持 emoji:shortcode 只匹配 \w{1,64},且走 icon pack SVG 查找,emoji 不走那条路。想在正文显示 emoji 直接敲就行

🔗 相关

  • 首页 — 首页,分类词表和使用约定入口
  • 使用约定 — 笔记规则、归档规则、搜索技巧