从零散代码到系统化知识库:构建个人技术资产的高效管理方案
最近在整理个人技术收藏时发现很多零散的代码片段、配置模板和解决方案笔记虽然当时解决了问题但缺乏系统性再次遇到时查找效率很低。本文旨在将这些“收藏”转化为一套结构化的技术资产分享从零散代码到系统化知识库的构建方法涵盖分类策略、管理工具、版本控制及高效检索实践。无论你是想整理自己的“收藏夹”还是希望建立团队知识库都能从中获得可直接复用的方案。1. 技术收藏的价值与常见痛点在开发过程中我们总会遇到一些值得保存的内容一段优雅的算法实现、一个复杂的配置文件、一个报错的解决方案或者一篇高质量的技术文章。这些“收藏”是开发者宝贵的经验结晶。1.1 为什么你的收藏正在失效大多数开发者的收藏行为停留在“收藏即遗忘”的阶段主要原因在于缺乏上下文只保存了代码片段但没有记录其适用的场景、依赖的版本、解决的特定问题。格式混乱内容分散在浏览器的书签、本地文本文件、笔记软件、甚至聊天记录中没有统一入口。难以检索当需要时仅凭模糊记忆无法快速定位导致重复搜索效率低下。未经验证收藏的解决方案可能随着依赖库升级而失效但没有定期维护和验证。1.2 系统化管理的核心目标将零散收藏系统化目标不仅仅是存储更是为了知识复用确保收藏的解决方案能在未来被快速、准确地复用。经验沉淀将个人或团队的踩坑经验转化为可搜索、可传承的知识点。效率提升减少重复解决问题的时间将精力投入到更有价值的创新工作中。学习深化整理的过程本身就是对知识进行再消化和体系化构建的过程。2. 环境与工具选型打造你的知识基座工欲善其事必先利其器。选择一套合适的工具组合是构建高效知识库的第一步。2.1 核心工具链推荐一个完整的技术知识库管理通常涉及以下工具工具类型推荐选项核心用途笔记/文档工具Obsidian, Logseq, VS Code Dendron以“卡片”或“文档”形式存储核心知识支持双向链接、图谱可视化。代码仓库GitHub, GitLab, Gitee存储可运行的完整项目、脚本、配置模板利用 Git 进行版本管理。片段管理工具VS Code Snippets, JetBrains IDE Live Templates管理高频使用的代码片段支持快捷插入。书签管理Raindrop.io, Cubox统一管理网络文章、博客链接支持标签和摘要。本地搜索Everything (Windows), Alfred (Mac), fzf (Linux)快速检索本地所有文档和代码文件。2.2 本文演示环境说明为了提供具体可操作的示例本文将基于以下环境展开但所有思路均适用于其他工具笔记工具Obsidian。因其基于纯 Markdown 文件、强大的链接能力和活跃社区非常适合构建知识网络。代码仓库GitHub。作为事实上的标准用于演示如何管理代码类收藏。操作系统macOS / Windows (WSL2) / Linux 通用思路。核心原则文本化、版本化、可搜索。所有内容尽量以文本文件Markdown, YAML, JSON, 代码文件形式保存。3. 分类与标准化构建知识框架杂乱无章的收藏是负担分类清晰的收藏才是资产。我们需要建立一个逻辑自洽的分类体系。3.1 技术维度分类法推荐这是最实用的一种分类方式按照技术领域和问题类型进行划分。你可以在笔记工具中创建对应的文件夹。你的知识库/ ├── 编程语言/ │ ├── Python/ │ │ ├── 语法技巧/ │ │ ├── 常用库PandasRequests/ │ │ └── 问题排查ImportError, Indentation/ │ └── JavaScript/ │ ├── ES6特性/ │ └── 浏览器API备忘/ ├── 框架与生态/ │ ├── Spring Boot/ │ │ ├── 自动配置原理/ │ │ └── 常见注解详解/ │ └── React/ │ ├── Hooks 最佳实践/ │ └── 状态管理方案对比/ ├── 运维与部署/ │ ├── Docker/ │ │ ├── Dockerfile 模板/ │ │ └── docker-compose 配置/ │ └── Linux/ │ └── 常用命令与脚本/ ├── 数据库/ │ ├── MySQL/ │ │ ├── 性能优化索引Explain/ │ │ └── 事务与锁/ │ └── Redis/ │ └── 数据结构与应用场景/ └── 问题与解决方案/ ├── 错误码大全/ └── 特定场景方案如“高并发下单”/3.2 标准化收藏模板为每一类收藏定义一个固定的 Markdown 模板确保信息完整。这是知识库能否复用的关键。模板示例代码片段收藏--- created: 2023-10-27 tags: [python, pandas, dataframe, 数据处理] related: [[如何高效合并多个CSV文件]] --- # 使用Pandas批量读取并合并CSV文件 ## 场景描述 当需要分析分散在多个CSV文件中的日志或数据时手动逐个打开效率低下。此脚本用于自动读取某个目录下所有符合模式的CSV文件并按行合并。 ## 核心代码 python import pandas as pd import glob import os def merge_csv_files(folder_path, file_pattern*.csv, encodingutf-8): 合并指定文件夹下的所有CSV文件。 Args: folder_path (str): CSV文件所在文件夹路径。 file_pattern (str): 文件匹配模式默认为*.csv。 encoding (str): 文件编码默认为utf-8。 Returns: pd.DataFrame: 合并后的DataFrame。 all_files glob.glob(os.path.join(folder_path, file_pattern)) if not all_files: print(f在 {folder_path} 下未找到 {file_pattern} 文件。) return pd.DataFrame() df_list [] for filename in all_files: try: df pd.read_csv(filename, encodingencoding) df[source_file] os.path.basename(filename) # 可选标记来源文件 df_list.append(df) print(f已读取: {filename} 行数: {len(df)}) except Exception as e: print(f读取文件 {filename} 时出错: {e}) if df_list: combined_df pd.concat(df_list, ignore_indexTrue) print(f合并完成总行数: {len(combined_df)}) return combined_df else: return pd.DataFrame() # 使用示例 if __name__ __main__: result_df merge_csv_files(./data/logs) if not result_df.empty: result_df.to_csv(./data/combined_logs.csv, indexFalse)关键参数说明file_pattern: 可根据需要改为part-*.csv等。encoding: 遇到中文乱码时可尝试gbk或utf-8-sig。ignore_indexTrue: 合并后重置索引避免重复。可能遇到的问题内存不足文件极大时考虑使用chunksize参数分块读取。列名不一致合并前需确保各文件列名相同或进行列名标准化处理。编码错误尝试不同的编码参数或用chardet库检测文件编码。关联知识[[Pandas IO 工具]][[使用Dask处理超大数据集]]**模板示例错误解决方案收藏** markdown --- error_code: “ERROR 2003 (HY000)” environment: “MySQL 8.0, Docker” tags: [mysql, docker, 连接错误, 网络] --- # MySQL客户端无法连接到Docker容器中的服务器 ## 错误现象 在宿主机使用 mysql -h 127.0.0.1 -P 3306 -u root -p 连接 Docker 内 MySQL 时报错 ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘127.0.0.1‘ (10061) ## 根本原因 Docker 容器默认的网络隔离。127.0.0.1 或 localhost 在宿主机上下文指向宿主机自身而非容器。 ## 解决方案 ### 方案一使用容器IP临时测试 1. 获取容器IP bash docker inspect -f ‘{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}‘ container_name_or_id 2. 使用获取到的IP如 172.17.0.2进行连接 bash mysql -h 172.17.0.2 -P 3306 -u root -p ### 方案二将容器端口映射到宿主机推荐常规方式 启动容器时使用 -p 参数进行端口映射。 bash # 将容器的3306端口映射到宿主机的3306端口 docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORDmy-secret-pw -d mysql:tag # 连接时直接使用宿主机IP或127.0.0.1 mysql -h 127.0.0.1 -P 3306 -u root -p方案三使用特殊主机名host.docker.internalmacOS/Windows Docker Desktop在 Docker Desktop 环境中可以从容器内通过host.docker.internal访问宿主机服务反之亦然需高版本支持。但宿主机连接容器不常用此方式。如何避免明确网络需求在docker run时始终考虑端口映射 (-p) 或自定义网络。使用 Docker Compose在docker-compose.yml中显式声明端口映射使配置可重复。services: mysql: image: mysql:8.0 ports: - “3306:3306” environment: MYSQL_ROOT_PASSWORD: rootpassword排查步骤清单确认容器正在运行docker ps | grep mysql确认端口映射正确docker port container_name 3306检查防火墙是否阻止了宿主机端口如3306。确认MySQL用户允许从宿主机IP连接%或特定IP。## 4. 实战从零构建个人技术知识库 让我们以一个具体的例子演示如何将一条“收藏”系统化地纳入知识库。 ### 4.1 捕获与初步处理 假设你在解决一个问题时在网上找到了一段关于“Spring Boot 多环境配置”的代码。不要只复制代码。 1. **复制完整内容**包括代码、解释文字、原文链接。 2. **立即粘贴到临时笔记**如 Obsidian 的每日笔记。 3. **标记关键信息**用高亮或注释标出核心配置项、注意事项。 ### 4.2 结构化整理 在 Obsidian 中创建一个新笔记路径为框架与生态/Spring Boot/配置管理/多环境配置.md。 应用“代码片段收藏”模板并填写内容 markdown --- source: “https://spring.io/blog/2020/... (原始链接)” verified_with: “Spring Boot 2.7.18” tags: [spring-boot, configuration, profiles, yaml] --- # Spring Boot 多环境配置YAML版 ## 场景描述 在开发、测试、生产等不同环境中应用配置如数据库地址、日志级别通常不同。Spring Boot 使用 spring.profiles.active 属性来激活特定环境的配置。 ## 核心配置结构 项目 src/main/resources/ 目录下文件组织如下application.yml # 主配置放通用和默认配置 application-dev.yml # 开发环境配置 application-test.yml # 测试环境配置 application-prod.yml # 生产环境配置**application.yml (主配置)** yaml spring: profiles: active: activatedProperties # Maven/Gradle 占位符构建时替换 application: name: my-app # 所有环境共享的配置 logging: level: root: INFO --- # 以下配置仅当没有指定profile时生效默认配置 spring: config: activate: on-profile: default server: port: 8080application-prod.yml (生产环境)# 通过 --- 分隔文档块并指定profile spring: config: activate: on-profile: prod server: port: 80 ssl: enabled: true datasource: url: jdbc:mysql://prod-db-host:3306/mydb username: ${DB_USER} password: ${DB_PASSWORD} # 敏感信息应从环境变量读取 logging: level: root: WARN com.myapp: INFO激活Profile的方式配置文件指定在application.yml中设置spring.profiles.active: prod不推荐将激活环境写死在代码中。命令行参数java -jar myapp.jar --spring.profiles.activeprod环境变量export SPRING_PROFILES_ACTIVEprodJVM系统属性-Dspring.profiles.activeprodMaven/Gradle Profile推荐与构建工具联动动态替换占位符。Mavenpom.xml示例profiles profile iddev/id properties activatedPropertiesdev/activatedProperties /properties activation activeByDefaulttrue/activeByDefault /activation /profile profile idprod/id properties activatedPropertiesprod/activatedProperties /properties /profile /profiles构建时指定mvn clean package -P prod配置优先级与覆盖规则Spring Boot 配置加载优先级从高到低高优先级覆盖低优先级命令行参数Java 系统属性 (System.getProperties())操作系统环境变量当前 Profile 的配置文件 (如application-prod.yml)默认配置文件 (application.yml) 理解此顺序对排查配置不生效问题至关重要。常见坑点YAML格式缩进必须使用空格:后必须有空格。Profile 名称prodPRODProd被视为不同的 Profile建议统一用小写。属性覆盖Profile 专属配置中的属性会完全覆盖主配置中的同名属性而非合并。敏感信息生产环境的密码、密钥等绝不应硬编码在配置文件中必须使用环境变量或配置中心如 Apollo。关联配置[[Spring Boot 外部化配置]][[使用ConfigurationProperties绑定配置]][[Apollo配置中心集成]]### 4.3 纳入版本控制与同步 1. **本地仓库**你的 Obsidian 笔记库本身就是一个文件夹。将其初始化为 Git 仓库。 bash cd /path/to/your/obsidian/vault git init git add . git commit -m “feat: 新增Spring Boot多环境配置笔记” 2. **远程备份**在 GitHub/GitLab 上创建一个私有仓库将本地笔记库推送上去实现备份和跨设备同步。 bash git remote add origin https://github.com/yourname/tech-knowledge-base.git git branch -M main git push -u origin main 3. **代码类收藏**对于完整的可运行项目或脚本应在专门的代码仓库中管理并在笔记中通过链接或引用关联起来。 ## 5. 高效检索与日常使用流程 收藏的终极目的是快速找到并使用。建立以下习惯让你的知识库“活”起来。 ### 5.1 建立检索习惯 * **工具内搜索**熟练使用 Obsidian 的全局搜索Cmd/Ctrl Shift F支持标签、路径、内容联合搜索。 * **标签驱动**为每篇笔记添加精准的标签如 #spring-security #bug #performance通过标签页面快速聚合相关内容。 * **链接网络**在笔记中大量使用 [[内部链接]] 关联相关概念。Obsidian 的图谱功能能可视化知识关联帮助发现盲区。 * **本地全局搜索**配合 Everything 或 Alfred即使不打开笔记软件也能快速找到文件。 ### 5.2 日常维护流程 1. **即时收集**遇到有价值内容立即存入“收件箱”笔记或特定文件夹。 2. **定期加工**每周花30分钟将“收件箱”内容按照模板整理到知识库对应位置补充上下文添加标签和链接。 3. **验证与更新**季度性回顾高频使用的笔记。检查其中引用的技术版本是否过时代码示例是否仍能运行并更新“verified_with”字段。 4. **主动输出**尝试将笔记整理成博客文章或团队分享文档。教是最好的学输出能极大加深理解并发现知识漏洞。 ## 6. 最佳实践与工程化建议 将个人知识库管理工程化能使其价值倍增。 ### 6.1 内容质量保障 * **最小可验证原则**收藏的代码片段应尽可能自包含或明确说明其依赖的上下文。最好能提供一个可独立运行的最小示例。 * **注明来源与版本**必须记录原文链接尊重原创和该方案验证有效的软件版本号。这是避免“时过境迁方案失效”的关键。 * **记录决策理由**不仅仅记录“怎么做”更要记录“为什么这么做”以及“其他方案的优缺点”。这有助于未来在类似场景下做出更优决策。 * **添加“失效预警”**对于依赖特定版本或已知有局限性的方案在笔记开头添加警告如 ⚠️ 此方案仅适用于 Vue 2.x。 ### 6.2 团队知识库协作 个人知识库模式可以扩展到团队。 1. **共享仓库**使用 Git 仓库管理团队知识库每个人通过 Pull Request 提交贡献。 2. **统一模板**制定团队统一的笔记模板和分类规范。 3. **代码审查**对提交的笔记进行同行审查确保准确性、清晰度和实用性。 4. **定期分享**设立技术分享会鼓励成员将知识库中的亮点内容进行讲解促进知识流动和二次加工。 ### 6.3 安全与隐私边界 * **隔离敏感信息**绝对不要将公司内部密码、密钥、IP、未公开的API接口等信息存入个人知识库即使是私有仓库。 * **区分公开与私有**可以考虑将不敏感的基础知识、通用解决方案整理到公开博客如 CSDN进行分享和备份将涉及公司业务逻辑、特定架构的细节保存在内部或本地私有库中。 * **定期审查**定期检查知识库内容确保没有意外泄露敏感数据。 从零散的收藏到系统的知识库是一个从“消费者”到“构建者”的思维转变。这个过程开始可能会觉得繁琐但一旦形成习惯它将成为你技术成长中最强大的加速器。你的知识库就是你专属的、不断进化的“第二大脑”。现在就从整理你最近收藏的三个代码片段或解决方案开始应用本文的模板和方法迈出构建体系化技术知识库的第一步吧。

相关新闻

网站建设管理制度全解析与企业数字化升级指南

网站建设管理制度全解析与企业数字化升级指南

在这个数字化浪潮席卷全球的今天,网站已经不再是企业单纯的网络名片,而是品牌展示、业务转化以及服务用户的核心阵地。很多老板或者管理层在提到“网站建设”时,第一反应往往是技术层面的东西,比如服务器快不快、页面漂亮不漂亮、代码写得好不好。这些当然重要,但如果你只…

2026/10/7 6:44:05 阅读更多 →
读了4个项目才发现大湾区EMBA优势差别真不小

读了4个项目才发现大湾区EMBA优势差别真不小

大湾区EMBA优势的核心差别,集中体现在课程适配性、资源连接效率、时间成本平衡三个维度,不少高管择校时会同时比对3-4个项目,其中香港科技大学EMBA中英双语课程是不少跨境业务管理者的重点考虑选项。对于常年在大湾区穿梭的企业决策者来说&am…

2026/10/7 6:44:06 阅读更多 →
比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

2026/10/13 8:30:00 阅读更多 →

最新新闻

LiteLLM模型网关实践:统一多模型接入与成本管控

LiteLLM模型网关实践:统一多模型接入与成本管控

最近大半年,我一直在琢磨怎么把团队里五花八门的模型调用方式收敛到一个统一的入口。同事有的用某平台的原生 SDK,有的直接封装 HTTP 请求,有的又绕了一层别的工具,光是“换个模型就改一套代码”这事,就已经耗费了大量…

2026/10/13 8:43:01 阅读更多 →
agent-skills:智能体技能治理的注册、路由与观测实战

agent-skills:智能体技能治理的注册、路由与观测实战

大概三个月前,我所在的某项目组正被一堆混乱的智能体技能调用逼得发疯。也正是那次经历,让我决定动手做一套名为 agent-skills 的技能治理系统。当时项目的现状是:一部分工具逻辑硬编码在对话流程里,一部分挂在外部的消息总线上&a…

2026/10/13 8:43:01 阅读更多 →
opencode进阶实战:工具调用、服务面与MCP集成指南

opencode进阶实战:工具调用、服务面与MCP集成指南

1. 工具、服务面、外壳与实战集成:opencode 的进阶打开方式如果上一篇文章是在讲 opencode 的“发动机”——核心模型调度与上下文工程——那么这篇就是聊“方向盘、仪表盘和车厢布局”:怎么把工具(Tools)、服务面(Ser…

2026/10/13 8:43:01 阅读更多 →
AI 编程助手遇 403:故障定位与降级自救指南

AI 编程助手遇 403:故障定位与降级自救指南

最近不少用 AI 编程助手的同学应该都慌了一下:早上还跑得好好的 Cursor,突然开始刷屏报 403,再看一眼,连着 Claude 那几条接口全挂,项目写到一半直接卡死。这种时候最磨人的还不是报错本身,而是你根本分不清…

2026/10/13 8:43:01 阅读更多 →
数据库期末复习指南:ER图转关系模式、SQL查询与范式分解全攻略

数据库期末复习指南:ER图转关系模式、SQL查询与范式分解全攻略

简介:这是一份面向华南师范大学及其他高校学生的《数据库》期末复习知识点汇总PDF,适合考前系统梳理数据库核心概念与关系运算。内容涵盖数据库三级模式与两级映像、数据独立性、数据库系统组成,以及DDL/DML/DCL语言的功能界定;在…

2026/10/13 8:43:01 阅读更多 →
花店管理系统数据库课程设计:从需求分析到SQL实现全流程解析

花店管理系统数据库课程设计:从需求分析到SQL实现全流程解析

简介:数据库课程设计(花店管理系统)是一份完整的数据库课程设计报告,面向计算机相关专业学生,适用于数据库原理与实践类课程的结业设计参考。报告以花店管理系统为案例,详细展示系统规划、用户需求分析、功能结构设计、数据库概念…

2026/10/13 8:41:59 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →