news 2026/10/13 3:35:53

用Codex和Obsidian搭建AI第二大脑:20分钟打造自动化知识库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Codex和Obsidian搭建AI第二大脑:20分钟打造自动化知识库

先问自己一个问题:你电脑里的笔记、文档、碎片想法,是不是存完就再也不打开了?我过去也是这样。笔记越积越多,但真正要用的时候,既搜不到,也串不起来。直到把 Codex 和 Obsidian 组合成一套流程,才真正把这些素材变成随时可以调用的“第二大脑”。

本文是一篇完整实操教程,从零开始,带你在大约 20 分钟内完成这套知识库系统。整个过程会覆盖工具选型原因、Obsidian 库的规划、Codex 的接入方式、自动化脚本、以及常见报错排查。无论你是 Obsidian 老用户,还是第一次接触 Codex,都可以按步骤跟下来。

1. AI 第二大脑是什么,为什么需要它

1.1 “第二大脑”的核心不是存储,而是调用

很多人对第二大脑有个误解,以为把资料整理得井井有条就够了。实际上,存储只是基础,真正的价值在于:当你想写一篇文章、做一个方案、或复盘某个项目时,系统能在几秒内把相关素材送到你面前,甚至替你完成初稿。

传统目录树管理方式有几个明显瓶颈:

  • 笔记之间缺乏关联,信息被“文件夹”割裂。
  • 关键词记忆模糊时,根本搜不到。
  • 内容即使找到了,还要自己重新阅读、提炼、组织,耗时很长。

AI 的介入改变了这条链路。它不只是帮你“找”,而是帮你“想”,直接从已有笔记中提炼观点、生成大纲、串联不同主题的素材,甚至能把几百条碎片内容压缩成一份结构化文档。

1.2 为什么选择 Obsidian + Codex 组合

Obsidian 和 Codex 是目前这套方案里组合性价比最高的两个工具。

Obsidian 的优势在于:

  • 本地化存储,纯 Markdown 文件,数据完全自主可控。
  • 双向链接、标签体系、图谱视图,适合知识关联。
  • 插件生态强大,界面高度可定制。
  • 所有数据都是普通文本文件,方便 AI 程序读取。

Codex 的价值在于它是 OpenAI 的 AI 编程与自动化智能体,不只是聊天工具。Codex CLI 可以运行在终端中,直接读写文件、执行命令、调用模型能力,等于给 Obsidian 配了一个能操作整个笔记库的 AI 助手。

两者结合后的实用场景非常直接:

  • 对某篇笔记提问,AI 结合库内内容回答。
  • 把一堆同类笔记合并,自动去重并生成结构化文档。
  • 根据笔记内容自动生成标签、反向链接、摘要。
  • 用自然语言下达指令,自动化处理文件,不用手写脚本。

下面进入正题,按照 20 分钟的时间线逐步完成搭建。

2. 环境准备与版本说明

开始前,先确认你本机的环境。本文的操作环境配置如下:

项目版本或工具
操作系统macOS 14+ / Windows 11 / Ubuntu 22.04+
Obsidian1.5 及以上版本
Codex CLInpm 最新稳定版
Node.js18.0 及以上版本
OpenAI 账号已登录并具备 API 或订阅权限

如果你使用的是 Windows,建议优先使用 PowerShell 或 Windows Terminal;macOS 和 Linux 直接用系统终端即可。

本文以 macOS 作为主演示环境,所有命令与 Windows 相差不大,遇到差异时会单独标注。

2.1 Obsidian 安装

前往 Obsidian 官网下载对应系统的安装包,安装后不需要做任何特殊配置。这里建议创建一个新库(Vault)专门用于本次实战,避免干扰你已有的正式笔记库。

操作路径:

  1. 打开 Obsidian。
  2. 点击“Create new vault”。
  3. Vault 名称填写AI-Second-Brain。
  4. 选择一个容易定位的本地路径,例如~/Documents/AI-Second-Brain。

Obsidian 会在这个文件夹下自动创建一个.obsidian目录,用于存放插件和配置。所有笔记内容就是你目录下的 Markdown 文件,这也为 Codex 操作文件提供了前提。

2.2 Node.js 与 npm 环境检查

Codex CLI 依赖 Node.js。打开终端,输入以下命令确认环境:

node -v npm -v

如果提示找不到命令,需要先安装 Node.js。推荐通过 nvm 安装,便于后续切换版本:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

安装完成后重新打开终端,执行:

nvm install 20 nvm use 20

确认输出类似v20.11.0和10.2.4,环境就准备好了。

3. Codex CLI 安装与初始化

3.1 安装 Codex CLI

使用 npm 全局安装 Codex CLI:

npm install -g @openai/codex

安装完成后,执行初始化命令:

codex init

初始化过程中会询问几个问题,按下面建议选择:

  • 是否使用 ChatGPT 登录:推荐 Yes,如果你有 ChatGPT 订阅权限。
  • CLI 本地模型配置:若机器内存充足可选本地小模型,否则选 No,走云端推理。
  • 自动应用文件修改:推荐询问模式,避免 AI 改动文件时失控。

初始化完成后,可以执行一次登录验证:

codex login

这个命令会打开浏览器,完成 OAuth 授权。授权完成后,回到终端会看到登录成功提示。

3.2 验证 Codex 是否可用

先在一个空白目录里测试一下:

codex "用一句话介绍你自己"

如果能正常返回结果,说明 Codex CLI 已经可以调用模型能力。此时可以进到 Obsidian 库目录中进行下一步操作。

cd ~/Documents/AI-Second-Brain codex "列出当前目录有哪些文件"

正常情况下 Codex 会先读取目录结构,然后返回文件列表。这代表 AI 已经能够“看到”你的知识库文件。

4. 搭建 Obsidian 知识库的目录与模板体系

很多人在知识库搭建时卡住,是因为一开始就想把结构设计成完美的大树。实际更聪明的做法是轻量起步,让知识库在使用中长出自己的结构。

在 AI-Second-Brain 库中,建议先创建以下目录:

AI-Second-Brain/ ├── 00-Inbox/ ├── 01-Projects/ ├── 02-Areas/ ├── 03-Resources/ ├── 04-Archive/ ├── 90-Templates/ └── 99-Attachments/

这套结构参考了 PARA 方法,含义如下:

  • 00-Inbox:所有新笔记、临时想法、未分类内容先丢这里。
  • 01-Projects:有明确目标和截止时间的项目资料。
  • 02-Areas:长期维护的责任领域,比如“前端开发”“身体健康”。
  • 03-Resources:兴趣主题、参考资料、文章素材。
  • 04-Archive:不再活跃但仍需保留的内容。
  • 90-Templates:统一模板文件。
  • 99-Attachments:图片、PDF 等非 Markdown 资源。

执行命令:

mkdir -p 00-Inbox 01-Projects 02-Areas 03-Resources 04-Archive 90-Templates 99-Attachments

4.1 创建默认笔记模板

Obsidian 的核心是 Markdown,模板决定了笔记的底子。创建模板文件90-Templates/default.md:

--- title: tags: [] created: {{date}} --- # {{title}} ## 核心观点 ## 关键信息 ## 行动项 ## 相关链接

Obsidian 自带{{date}}模板变量,插入文件时会自动替换为当前日期。

如果希望 Codex 创建笔记时自动应用这个模板,可以在后续自动化脚本中读取该模板内容,再让 Codex 按此格式生成笔记,这样 AI 写出的内容也保持统一风格。

5. Codex 与 Obsidian 的三种集成模式

这是全文最重要的章节。Codex 与 Obsidian 的集成方式不止一种,下面拆成三个层次,从简单到深入,分别适合不同的使用习惯。

5.1 模式一:终端对话直接读写

这是最基础的方式,也是最快上手的。进入 Obsidian 库目录后,直接使用自然语言向 Codex 下达指令。

例如,你有一堆随手记录的灵感散落在 Inbox 中,希望把它们整理成一篇可发布的长文,可以这样操作:

codex "阅读 00-Inbox 下的所有笔记,提炼共同主题,然后在 03-Resources 下创建一篇结构化长文笔记,文风偏技术教程,并自动生成标签"

Codex 会读取文件,分析内容,直接生成新文件。你可以随时打开 Obsidian 查看结果。

这种方式适合零基础用户,因为它没有额外代码逻辑,本质上是把 Codex 当作一个会自动操作文件系统的 AI 助手。

5.2 模式二:MCP 服务,把 Obsidian 变成 AI 的可交互应用

MCP(Model Context Protocol)是 Codex 支持的一种扩展协议,可以让模型访问外部工具和上下文。如果希望在 Obsidian 界面内直接用 AI 操作笔记,而不是跑到终端敲命令,可以使用社区插件。

常用的社区插件名称是“Codex MCP”或类似工具。安装流程:

  1. 打开 Obsidian 设置。
  2. 进入“第三方插件”。
  3. 关闭“安全模式”。
  4. 浏览社区插件市场,搜索 Codex。
  5. 安装并启用。

启用后,进入插件设置,需要填写 Codex 的调用方式,一般默认即可。这样你在 Obsidian 里就能通过一个面板向 AI 提问,AI 返回的内容可以直接插入当前笔记或新建笔记。

这种模式的优点是流程闭环,你可以在阅读笔记时直接调起 AI 进行提炼,而不需要切换到终端。

5.3 模式三:自定义自动化脚本

如果你具备一些编程基础,可以通过 Node.js 或 Python 写一个脚本,把 Obsidian 的批量任务定期交给 Codex 处理。

下面是一个简单的 Node.js 脚本示例,作用是将某个目录中的所有 Markdown 文件合并后交给 Codex 生成摘要。

// 文件名: scripts/summarize.js const fs = require('fs'); const path = require('path'); const { execSync } = require('child_process'); const targetDir = path.join(__dirname, '../00-Inbox'); const outDir = path.join(__dirname, '../03-Resources'); const files = fs.readdirSync(targetDir).filter((f) => f.endsWith('.md')); let combined = ''; for (const file of files) { const content = fs.readFileSync(path.join(targetDir, file), 'utf-8'); combined += `---\n文件名:${file}\n---\n${content}\n`; } const prompt = `以下是多篇笔记内容,请提炼核心主题并生成一篇结构化文档。\n\n${combined.substring(0, 4000)}`; const result = execSync(`codex "${prompt.replace(/"/g, '\\"')}"`, { encoding: 'utf-8', maxBuffer: 20 * 1024 * 1024, }); fs.writeFileSync(path.join(outDir, `summary-${Date.now()}.md`), result); console.log('摘要生成完成');

运行方式:

node scripts/summarize.js

这个脚本只是基础示例,实际使用时建议结合错误处理、文件去重、token 长度限制等逻辑,避免内容过长导致请求失败。

6. 完整实战:从 Inbox 到成品知识笔记

这部分用一个实际案例完整走一遍流程。场景设定:你最近收集了十条关于“如何高效阅读技术文档”的碎片笔记,先把它们放进00-Inbox。

6.1 准备示例碎片笔记

手动创建00-Inbox/read-001.md:

# 读文档技巧 01 先看目录,再读概述,跳过安装细节,重点理解示例。

再创建00-Inbox/read-002.md:

# 读文档技巧 02 - 看官方文档比看二手博客更可靠。 - 遇到不懂的 API,直接去源码里面搜索。

继续创建类似的多篇碎片笔记,内容随意即可,目的是演示多文件处理场景。

6.2 让 Codex 完成整理任务

执行以下命令:

codex "阅读 00-Inbox 目录下的所有笔记,完成任务:1. 找出这些笔记之间的共同主题;2. 剔除重复内容;3. 在 03-Resources 下生成一篇名为《高效阅读技术文档的实践方法.md》的正式笔记;4. 给新笔记添加合适的 frontmatter 标签;5. 把已处理的源文件移动到 04-Archive"

Codex 会按顺序执行。由于 Codex 支持多步骤规划,它会先列出文件清单,再逐一读取内容,最后生成正式笔记,并移动文件。

完成后,你会发现:

  • 03-Resources下多了一篇整理好的正式笔记。
  • 00-Inbox下原来的碎片文件被移动到04-Archive。
  • 标签和标题自动生成。

如果你在 Obsidian 中打开新笔记,会看到通顺、有结构的文档,而不是简单的内容拼接。

6.3 利用双链构建知识关联

知识库不等于文件柜,它更接近一张网。Obsidian 的核心能力就是双向链接。手动为笔记添加链接太繁琐,但 Codex 可以自动完成。

执行指令:

codex "扫描 03-Resources 下所有笔记,为每篇笔记添加相关链接,把涉及同一主题的笔记用 [[]] 双向链接关联起来,并将链接放在笔记底部的'相关笔记'区域"

Codex 会根据内容语义为笔记建立关联。这种自动化的好处是不需要记住每篇笔记写了什么,AI 会读取内容并主动建立连接。

6.4 让 Codex 生成每日回顾

知识库只有持续使用才有价值。可以每天早上让 Codex 自动生成“今日回顾”,内容包括昨天的笔记新增情况、待办事项、重要主题。

codex "查看 04-Archive 下最近三天的笔记,以及 00-Inbox 下新增内容,生成一篇《今日回顾》笔记,包含:核心收获、未完成任务、明日计划、关联笔记"

如果你是 Obsidian 重度用户,还可以通过 Templater 插件设置每日笔记模板,再结合 Codex 自动填充内容。

7. 常见问题与排查思路

搭建过程中,你大概率会遇到下面几个问题,这里逐一说明排查方向。

问题现象常见原因解决方案
codex命令找不到Node.js 未安装或全局路径未配置检查node -v;重新全局安装 Codex;macOS 检查~/.npm-global/bin是否在 PATH 中
登录时浏览器无法打开终端权限、防火墙或默认浏览器配置直接复制终端输出的授权链接到浏览器打开,再粘贴回调码回终端
Codex 提示无权访问目录当前工作目录与 Vault 路径不一致先执行cd进入 Vault 目录,再启动codex
生成内容与笔记风格不一致未指定笔记模板或字段要求在指令中明确使用90-Templates/default.md模板,或让 Codex 先读取模板再生成
一次处理的笔记过多导致失败Token 超限或模型上下文过长拆成多次任务,每次控制文件数量,或先让脚本自动合并后截断
Obsidian 不显示 Ai 生成的文件Obsidian 未监听外部文件变化在 Obsidian 中按Cmd + R(macOS)或Ctrl + R(Windows)刷新文件列表

7.1 Codex 修改文件时的授权策略

Codex CLI 在涉及写文件操作时,默认会请求确认,避免出现 AI 自动修改大量文件却不可控的情况。如果你希望减少交互确认,可以在启动指令前补充:

codex "将 00-Inbox 下所有笔记移动到 04-Archive,不需要向我确认"

但这里要提醒一句:在个人知识库中建议始终保持确认模式。一旦 Codex 批量改写文件,路径错误或内容丢失往往难以撤销。尽量在操作前让 Codex 先输出执行计划,不要直接应用全部更改。

7.2 让 Codex 的安全边界可控

Obsidian 库是你所有笔记的大本营,里面可能有私人信息、项目文档、灵感记录。使用 AI 工具处理这些数据时,应明确边界。

建议在库根目录创建一个AI-RULES.md文件,用来自定义 Codex 的约束:

# AI 操作规则 1. 禁止读取 01-Projects 下的商业机密文件。 2. 04-Archive 下的文件默认不删除。 3. 00-Inbox 下的文件只有移动到 Archive 时才允许自动操作。 4. 所有新建笔记必须包含 frontmatter 属性和创建日期。

然后在每次对话开始加上一句:

codex "先读取 AI-RULES.md 内容,并严格遵守该规则"

这样可以显著降低误操作风险。

8. 备份与安全注意事项

在投入大量内容到知识库之后,备份策略就变得至关重要。Obsidian 作为一个本地笔记库,数据以纯文本形式保存在你的磁盘上。结合 Codex 的自动化能力,可以轻松构建一套自动备份流程。

这里介绍一个简单地使用 git 进行版本管理的方法。

在 Obsidian 库目录下运行:

cd ~/Documents/AI-Second-Brain git init git add . git commit -m "first backup"

此后,每当执行完一次 Codex 的批量操作,就可以执行一次提交。也可以使用 cron 定时任务每天自动备份。

macOS 或 Linux 下编辑定时任务:

crontab -e

加入下面一行:

0 9 * * * cd ~/Documents/AI-Second-Brain && git add . && git commit -m "daily backup $(date)"

对于使用 iCloud 或坚果云同步 Obsidian 库的用户,这里特别提醒:如果库目录位于同步盘中,不要让 Codex 自动移动大量文件,因为云同步工具会实时上传每一次变更,异常时容易造成大量冲突副本。更稳妥的做法是让 Codex 操作一个本地专用工作目录,人工确认后再放回同步目录。

8.1 安全与权限最小化原则

当 Codex 与你的 Obsidian 库建立连接后,它实际上拥有了对你笔记目录的读写权限。这里要强调最小权限原则:

  • 日常对话操作时,只在当前 Vault 目录内进行。
  • 不要让 Codex 访问你的系统级目录,例如/etc、~/Library、C:\Windows。
  • 涉及登录凭证或 API Key 的信息,绝不能作为普通文本笔记存放。
  • 如果使用远程模型服务,注意上传的数据量;敏感数据建议先本地脱敏再交给 Codex 处理。

9. Obsidian 插件增强:Templater 与 Dataview

Codex 负责“生成内容”,而 Obsidian 插件负责“让内容活起来”。这里介绍两个对知识库最有价值的插件。

9.1 Templater:动态模板自动化

Templater 是 Obsidian 社区最强大的模板插件,支持脚本、变量、条件判断。结合 Codex 生成的内容,效果很实用。

安装方式:第三方插件中搜索Templater,启用即可。

在90-Templates下创建一个动态模板codex-note.md:

--- creation date: <% tp.date.now("YYYY-MM-DD HH:mm") %> type: Codex Note tags: - AI - Knowledge --- # <% tp.file.title %> ## AI 生成摘要 <% tp.system.prompt("请粘贴 Codex 生成的摘要内容") %> ## 后续行动项 - [ ]

新建笔记时选择这个模板,再粘贴 Codex 生成的摘要,就能快速形成一条结构完整的知识笔记。

9.2 Dataview:让笔记库自动生成索引

Dataview 可以基于笔记的 frontmatter 和内容自动生成列表、表格,不需要手动维护目录。

在03-Resources目录下创建仪表盘.md:

# 知识库仪表盘 ## 最近添加的笔记 ```dataview TABLE file.cday AS Created, tags AS Tags FROM "03-Resources" SORT file.cday DESC LIMIT 10

所有待处理事项

TASK FROM "00-Inbox"

代码块的 Dataview 语法只在 Obsidian 中渲染,不需要在普通 Markdown 阅读器中理解。这样,你的知识库会自动展示最新内容,不用手工维护索引。

10. 常见高频指令集

为了让你更快上手,下面整理了一些可直接复制使用的 Codex 指令。实际使用时,根据 Vault 目录结构和自身需求微调。

10.1 整理与归档

codex "扫描 00-Inbox 下的所有 Markdown 文件,根据主题分为 3-5 个类别,为每篇笔记添加标签,然后移动文件到对应的 02-Areas 或 03-Resources 目录。分析过程要输出简要总结"

10.2 反向链接自动补充

codex "阅读 03-Resources 目录下所有笔记,找出内容包含相同主题关键词的笔记,为它们添加双向链接。链接放在文档底部"

10.3 文章生成

codex "基于 03-Resources 下的 5 篇相关笔记,生成一篇 3000 字左右的技术博客文章,风格要结构化,包含代码示例、图表说明和常见问题总结。保存到 01-Projects/article-draft.md"

10.4 标签规范化

codex "扫描整个 Vault,统计所有笔记的 tags 字段,将语义相同但写法不同的标签统一,比如 'AI'、'ai'、'人工智能' 合并为一个"

11. 进阶方向:把知识库带向真正的自动化

如果你完成了前面所有步骤,你的 Obsidian 库已经不是静态的文件集合,而是一个能主动生长、自动整理、随时提取内容的系统。在此基础上,还有三个值得尝试的进阶方向。

第一,结合 GitHub Actions 实现远程自动化。你可以把 Obsidian 库同步到一个私有 Git 仓库,设置定时任务自动调用 Codex 处理新笔记,再把结果提交回仓库。这样即使不开电脑,知识库也能每天自动更新。

第二,利用 Obsidian 的 URI 接口实现快捷命令。Obsidian 支持通过链接格式直接新建笔记、打开指定文件。在 Codex 生成的输出中,可以拼接这类地址,让你在 AI 生成内容后一键跳转到对应笔记。

示例格式:

obsidian://open?vault=AI-Second-Brain&file=03-Resources%2F%E9%AB%98%E6%95%88%E9%98%85%E8%AF%BB%E6%8A%80%E5%B7%A7

第三,将知识库内容作为问答机器人的数据集。未来如果希望搭建一个个人知识助手,可以让 Codex 对指定目录建立索引,然后基于这些内容进行问答。这比直接让 AI 凭记忆回答可靠得多,因为答案有据可查,能追溯到具体笔记文件。

如果你对知识工程、AI 自动化工作流感兴趣,下一步可以研究两个方向:一个是向量化检索,利用 Embedding 技术把笔记内容转换为向量,实现语义搜索;另一是 RAG(检索增强生成),让 AI 在回答问题时自动从你的知识库中检索片段作为上下文。这两项技术都是打造高质量个人 AI 助手的核心。

这套方案最值得坚持的一点是:你用自然语言驱动 AI 整理自己的数字资产,而不需要把所有工具链学完才能开始。动手搭建好第一个 Vault,每天往 Inbox 里丢几条笔记,再定期让 Codex 做一次整理,二十天后,你会看到一个完全不同、真正属于你自己的知识库。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 3:35:35

从零搭建大模型:Transformer原理与消费级显卡实战指南

简介&#xff1a;这份资源面向希望系统入门并动手实践AI大模型的开发者与学习者&#xff0c;围绕大模型学习方法与自建流程展开&#xff0c;帮助读者从理论认知走向独立搭建。内容涵盖深度学习基础概念、Transformer与BERT、GPT、T5等经典论文的研读思路&#xff0c;以及数据预…

作者头像 李华
网站建设 2026/10/13 3:35:11

Win10部署绿色版迅雷5:从兼容设置到排障验证

简介&#xff1a;面向Windows 10用户的迅雷5绿色版&#xff0c;定位为可下载敏感内容的防识别工具&#xff0c;适合追求轻量、稳定下载体验的老版本用户。压缩包共435个文件&#xff0c;体积仅9.09MB&#xff0c;涵盖大量bmp界面皮肤素材、dll运行库组件、ini配置及dat数据文件…

作者头像 李华
网站建设 2026/10/13 3:34:37

SecureCRT终端中文版配置与运维实战:会话管理、编码避坑与自动化

简介&#xff1a;SecureCRT终端中文版.zip 是一款面向系统管理员、网络工程师和IT运维开发者的终端仿真工具&#xff0c;支持SSH2、SSH1、Telnet、Telnet/SSH、Serial、TAPI及RAW协议&#xff0c;既能安全远程管理Linux、UNIX、Windows等服务器&#xff0c;也能通过串口调试路由…

作者头像 李华
网站建设 2026/10/13 3:34:12

Chrome历史版本下载全攻略:官方接口+脚本实操+避坑指南

简介&#xff1a;这是一份面向开发者和测试人员的Chrome/Chromium历史版本归档资源&#xff0c;解决因兼容性测试、功能验证或版本回滚需要下载旧版浏览器的问题。压缩包共450KB&#xff0c;包含14个文件&#xff0c;其中6个JSON记录版本、操作系统与位置等元数据&#xff0c;另…

作者头像 李华
网站建设 2026/10/13 3:33:54

朴素贝叶斯中文情感分类实战:从零跑通高分大作业

简介&#xff1a;本资源是一份基于朴素贝叶斯算法实现情感文本分类的完整课程大作业项目&#xff0c;面向计算机、人工智能及相关专业本科生&#xff0c;适用于期末课程设计、机器学习实践或NLP入门项目开发。项目已通过严格调试&#xff0c;评审得分95分以上&#xff0c;具备高…

作者头像 李华
网站建设 2026/10/13 3:32:53

信用卡诈骗识别实战:三层漏斗架构与可解释特征工程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华