从 Notion 到 Obsidian:我当前的笔记 Setup

9 分钟

用了几年 Notion,功能上没什么不满,但总有些地方让我别扭。

一个是数据归属的问题。笔记存在 Notion 的服务器上,想导出试试就知道有多麻烦——格式乱、图片链接失效、文件夹结构丢失。我开始认同一个理念:文件优先于应用。笔记就该是一堆 markdown 文件,Finder 里能直接看到,换个编辑器也能打开。Obsidian 正好满足这点,所有内容就是一个普通文件夹,没有私有格式,没有数据库锁定。

另一个是移动端的体验。Notion 手机 App 启动太慢了,有时候走在路上突然想记点什么,打开 App 等它加载,等着等着念头就跑了。后来我干脆用 Apple Notes 先记,回头再搬到 Notion——这已经违背了笔记软件的初衷。Obsidian 移动端打开很快,随手就能写,这个体验差距一旦感受到就回不去了。

再加上 Obsidian 插件生态丰富、界面清爽,试用一段时间后就彻底迁移了。


文件组织

我的文件组织方式参考了 Steph Ango(Obsidian CEO)的个人库结构,核心思路是「扁平化 + frontmatter 分类」。

他的理念是避免文件夹嵌套,不想承担「这篇笔记该放哪个文件夹」的心智负担。写完就扔在根目录,分类交给 frontmatter 元数据,需要找的时候靠搜索。我基本沿用了这个思路,做了一点调整。

大部分笔记直接放在库的根目录。几个功能性文件夹各司其职:

  • Templates 放模板
  • Clippings 放浏览器插件一键保存的文章
  • Attachments 放图片和附件
  • References 放「外部世界」的东西——书籍、电影、地点、人物,这些不是我写的内容,是我对外部事物的记录
  • 00 Journal 放日记/随记,数字前缀让它排在文件列表最前面,方便点击

Steph Ango 的做法是为每种内容类型建立模板:Book Template、Movie Template、Place Template……新建笔记时选对应模板,frontmatter 自动填好该有的字段。我也照做了,目前有博客文章、剪藏、日记、电影、书籍、人物、旅行等十几个模板。这样做的好处是以后用 Bases 查询时字段是统一的,不会漏填。

模板列表

根目录还有一些「分类索引」文件,比如 书籍.md电影.md博客.md,里面嵌入对应的 Base 视图,点进去就能看到这个分类下的所有笔记。相当于 Notion 里一个 Database 页面的入口。

分类不靠文件夹路径,靠 frontmatter 里的 categoriestagsstatus 这些字段。比如一篇博客文章的 frontmatter 长这样:

categories:
  - "[[博客]]"
tags:
  - blog-posts
status: draft

然后用 Obsidian 的 Bases 功能,按这些字段生成不同的视图——所有草稿、已发布的文章、按分类筛选。体验接近 Notion 的 Database,但底层还是纯 markdown 文件,随时可以用其他工具打开。 博客视图


界面与插件

主题用的 Minimal,干净、可定制。字体换成了 SF Mono 和 Noto Sans SC,行宽设成 40(大概对应 700px 左右),阅读起来比较舒服。

插件装得不多,十个左右,常用的几个:

Dataview 是核心,把笔记当数据库查询,配合 Bases 生成各种视图。比如列出所有未完成的任务、统计本月写了多少篇笔记,都靠它。

File Explorer++ 用来隐藏不常用的文件夹。Templates、Attachments 这些平时不需要在侧边栏看到,藏起来保持界面干净。

Double Shift 让我按两下 Shift 键呼出快速切换面板,比默认的 Cmd+O 顺手,可能是 JetBrains IDE 用习惯了。

Pangu 自动在中英文之间加空格,写完不用手动调整排版,强迫症福音。

Tasks 管理任务,支持截止日期、重复任务,还能用 Dataview 查询聚合。

Excalidraw 偶尔画个流程图或示意图,直接嵌入笔记里。


日常使用

每天打开 Obsidian 先看 Daily Note。我的日记模板分成几块:

Focus 放今天要做的事,用 Tasks 插件的格式写,带截止日期。 Log 是时间线,随手记录做了什么、想到什么,带上时间戳。 Inbox 存当天遇到的链接或碎片信息,之后再整理归档。

写博客的流程:新建笔记,套用 Blog Post 模板自动填好 frontmatter,然后开始写。写完把 statusdraft 改成 published,跑一下同步工具,文章就发布了。 博客文章元数据 剪藏网页用 Obsidian Web Clipper 浏览器插件。我针对不同网站配置了不同的模板:豆瓣电影和书籍会自动抓取评分、导演、作者等信息;GitHub 仓库会提取 star 数和描述;YouTube 视频会保存频道和时长;播客会记录嘉宾和时间戳。一键保存到 Clippings 文件夹,frontmatter 自动填好,不用手动整理。

Web Clipper 模板

在 GitHub 仓库页面点击插件图标,会自动识别到 GitHub 模板并填充仓库名、描述、star 数等信息,确认后一键保存。

Web Clipper 使用示例


博客发布自动化

我写博客也在 Obsidian 里完成,写好后需要同步到博客仓库,博客用的 Astro 框架,所有的文章都在指定的目录,每次要从Obsidian 中手动复制粘贴到博客的仓库太麻烦,于是写了一个命令行工具 sync-blog 来自动化这件事,还创建了自动化这个发布过程的 claude skill,想要发布只写在启动 claude,告诉它:发布博客,它会自动做完这一切。

工作流程很简单:扫描 Obsidian 库里所有 markdown 文件,解析 frontmatter,找出 tags 包含 blog-postsstatus 等于 published 的文件,复制到博客仓库的指定目录,然后自动 git commit 和 push。

同步规则写在 config.yaml 里:

rules:
  - name: published-posts
    filters:
      tags:
        contains: blog-posts
      status:
        equals: published
    targetDir: src/content/posts

  - name: published-notes
    filters:
      tags:
        contains: blog-notes
      status:
        equals: published
    targetDir: src/content/notes

支持多种过滤条件:equals(精确匹配)、contains(数组包含)、matches(正则)、exists(字段存在)。不同类型的内容可以同步到不同目录。

工具还会检测「孤儿文件」——博客仓库里存在、但 Obsidian 里已经删除或取消发布的文件,运行 npm run sync -- --clean 可以一并清理掉。

整个发布流程就是:写完 → 改状态 → 跑命令。不用离开 Obsidian,不用手动操作 git。博客仓库托管在 GitHub,push 之后会自动触发 Vercel 的构建部署,几十秒后网站就更新了。从写完到上线,全程自动化。

vercel自动构建


最后

不想把这篇写成 Notion vs Obsidian 的对比评测。对我来说选择 Obsidian 的理由很简单:文件是自己的,格式是通用的,界面够清爽,插件够用。

工具是手段。找到适合自己的就好。