--- excalidraw-plugin: parsed tags: - excalidraw words: 2026-08-22: 3107 2026-08-23: 3094 2026-08-25: 3060 --- ==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving' # 用成链标签作为触发器 ### 1. `#成链` 不是 NoteChain 要求的,是我给脚本选的"选择器" NoteChain 自己**完全不认 `#成链` 这个标签**。它只认笔记 frontmatter 里的 `PrevNote`/`NextNote`。`#成链` 纯粹是我写的那个 `notechain_extract.py` 用的**"提取信号"**——脚本扫 Knomo 月归档,看到哪条文里带 `#成链`,就把哪条**复制**进 `Knomo/Atom/`;没带的,一律不动。 所以"什么场景打这个标签"的准确说法是: > **当你觉得某条 Knomo 碎碎念"值得发展成一篇正经笔记/文章"时,就在它身上打个标记,让脚本把它从"句子"升级成"文件",之后才能交给 NoteChain 去成链。** 它就是个"候选入场券"——意思是"这条我想拎出去单独成链",不是"已经链好了"。 ### 2. 但有个真问题:用 `#` 标签当信号,可能会污染你的 tag 系统 你第④条约束说的是"**副本**不能带 tag、不能进 00index 标签页"——脚本确实做到了(副本里所有 `#` 都被剥掉)。 **可是我忽略了一层**:`#成链` 留在了**源 Knomo 记忆**里。而 Knomo 记忆是你的 vault 里真实存在的 `.md`,所以它一旦被打上 `#成链`,这个 tag 就会出现在你全局的 tag 检索、`00index` 的标签 MOC 里——**这正是你明确不想看到的污染**。我当初图省事用了 `#` 前缀,和你"不污染 tag"的原则其实是冲突的。 >[决议] >我觉得没关系。这个标签够突出 > ### 3. 完整场景串一遍 1. 某天你在 Knomo 记了句碎碎念,过几天觉得"这个值得成文" → 在那条文末尾加 `【成链】` 2. 跑 `python3 notechain_extract.py --vault "..." --apply` → 它单独被复制成 `Knomo/Atom/某文件.md`(已剥 tag、剥 todo、记好来源) 3. 在 Obsidian 启用 NoteChain 后,对这篇 Atom 文件用"新建上一篇/下一篇"命令 → 它才真正进入 `PrevNote/NextNote` 链条 ### 附-关于标签的处理 - **副本**(`Knomo/Atom/` 里的文件)已经被脚本剥掉了所有 `#` 标签,不会进 00index 的标签页——你第④条约束照常成立。 - **代价**只在**源 Knomo 记忆**上:被你打过 `#成链` 的那条原文会带一个真实 `#成链` tag,理论上会进入全局 tag 检索 / 00index 标签页。只要你不介意 00index 里多一个 `#成链` 标签(它通常零内容、只是个空标签入口),就完全没问题。 # 用法1-命令行整理碎碎念 **脚本1 把全部内容都跑一遍** ```bash python3 notechain_extract.py --vault "..." --months 2026-07 --all --apply ``` **脚本2 只把带 #成链 的都跑一遍** ```bash python3 notechain_extract.py --vault "..." --months 2026-07 --apply #成链 ``` # 用法2-针对单条笔记加勾子 对任意一篇非排除区笔记 用"新建上一篇/下一篇"命令,亲自试试通用成链(日记 → 日记 是最自然的练手); # Notechain作者原思想总结 ## NoteChain 插件总结:作者"知更鸟在屋顶"想解决什么问题、实现什么效果 ### 一、核心哲学:一句话概括 作者在 GitHub README 中写下了这句标语: > **"Thoughts as river, notes as chain."(思想如河,笔记如链。)** 而驱动他开发这个插件的核心洞察是: > **"Linear output requires linear input."(线性输出需要线性输入。)** --- ### 二、他想解决什么问题? 通过公众号一系列文章的演进,可以看到作者的思考脉络: #### 1. 双链笔记的"网状自由"与"线性输出"之间的矛盾 Obsidian 的双向链接让笔记像大脑一样以**网状结构**自由发散——像根须、像河网,不漏掉任何想法。但作者在实践中发现,当你需要**把观点整理成文章、把主题编纂成书**时,必须把这张网"卷成一条主线"。而 Obsidian 原生并没有提供一种方式来定义"这篇笔记在那一篇之前/之后"的**线性顺序**。 这在作者那篇《Orz__给跪了,当我苦思 Obsidian 笔记顺序为何重要时,〈论语〉开篇三句告诉了我答案!》中体现得最明显——他苦思冥想"笔记顺序为何重要",最终从《论语》"学而时习之"等开篇三句中获得了灵感。 #### 2. 文件资源管理器只能按字母排序,无法反映逻辑关系 Obsidian 默认按文件名首字母排序,笔记之间的邻近关系基本是随机的。即使你用序号前缀,也只是权宜之计,无法灵活调整顺序。 #### 3. 新建笔记脱离上下文 Obsidian 原生的新建笔记功能是"凭空"创建的,与当前笔记没有任何关联。作者在《Obsidian NoteChain 把门都拆了:新建笔记是替换原生功能》一文中明确表示,他要**替换掉原生新建笔记功能**,让每次新建笔记都自动接续在当前笔记之前或之后。 #### 4. 原子笔记散落各处,难以"串联"输出 作者在《赞叹呐,用这款插件,挥舞长鞭,打落篇篇【原子笔记】》一文中表达了他对"原子笔记"的思考——单条笔记是原子的、碎片的,但写作需要把它们像鞭子一样**串起来挥舞**。 --- ### 三、他想实现什么效果? 从公众号文章的演进时间线,可以看到插件功能逐步丰满的过程: #### 第一阶段:建立笔记链(核心功能) - 通过 frontmatter 元数据 `PrevNote` / `NextNote` 定义每篇笔记的前驱和后继,把同主题的笔记串成一条**链** - 提供命令创建前/后/头/尾笔记(建议快捷键 `Ctrl+N`),新建笔记自动接入链条 - 支持 `Alt+←` / `Alt+→` 在链上前后导航,像翻书一样 - 三种方式批量设置笔记链关系(插入节点、按文件夹重建、与 LongForm 插件同步) #### 第二阶段:改造文件资源管理器 - 开启后,文件列表**按链条顺序排序**,而非字母序 - 支持文件夹也参与排序(通过 `FolderPrevNote` + `FolderPrevNoteOffset`) - 支持 Confluence 式的**层级缩进**(通过 `notechain.level`) - 支持拖拽排序 这就是《Obsidian NoteChain 完成目录排序功能》和《Obsidian NoteChain 完成 80%的功能开发》两篇文章的核心内容。 #### 第三阶段:替换原生功能,深度整合 - **替换 Obsidian 原生新建笔记**——每次新建都接续在当前笔记的链上 - 与 Templater、DataView、Tasks、Recent Files、LongForm 等插件深度集成 - 提供双语命令(跟随系统语言),见《我的插件提交了!支持跟随系统的双语命令哦》 #### 第四阶段:从笔记链到"控制中心"(1.1.16 → 1.2.1+) - **NoteChain 1.1.16**:新增多项效率功能(见《Obsidian 效率党的新宠:NoteChain 1.1.16 更新再添亮点》) - **NoteChain 1.2.1**:引入网页式"**侧边栏笔记页面**"——在页面中打开笔记、自动监听变化并更新、支持预览、重启自动记忆,让 Obsidian 像浏览器一样工作(见《工作区革命:用 NoteChain 打造你的 Obsidian 控制中心》) - 可添加输入框快速输入链接、提供命令和文件的快速打开、在笔记中创建 UI 页面固定到侧边栏 #### 第五阶段:AI 与 Agent 时代(最新版本) - **本地 HTTP 服务**:支持 HTTPS(手机/局域网)和 HTTP(WebViewer) - **MCP for Agents**:暴露 vault 工具给 Cursor 等 AI Agent,端点 `/mcp/*`、`/sse` - **WebViewer LLM**:在 Obsidian Web Viewer 中自动化 AI 聊天(支持元宝、ChatGPT、Kimi 等) - **Online Vault**:浏览器编辑 `/online` - **EasyAPI**:`window.ea` 提供文件/编辑器/对话框等工具函数 --- ### 四、用一张图概括作者的思路 ``` 思想(网状收集) 笔记链(线性整理) 输出(文章/书) ┌─────────────┐ ┌─────────────────┐ ┌──────────┐ │ 双链笔记 │ │ PrevNote/NextNote │ │ 线性成稿 │ │ 自由发散 │ ───→ │ 串成链条 │ ───→ │ 顺序输出 │ │ 像河网一样 │ │ 文件树按链排序 │ │ 一气呵成 │ └─────────────┘ └─────────────────┘ └──────────┘ Obsidian原生 NoteChain插件 最终效果 ``` --- ### 五、总结 "知更鸟在屋顶"(GitHub: ZigHolding)开发 NoteChain 的核心动机可以归纳为: **他要解决的问题是**:Obsidian 的双链笔记擅长网状发散收集,但当你需要把想法整理成线性文章时,缺少一种把笔记按逻辑顺序串联起来的机制——文件排序是字母序的、新建笔记是脱离上下文的、原子笔记是散落的。 **他想实现的效果是**:让笔记像链条一样首尾相连(PrevNote/NextNote),文件资源管理器按链条顺序而非字母排序,新建笔记自动接入链条,前后导航如翻书般流畅——最终让"网状收集"和"线性输出"在同一套系统里无缝衔接。随着版本迭代,他还把这个链条系统扩展成了 Obsidian 的"控制中心",集成了 AI 聊天自动化、MCP Agent 接口等前沿能力。 插件从 2024 年 5 月首次发布到 2026 年 8 月已经迭代了 51 个版本、累计下载超 6100 次,仍在活跃更新中。 # Excalidraw Data ## Text Elements 用法1-用命令行 @针对碎碎念 ^bbMdGmGU 用法2-针对单篇笔记 ^ZtUbKshl 想给日记串成时间链? 直接对 X0.Diary 的笔记用链命令,不必经过任何脚本。 ^s88mAZfF 想给某篇项目笔记串前后文? 直接在它和相邻笔记上用命令。 ^AemA3GpY 只有想把 Knomo 里某条碎碎念也拉进来成链时, 才需要"复制提取"把它先变成文件。 ^sYI6kG49 复制提取到 Knomo/Atom/ ^zF2eigOA /Users/ar/WorkBuddy/2026-08-14-04-08-54/notechain_extract.py ^FEgd98uU 把 Knomo 月归档(Memos-YYYY-MM.md)里、你标记为“要成链”的碎碎念, 用「复制」方式拆成独立 .md 文件,放到 Knomo/Atom/ ^IIqVWgyO 日记里的碎碎念不需要、也不该在日记的 frontmatter 里串; ^iZGAmzR6 它们该在被"提取成独立原子笔记"那一刻,才各自带上 Prev/Next 去成链。 ^SHiCBl4f 日记负责"记下来",链条负责"连起来" ^Nd7VBc6O ——两者各管一摊 ^3bBAC67e 作者的原始想法 ^zNIjsPZZ ## Element Links BVk6coGZ: [[插件Notechain#用成链标签作为触发器]] iGyY2Z4P: [[插件Notechain#用法1-命令行整理碎碎念]] AuDOYZdj: [[插件Notechain#用法2-针对单条笔记加勾子]] vSaD7RRs: [[插件Notechain#Notechain作者原思想总结]] ## Embedded Files 2a585d3dbe3cdd1c05980a5260b8a98923769ba2: [[notechain01-26.0814.svg]] 40c26f962b987584923085063e90d615e698a006: [[X.Attachment/notechain02-26.0814.svg]] 0f57eb591cdce773053a53905d269e7da7484fac: [[Pasted Image 20260823174436_856.png]] %% ## Drawing ```compressed-json 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 ``` %%