superpowers这个词在开发者圈子里最近算是被聊爆了。如果你关注AI编程工具肯定已经在热搜里见过它和codex、java、安装教程这些词绑定出现。它不是一个游戏外挂也不是什么玄学效率课而是一个开源的能力增强框架——专门用来给AI编码工具比如Codex、Claude Code这类助手叠加一套更聪明的工作方式。简单说它让AI助手从你问一句它答一句的被动应答模式切换成你给它一个任务它自动组织技能、分步执行、自检修正的主动工作模式。我知道很多人第一次听说这玩意儿第一反应是又一个花哨的提示词集合说实话我一开始也是这么想的但深入研究并在本地跑通之后我改变了判断。它的核心价值不在提示词本身而在于那套可组合、可扩展的技能包机制——你完全可以把那些现成技能包当积木再拼出自己的专属AI工作流。这篇文章我就用自己实操的经历把这套东西从原理到部署、从配置到排错讲透希望帮你绕开我踩过的那些坑。1. 先弄明白superpowers解决的到底是什么问题1.1 为什么现在AI编码工具需要技能包这种东西现在主流的AI编码助手无论是Codex还是其他终端型Agent底层逻辑其实都差不多接到你的指令读取上下文然后调用模型生成代码或命令。但你用过几次就会发现这类工具在复杂任务上有个通病——它没有主动性。举个例子你让它重构这个模块并补充测试它是会做但它不会主动去想这个模块有没有隐藏的依赖测试要不要覆盖边界条件重构后老接口要不要兼容你漏了细节它就按最省事的路径给你一个结果。这种被动执行在面对大型项目时非常致命因为真正的工程问题从来不是单一指令能覆盖的。superpowers的思路就是从这里切进去的。它设计了一套**技能Skills**系统每个技能本质上是一个结构化的Markdown文件里面写了特定场景下的完整执行策略和最佳实践。当AI工具的关键词触发机制检测到你的请求命中了某个技能时它会把对应技能注入到当前上下文让模型在动手之前先加载了一套专家级的工作方法。这相当于从让AI猜着干变成了让AI按一套成熟SOP来干。1.2 它和普通提示词工程的核心差异很多人會问那我直接在提示词里写请按照最佳实践重构不也一样吗这里有个本质区别。普通的提示词是一次性的模型上下文窗口有限你不可能在每次对话里把完整的方法论都贴进去。而superpowers的技能包是独立文件、按需加载的。它有一套最核心的自动化机制当你在脚本或配置里启用了某个关键词比如debugAI工具一旦检测到相关的任务描述就会自动把对应技能文件的内容附加到上下文中。这个按需注入的机制让模型可以轻装上阵处理常规任务而遇到特殊任务时又能随时获得完整的方法论支持不会受上下文长度限制。我打个比方你就懂了普通AI编码助手像个没什么经验的新员工你每次交代任务都得把要求掰碎了说superpowers相当于给这个新员工配了一整套工作手册——遇到什么情况翻哪一章手册里写得明明白白而且它能自己判断该翻哪一章。你只需要下达任务剩下的事它按手册来。1.3 项目本体包含哪些东西适合哪些人superpowers项目本身是一个完整的框架它包含了一套经过实践检验的技能包库、一个用于管理技能加载的引导脚本以及一份详细的安装和使用文档。技能包的内容基本覆盖了日常开发的高频场景代码审查、自动化测试、遗留系统重构、Bug定位、文档生成等。我个人认为最适合用到这套东西的人是每天大量使用Codex或Claude这类终端AI编码工具的开发者负责维护大型老项目、需要频繁做代码分析和重构的工程师想要把AI辅助开发的流程标准化、团队化的技术负责人如果你只是偶尔让AI帮你写个脚本片段那这东西对你来说有点大材小用。但如果你像我一样已经把AI编码工具当成了日常主力开发伙伴那superpowers值得花一个晚上去研究——它的技能加载机制一旦跑起来产出质量真的比裸用工具高出一个档次。2. 安装与基础准入这一步错了后面全白搭2.1 准备阶段的环境要求在动手安装之前先检查一下你的环境。superpowers目前主推的运行载体是Codex终端工具和Claude Code这类支持插件机制的AI编码工具。我用的是Codex下面的步骤也以它为准但核心逻辑在同类工具上是通用的。你的机器需要满足这几个条件操作系统macOS或Linux都可以Windows用户建议用WSL2因为脚本里大量使用了类Unix的路径和命令已安装Node.js且版本不低于18。项目本身的引导脚本依赖Node运行时已经配置好Codex或其他AI工具的CLI环境确保在终端里能正常调用注意如果你在中国大陆的网络环境里拉取项目依赖可能会遇到GitHub访问不稳定或npm源慢的问题。这不是superpowers特有的问题是很多开源项目都会遇到的网络环境问题常规做法是配置镜像源或用国内可访问的镜像加速服务这属于基础环境调试跟工具本身无关。2.2 标准的安装流程安装过程比我预想的要简单核心就几步。先克隆仓库到本地git clone https://github.com/obra/superpowers.git cd superpowers然后运行安装脚本。它会自动创建必要的配置文件并在你的用户目录下生成一个.superpowers的隐藏文件夹用来存放技能包的索引和运行时文件npm install npm run setup安装脚本跑完后会提示你检查Codex的配置文件。新版Codex通常会有一个全局的config.toml文件位置一般在~/.codex/config.toml你需要把引导脚本的位置加进去这样Codex在启动时才知道要去哪里找superpowers的技能扩展。如果你用的是Claude Code操作类似只是接入方式略有差异总体上都是在配置里加载插件路径这个思路。2.3 安装完怎么确认它真的生效了装完不是就完事了你得确认技能加载机制真的在工作。我当时的验证方法很简单在Codex环境里启动一个新的对话会话故意输入一个带debug关键词的任务比如帮我debug一下这个函数为什么返回空值观察对话开始时是否有额外的系统提示或环境信息被注入如果一切正常你会看到模型在回答前先加载了调试技能的系统提示。这个加载过程可能不会直接打印superpowers loaded之类的字样但你可以通过模型的行为变化来判断——它会更系统性地要求你提供复现步骤、检查日志而不是上来就猜测代码哪里错了。我第一次装完就是因为没注意这个细节还以为装失败了结果排查半天发现只是没有做这个验证步骤。建议所有第一次接触superpowers的人务必装完后先做一次debug技能触发测试这是最直观的验收方式。3. 技能包机制是怎么工作的一份Markdown文件的生产力3.1 技能包的内部结构和触发逻辑理解了superpowers的核心机制你才算真正掌握它。技能包这套设计的精巧程度远超过表面看起来的提示词集合。一个标准的技能文件开头是一段YAML格式的元数据区也叫frontmatter里面声明了技能的id、描述、适用场景以及最重要的——允许自动载入的权限标记。元数据下面是正文正文就是一段完整的、精心撰写的系统提示词它指导模型按照特定的工作流程来处理任务。触发逻辑是这样的当你在对话中输入内容时superpowers的引导脚本会实时扫描你的输入文本并把文本与所有技能文件中的关键词描述做匹配。一旦命中脚本就在后台把对应技能的正文内容注入到接下来发给模型的请求中。因为这段内容是作为系统级指令存在的模型在生成回复前就会读到这套方法论。以代码审查技能为例它会在注入的内容里明确要求模型先审视代码的完整上下文再按可维护性、性能、安全三个维度逐一评估对每个发现的问题标注严重等级最后输出可执行的修改建议而不是泛泛而谈你看这本质上就是一份专家审查清单。没有这套注入模型更倾向于只针对你指出来的那几行代码给建议而不会主动扩大到全局视角。3.2 内置技能包里最常用的几个项目自带的技能包数量不少我挑几个实际用下来频率最高的说代码审查技能。这是我最常用也最推荐的一个。激活后Codex对待被审查代码的态度会严谨得多不再只是指出语法问题而是会分析架构耦合、资源泄露隐患、异常处理缺失这些深层次问题。对于代码质量的提升非常明显。调试技能。其实这个技能的价值不在于帮AI找Bug而在于让AI遵循一套科学排查方法——让模型先要求你提供最小复现用例、检查相关日志、定位问题边界然后才给出修复建议。我以前用裸Codex调试的时候最烦它不做前置调查就瞎猜原因有了这套技能后整个排查过程变得有章法了。重构技能。这个对老项目维护者极有价值。技能里要求模型在重构前先标注出原有接口的兼容性影响范围重构后还要给出一个验证清单防止改动引入回归问题。这比让AI自由发挥地重构安全得多。其他还有文档生成、测试用例生成等技能也都挺实用但前面这三个是让我觉得这个项目值回票价的关键模块。3.3 如何写一个属于自己的自定义技能说完了官方技能还是得说说自定义。毕竟每个人的项目场景和标准都不一样官方技能包再全也不可能覆盖你团队特有的开发规范。创建自定义技能的方法其实不难。你可以在.superpowers/skills目录下新建一个Markdown文件结构如下--- name: my-team-review description: 用于执行团队自定义的代码评审标准 allowed-auto-load: true triggers: - 团队评审 - my-team-review --- 你是一名资深代码评审专家。在评审代码时必须额外遵守以下团队规范 1. 优先检查是否存在安全漏洞特别是SQL注入和敏感信息硬编码 2. 所有接口变更必须检查是否同步更新了API文档 3. 如果发现问题用表格形式输出并按严重程度排序 ...保存后重新启动Codex会话你的自定义技能就能被识别了。关键在triggers字段它会决定什么关键词能激活这个技能。我自己给团队写了一个带安全评审触发词的技能效果很不错。提示写自定义技能时正文内容一定要具体少用请确保代码质量这种正确但无用的话。技能的价值密度直接决定AI输出的质量。你给它的标准越明确、可执行它输出的结果就越接近你想要的效果。3.4 技能权重与自动加载的权限控制superpowers还有一个容易被人忽略但很重要的设置项——技能权重。当多个技能可能同时命中一个任务时系统会按权重值决定优先加载哪个。这个设计很实际比如重构遗留系统这个任务可能同时触发重构技能和代码审查技能权重高的那个会先被加载另一个则可能作为辅助参考。权重值可以在每个技能的元数据区配置官方推荐的范围是1到10。默认技能一般设为5自定义技能建议根据实际需要调整。如果你发现自己定义的技能总是没被触发多半是权重太低了。另外allowed-auto-load这个字段值得注意。它控制的是一个技能是否允许在后台被自动加载。如果你有一些涉及敏感信息或需要人为确认才能使用的技能我建议把它设为false这样技能只会在你明确要求时才会被加载避免无意间触发带来不可预期的影响。4. 实战演示用superpowers配合Codex处理一个Java遗留服务4.1 场景背景一团乱麻的老模块光讲理论容易让人觉得虚我拿一个真实做过的案例来完整走一遍流程。当时我在处理一个Java的老服务模块这个模块是好几年前写的代码风格非常随意一个核心类有2000多行里面充斥着各种魔法值、重复代码块以及好几个明显被注释掉的老逻辑。领导的要求是在不改变对外接口的前提下把代码理顺并补充必要的单元测试。这种任务在superpowers出现之前我用Codex做过不止一次效果都不理想。它往往会过度重构——把原本稳定但丑陋的接口内部实现改得面目全非或者因为理解不全而遗漏一些微妙的边界逻辑。所以这次我决定改变策略给Codex加载重构技能让它在动手前先学会克制。4.2 用技能约束AI的工作方式我先在Codex会话中明确任务输入让它自动触发重构技能。这里有个技巧技能触发后模型输出的第一段内容通常是它对任务的理解和计划我建议你在这一步稍作停留看看它的分析是否符合预期。实测下来加载重构技能后的Codex行为模式完全不一样了。它会先输出一份重构范围说明详细列出该类的依赖关系图概览哪些方法是内部实现可以改动、哪些是核心逻辑需要谨慎潜在的风险点提示计划采用的代码组织方式在确认方案无误后我让它分批执行重构而不是一次性大改。这让我能逐步审阅每一步的diff及时发现问题。整个过程中Codex对保持接口兼容这条约束的执行特别到位——最后重构完对外暴露的所有公共方法签名一个没变只是内部逻辑干净了很多。4.3 真实的效果与还需手工介入的地方这次重构做下来最直观的成绩是那2000多行的类被拆分成5个职责清晰的小类每个类都控制在300行左右并且Codex顺带生成了十几个覆盖核心路径的JUnit测试用例。但我也得说点大实话AI不是万能的。它生成的那些测试用例覆盖了正常路径和几个常见异常路径但有一两个涉及并发场景的测试——它写出来的实现是有逻辑漏洞的比如没有正确使用CountDownLatch导致测试变成永远的等待这部分还是我自己接手修正的。所以我的经验是用superpowers辅助开发能帮你把脏活累活做掉80%剩下20%涉及业务深水区和极端边界的部分还是需要人来把关。AI是放大器不是替代品。它把你的方法论执行得更彻底、更稳定但如果方法论本身有盲区它也一样会在盲区里犯错。4.4 一些提升实战效率的细节习惯在跑完这个Java重构项目之后我总结了一套配合使用的小习惯分享给你每个技能相关的任务启动时先花30秒让模型输出执行计划不要跳过这步直接让它开始改代码。计划阶段是纠正AI理解偏差成本最低的时候。提交代码前额外触发一次代码审查技能让它用第三方视角重新审视一遍改动很多自己看不出来的问题都是这一步揪出来的。涉及接口行为变更时强制要求模型用表格列出所有变更点包括影响范围。这个要求可以写进自定义技能里这样只要触发模型就会自动输出表格。这些小习惯看着不起眼但对质量的影响非常显著。它们本质上是在利用superpowers的机制把AI的工作流程往更严谨的方向引导。5. 安装和日常使用中最容易踩的坑都给你列出来5.1 技能文件没有被加载时的排查链路如果你发现装了superpowers之后AI的行为和以前完全一样没有任何变化大概率是技能加载环节出了问题。我建议按这条链路一步步排查第一步检查配置文件的路径有没有写对。Codex的配置文件中要正确指定superpowers脚本的路径很多安装失败的案例都卡在这一步。如果路径写错了Codex根本不会去加载任何扩展。第二步确认触发词是否包含在你的输入里。技能包不是无差别加持它必须依靠特定的关键词来触发。如果你的任务描述里没有命中任何技能的触发词模型就只会按默认方式工作。第三步在superpowers的目录下运行一次node --version确保Node版本兼容。某些新版本的技能文件可能用到了旧版本Node不支持的语法这种情况下引导脚本会崩溃但不报错静默失败。第四步查看Codex的日志输出。Codex在调试模式下会输出详细的插件加载信息如果你能熟练看日志这里的线索会最直接。按照这四步走基本能解决90%以上的技能不生效问题。5.2 触发词过于模糊导致的行为漂移还有一个比较隐蔽的问题就是触发词写得过于宽泛导致技能在你不希望的场景下也被激活。比如你给重构技能设了优化代码这个触发词那几乎每次对话都会命中它因为优化这个词在开发对话里太常见了。结果是模型每次都先按重构方法论来分析问题哪怕你只是问一个简单的小问题它也要绕个远路。这会显著拖慢回答速度而且输出内容变得冗长、重点不突出。解决办法也很简单触发词尽量用那些明确指向特定场景的词组而不是通用的动词。比如用开始重构、进入评审模式这样带有明确动作指向的词而不要用优化、分析这类高频动词。5.3 多技能互相冲突的时候怎么办当你的技能库越来越庞大时一定会遇到多个技能同时匹配一个任务的情形。默认情况下superpowers会加载权重最高的技能但有时候你希望两个技能协同工作或者希望临时改变某个技能的优先顺序。这里我推荐的做法是利用自定义技能的绑定规则。你可以在一个技能里把另一个技能的关键要求包含进来实现技能套技能。比如我把团队特定的安全规范整合到了代码审查技能中这样只要触发审查技能团队规范也会自动生效避免了两个技能冲突时的不可预测性。还有个小窍门如果你暂时不需要某个技能参与自动加载但又不想删除它可以把它的allowed-auto-load临时改为false。这样它仍然存在于你的技能库中只是不再自动参与匹配需要时可以手动要求模型加载。5.4 Windows环境下容易忽略的问题Windows用户如果遇到了诡异的错误大概率是环境兼容性问题。我是用WSL2来跑的superpowers整体体验很顺滑但如果你直接装在Windows PowerShell或CMD环境下很可能遇到脚本执行权限问题或路径中的反斜杠识别错误。建议Windows用户优先选用WSL2环境。不只是superpowers所有依赖类Unix命令链的工具在WSL里都会顺畅得多。6. 让superpowers真正融入日常开发流的最后建议工具装好只是起点能不能让它的价值充分发挥取决于你怎么把它嵌进自己的工作流。我跑了一段时间后有个很深的体会它本质上在逼你用工程化的方式使用AI编码工具——先定标准再让AI按标准执行。这套思维方式本身比工具带来的效率提升更有价值。我的建议是刚开始接触superpowers时先只启用两个技能代码审查和调试。用熟这两个之后再慢慢探索重构、文档生成等更多技能。不要一上来就把所有技能都打开那样只会让你的AI工作变得复杂而低效——你连每个技能的行为模式都还没建立直观认知谈不上驾驭它们。等你对内置技能的工作方式有了手感之后再开始动手写自己的团队专属技能包。把你们团队那些只可意会不可言传的开发规范写成明确的标准注入给AI那个阶段你会感受到这套工具真正的威力——它不再是通用助手而是真正理解你们团队上下文的工作伙伴了。最后分享一个我自己的实践小技巧我会在每个技能文件的正文末尾追加一段边界声明明确写出哪些场景是此技能不负责处理的。这个小习惯极大减少了AI跨出职责范围乱作为的情况。如果你也在用superpowers不妨试试。
企业数字化 ERP 产品动态
相关推荐
Java开发者必备的SQL优化与性能调优指南 1. 项目概述作为一名从Java开发转战全栈的程序员,我深知SQL在开发中的重要性。很多Java程序员在初期都会忽视SQL的学习,认为只要会写基本的CRUD就足够了。但实际上,SQL的掌握程度直接影响到系统性能和开发效率。这个系列记录了我重新系统学习… · 2026/11/4 5:44:17
《三角洲行动》内核级外挂逆向分析与防护策略 1. 项目背景与发现过程作为一名长期从事游戏安全研究的逆向工程师,我在整理旧虚拟机时意外发现了一个针对《三角洲行动》的外挂程序。这个外挂采用了典型的内核级作弊手段,让我立即联想到之前分析过的ROG系列作弊工具。通过初步检查,发现这个… · 2026/11/4 5:43:17
3ds Max骨骼绑定全流程:机械臂IK与角色行走循环蒙皮 简介:PPT课件围绕3ds Max角色动画中的骨骼绑定与蒙皮展开,面向三维动画初学者、课堂教学及自学者,帮助梳理从骨骼创建到角色动作调节的基础流程。内容从Bones内置骨骼系统讲起,区分刚性骨骼直接连接与软性骨骼蒙皮两种支配形式&am… · 2026/11/4 5:43:17
Hermes Agent多模型智能切换实战指南:打造个性化AI工作流 Hermes Agent多模型智能切换实战指南:打造个性化AI工作流
在AI技术快速发展的今天,单一模型已经无法满足复杂多样的任务需求。Hermes Agent作为一款革命性的AI代理工具,通过其强大的多模型切换功能,让开发者能够根据具体任务需求… · 2026/11/4 6:29:25
5个关键技巧:彻底解决Hermes Agent数据库连接池性能瓶颈 5个关键技巧:彻底解决Hermes Agent数据库连接池性能瓶颈
Hermes Agent性能优化是现代AI代理系统高效运行的核心挑战之一。在高并发场景下,数据库连接池配置不当会导致连接耗尽、响应延迟和资源浪费等严重问题。本文将提供一套实战化的连接池调优方案&am… · 2026/11/4 6:29:25
Apache DolphinScheduler 完整指南:如何快速搞定任务依赖、分布式调度与失败重试 Apache DolphinScheduler 完整指南:如何快速搞定任务依赖、分布式调度与失败重试 【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 项目地址: h… · 2026/11/4 6:29:25
jsongrep查询语法完整清单:10个正则路径运算符让你精通JSON搜索 【免费下载链接】jsongrep A path query language for JSON, YAML, TOML, and other serialization formats. 项目地址: https://gitcode.com/gh_mirrors/js/jsongrep 点击查看 免费下载 jsongrep 是一个用 Rust 编写的命令行工具和库,专门用于在 JSON、… · 2026/11/4 6:29:25
Hermes Agent 金融投资顾问实战:3 步跑通投资组合优化与风险评估 Hermes Agent 金融投资顾问实战:3 步跑通投资组合优化与风险评估
一个季度回撤 20%,很多投资者的第一反应是慌,第二反应是翻仓位表找原因——但表上只有持仓,没有答案。Hermes Agent 是 Nous Research 开源的自进化 AI 智能体框架… · 2026/11/4 6:28:25
Hermes Agent:连接池参数怎么配,4 个指标验证调优生效 Hermes Agent:连接池参数怎么配,4 个指标验证调优生效
凌晨 3 点告警:连接池打满,接口 P99 飙到 8 秒,日志刷满 PoolTimeout。别急着拉大数字——Hermes Agent 的出站连接池和会话状态库是两处独立配置,这… · 2026/11/4 6:28:25
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46