IntelliJ IDEA中Services窗口不显示的排查与修复指南
1. 问题现象与核心影响今天想聊聊一个在IntelliJ IDEA里搞微服务或者多模块项目时几乎每个开发者都会遇到的“小”问题Services窗口不显示。你可能正兴致勃勃地准备启动你的Spring Boot应用或者想在一个视图中统一管理你的Eureka、Gateway和各个业务Service模块结果发现IDEA左下角或者Run/Debug配置旁边那个熟悉的“Services”标签页不见了或者点开里面空空如也。这感觉就像你准备开车钥匙插进去了但仪表盘就是不亮所有指示灯一片漆黑让你瞬间有点懵。这个问题看似不大但实际影响不小。首先它直接打断了你的开发调试流程。对于Spring Cloud项目Services窗口尤其是其背后的Run Dashboard视图是管理多个并行启动的应用实例的利器你可以一键启动、停止、查看日志而不用在几十个Run Configuration里手动切换。其次它可能掩盖了更深层次的配置问题比如项目结构未被IDEA正确识别为Spring Boot或微服务项目这会导致后续的自动配置、端点检测、健康检查等功能都受到影响。最后它非常影响效率迫使你回到原始的、逐个启动模块的“石器时代”。从网络热词来看这个问题与SpringBoot、SpringCloud、RunDashboard、Eureka、Gateway等高度关联说明这确实是Spring生态开发者特别是微服务架构实践者中的高频痛点。很多人搜索“IDEA中Services不显示如何处理”背后真正的需求是“如何让IDEA正确识别我的多模块Spring Boot/Cloud项目结构并提供一个集中式的运行管理界面”。接下来我们就从根因到解决方案一步步拆解。2. Services窗口的本质与触发条件在深入解决之前我们必须先理解IDEA的Services窗口特别是针对Spring和微服务的部分到底是怎么工作的。它不是一个独立的功能而是一个智能视图其显示内容依赖于IDEA对项目类型和运行配置的自动检测。2.1 Services窗口与Run Dashboard的关系很多人会把它们混为一谈其实有细微差别。在较早版本的IDEA中当你创建了多个Spring Boot运行配置时IDEA可能会弹窗询问你是否要添加到“Run Dashboard”。这个Run Dashboard就是一个特殊的Services视图专门用于管理一组相关的运行配置。在新版IDEA中这个概念被整合并强化了“Services”窗口成为了一个更通用的容器它可以显示Run Dashboard管理本地运行的应用如Spring Boot App。Docker管理容器。Database管理数据源连接。其他服务如Kubernetes等。我们遇到的问题通常是指“Services窗口中没有显示我的Spring Boot应用”其核心就是Run Dashboard视图没有正确生成或显示。2.2 自动显示的触发机制IDEA不会无缘无故地显示你的应用。它需要一些“信号”来识别这是一个需要被纳入Services管理的应用。最关键的两个信号是项目类型识别IDEA必须将你的模块正确识别为Spring Boot项目。这依赖于pom.xml或build.gradle中声明的Spring Boot相关依赖尤其是spring-boot-starter。项目根目录或模块目录下存在src/main/java和src/main/resources等标准Maven/Gradle源码目录结构。存在一个带有SpringBootApplication注解的主类。有效的运行配置Run Configuration这是最直接的触发器。当你第一次点击SpringBootApplication类旁边的绿色运行箭头时IDEA会自动为你创建一个“Spring Boot”类型的运行配置。这个自动创建的过程就是IDEA将应用注册到Services窗口的关键时刻。如果这个过程被跳过、被修改或者出现了异常Services窗口就可能没有反应。2.3 为什么有时候不显示理解了触发机制原因就清晰了项目导入方式不当比如直接打开了子模块的目录而非整个父工程包含pom.xml的根目录。运行配置被手动修改或删除手动创建的运行配置如果类型选错比如选成了普通的“Application”而不是“Spring Boot”可能无法被Services窗口捕获。IDEA缓存或索引问题IDEA的元数据缓存损坏导致其无法正确索引到Spring Boot的配置。.idea目录下的配置文件异常workspace.xml或modules.xml等文件记录了项目结构和运行配置如果这些文件混乱或损坏会影响功能。特定版本IDEA的Bug或特性变更不同版本的IDEA对Services窗口的默认行为可能有调整。3. 系统性排查与修复流程遇到Services不显示不要盲目操作。遵循一个从简到繁的系统性排查流程可以高效解决问题。3.1 第一步验证项目结构与运行配置这是最基础也最重要的一步。确认项目根目录确保你在IDEA中打开的是正确的项目根目录。对于Maven多模块项目根目录下应该有一个pom.xmlpackaging类型为pom并且各个子模块如eureka-server,api-gateway,user-service在IDEA的Project视图中是作为模块Module存在的而不是独立的项目。检查并创建正确的运行配置找到你的Spring Boot主类有SpringBootApplication注解的那个。不要使用任何现有的、可能类型不对的运行配置。直接在这个主类上右键 - Run ‘YourApplication.main()’。观察运行控制台。如果应用能正常启动并且IDEA在运行按钮附近没有弹出“Add to Run Dashboard”的提示新版IDEA可能直接静默添加则进行下一步。去菜单栏Run - Edit Configurations…。在左侧列表里找到你刚刚通过点击绿色箭头运行的那个配置。检查它的“Type”是不是“Spring Boot”。如果是“Application”那它就是问题的根源。注意手动在“Edit Configurations”里点击“”号创建的配置如果类型选错是不会被Services窗口识别的。最可靠的方式永远是让IDEA通过点击主类旁的绿色箭头自动生成。3.2 第二步强制开启Run Dashboard传统方法如果自动生成配置后Services依然不显示可以尝试手动在项目配置文件中启用Run Dashboard。这是一个经典方法尤其适用于旧版IDEA或某些特定项目结构。在项目根目录下找到.idea文件夹如果看不到需要在文件管理器或IDEA中设置显示隐藏文件。在.idea文件夹内找到workspace.xml文件。在workspace.xml文件中搜索component nameRunDashboard这个组件配置。如果不存在你需要手动添加。找到文件末尾/project标签之前在其他component标签附近添加如下配置component nameRunDashboard option nameconfigurationTypes set option valueSpringBootApplicationConfigurationType / /set /option option nameruleStates list RuleState option namename valueConfigurationTypeDashboardGroupingRule / /RuleState RuleState option namename valueStatusDashboardGroupingRule / /RuleState /list /option /component保存workspace.xml文件然后回到IDEA它会提示文件已更改点击重新加载。最后重启IDEA。重启后再次尝试通过点击主类绿色箭头运行应用观察Services窗口是否出现。3.3 第三步清理并重建IDEA缓存与索引如果配置文件方法无效很可能是IDEA的内部缓存出了问题。这是解决很多IDEA诡异问题的“万能钥匙”。完全关闭IDEA。找到你的项目目录手动删除以下文件夹.idea目录下的workspace.xml文件可以先备份以及整个.idea目录更彻底但会丢失所有项目特定的IDE设置如运行配置、代码风格等需谨慎。更推荐的做法是删除项目根目录下的.idea文件夹和所有模块下的.iml文件。同时删除本地Maven仓库中可能损坏的依赖可选但有时有效找到你的Maven本地仓库路径通常在用户目录下的.m2/repository可以删除整个repository目录但重新下载所有依赖耗时很长。折中方案是只删除与Spring Boot、Spring Cloud相关的目录如/org/springframework/boot/,/org/springframework/cloud/等。重新使用IDEA打开项目根目录下的pom.xml文件。IDEA会像首次导入一样重新解析项目结构、下载依赖并建立索引。等待索引完成右下角进度条消失然后重复3.1的步骤通过点击主类绿色箭头来运行应用。3.4 第四步检查IDEA设置与插件有些设置或插件冲突可能会影响Services功能。检查Services工具窗口是否被意外关闭点击IDEA底部边缘或侧边栏的“Services”按钮或者通过菜单View - Tool Windows - Services来打开它。有可能只是这个窗口被隐藏了。检查运行配置模板进入Run - Edit Configurations…在左侧列表的最上方找到“Templates”。展开后找到“Spring Boot”。确保这里的设置是合理的特别是“Before launch”部分没有异常任务。你可以尝试点击“Restore defaults”恢复默认。禁用冲突插件暂时禁用一些可能干扰的非必要插件特别是那些与运行、部署、Spring相关的第三方插件。进入File - Settings - Plugins逐一禁用可疑插件后重启IDEA测试。4. 针对微服务多模块项目的特殊配置对于标准的单模块Spring Boot项目上述步骤通常能解决问题。但当我们面对的是一个典型的Spring Cloud多模块项目时情况会复杂一些。我们的目标不仅是让每个服务显示在Services里更是希望它们能以一个逻辑组比如“MyCloudSuite”的形式被管理。4.1 项目结构标准化确保你的多模块项目结构是IDEA友好的。一个典型结构如下my-spring-cloud-project (Root Project) ├── pom.xml (packaging: pom, 管理所有子模块和公共依赖) ├── eureka-server (Module 1) │ ├── pom.xml │ ├── src/main/java/com/example/eureka/EurekaServerApplication.java │ └── src/main/resources/application.yml ├── api-gateway (Module 2) │ ├── pom.xml │ ├── src/main/java/com/example/gateway/GatewayApplication.java │ └── src/main/resources/application.yml └── user-service (Module 3) ├── pom.xml ├── src/main/java/com/example/user/UserServiceApplication.java └── src/main/resources/application.yml关键点在于必须从根pom.xml打开项目让IDEA识别到整个模块树。4.2 使用“Compound”运行配置进行分组管理当每个子模块都能独立在Services中显示后我们可以创建一个“复合”配置来一键启动整个集群。进入Run - Edit Configurations…。点击左上角“”号选择“Compound”。给这个复合配置起个名字比如“Run All Microservices”。在右侧面板将你需要的所有Spring Boot运行配置Eureka, Gateway, User-Service等添加到“”列表中。点击OK保存。现在当你运行这个“Compound”配置时它会按列表顺序启动所有服务。但是请注意这个Compound配置本身可能不会出现在Services窗口的“Run Dashboard”分组下它通常出现在“Application”分组或你自己的自定义分组中。Services窗口的核心价值在于监控和管理这些独立运行的服务实例查看日志、重启单个服务而Compound配置的价值在于一键启动整个套件。两者可以结合使用。4.3 利用.idea/workspace.xml进行高级分组如果你希望Services窗口中的服务按照自定义逻辑分组比如把所有业务服务放一组基础设施服务放另一组可以通过直接编辑workspace.xml实现但这属于高级操作且可能随IDEA版本变化。更稳定的做法是依赖IDEA的自动分组或者接受默认的平铺展示。5. 常见疑难杂症与避坑指南在实际操作中你可能会遇到一些不那么直观的坑。这里分享几个我踩过的雷。5.1 坑一Maven Profile或属性过滤导致模块识别失败如果你的pom.xml使用了复杂的Profile或资源过滤可能会干扰IDEA对Spring Boot主类的识别。例如某个Profile激活时引入的插件或配置导致IDEA在索引时无法确定正确的类路径。排查尝试在IDEA的Maven工具窗口中禁用所有活动的Profiles然后对项目进行“Reimport”。再检查模块是否被正确标记为Spring模块模块图标上是否有蓝色的“S”或绿色的弹簧叶子图标。解决确保你的主类路径清晰避免在buildplugins中使用过于激进且与IDEA不兼容的Maven插件配置。可以考虑为IDEA专门配置一个简单的Profile。5.2 坑二端口冲突与运行配置重复有时Services窗口“显示”了应用但状态异常比如一直启动中或失败。这可能是因为端口冲突。如果你手动复制过运行配置可能会存在多个配置指向同一个应用但参数如server.port不同的情况造成混乱。排查检查Edit Configurations里是否有名称类似但实质重复的配置。检查每个配置的“Active profiles”和“Override parameters”中设置的端口号。解决清理掉重复的、无效的运行配置。确保每个微服务实例都有唯一的端口。可以在application.yml中通过server.port: 0设置随机端口但在开发阶段更推荐固定端口以便管理。5.3 坑三新版IDEA的界面变化与设置迁移从IDEA 2022.3左右版本开始JetBrains对Services窗口的UI和默认行为做了一些调整。你可能发现以前好用的方法不灵了。例如“Run Dashboard”这个名称在UI上可能不再突出显示而是完全融入“Services”标签。应对关注IDEA的更新日志。当遇到问题时首先在IDEA自带的帮助Help - Find Action然后搜索“Services tool window”里查看最新官方文档。社区论坛和JetBrains的issue tracker也是寻找答案的好地方。核心思路不变确保运行配置类型正确项目被正确识别。5.4 坑四网络代理或企业环境导致组件加载失败在一些企业网络环境下IDEA在启动时可能需要从网络加载一些组件或检查更新如果网络不通可能会静默失败导致部分功能如Services窗口对Docker、K8s的支持初始化不全。现象Services窗口可能只显示一部分类型服务或者完全空白且无错误提示。解决检查IDEA的代理设置Settings - Appearance Behavior - System Settings - HTTP Proxy。如果是企业内部环境可能需要配置非代理主机No proxy for。尝试在能连接外网的环境下测试以排除网络问题。6. 最佳实践与长效维护建议为了避免每次打开项目都面临Services消失的窘境养成好的项目配置习惯至关重要。将.idea目录纳入版本控制—— 不推荐但有例外通用规则.idea目录下的workspace.xml包含了大量个人工作区设置如窗口布局、运行配置历史、本地历史记录等这些不应该提交到版本库通常会在.gitignore中忽略。例外情况对于团队共享的、与项目强相关的IDE配置可以考虑提交部分文件。JetBrains官方推荐将以下文件纳入版本控制.idea/codeStyles/代码风格方案.idea/inspectionProfiles/检查方案.idea/fileTemplates/文件模板对于运行配置如果你有需要团队共享的Compound配置或特定的模板设置可以单独导出为.xml文件放在项目根目录如runConfigurations/下并编写README说明如何导入。而不是直接提交workspace.xml。使用Maven/Gradle的标准化项目结构严格遵守Maven或Gradle的标准目录布局。IDEA对这些标准结构的支持是最好的。避免自定义的、非标准的源码目录路径这会让IDEA的自动识别功能失效。为每个微服务模块创建独立的运行配置并保存在确保每个模块都能通过点击主类绿色箭头正确运行后可以进入Run - Edit Configurations为你需要经常单独启动的模块配置点击工具栏上的“Save as a file”图标一个磁盘软盘图标。这会将配置保存为.idea/runConfigurations/YourConfigName.xml。这个文件可以被纳入版本控制团队成员导入项目后可以直接使用这些预定义的配置。定期清理和重建索引如果你经常切换分支或者项目依赖有重大变更定期使用File - Invalidate Caches and Restart…功能是一个好习惯。这能解决很多因缓存导致的元数据不一致问题。考虑使用更专业的微服务开发工具如果你的项目非常庞大Services窗口的管理能力可能捉襟见肘。可以考虑使用IDEA的付费版Ultimate中更强大的“Microservices”工具窗口如果可用或者探索像Spring Cloud Config、Spring Boot Admin这样的运维监控组件它们能提供生产级别的服务管理视图而不仅仅是开发时的启动器。Services窗口不显示本质上是一个“信号丢失”问题。IDEA没有收到足够明确的信号来判定你的应用需要被纳入这个管理视图。我们的排查思路就是一步步检查和修复这些信号链路从最基础的项目结构、运行配置类型到IDEA的缓存和索引再到项目本身的配置文件。对于复杂的微服务项目理解Services窗口与Run Dashboard的关系并善用Compound配置可以大幅提升开发体验。记住当遇到问题时从最简单的“点击主类绿色箭头”开始往往能最快定位到根源。

相关新闻

VS Code代码颜色自定义指南:从原理到实践,打造个性化高亮方案

VS Code代码颜色自定义指南:从原理到实践,打造个性化高亮方案

1. 为什么你需要自定义代码颜色?如果你每天在VS Code里敲代码的时间超过4小时,那么你眼睛的舒适度,很大程度上就取决于你面前那堆五颜六色的字符。默认的配色方案,比如“Dark”或者“Light”,是微软团队为大众口味调校…

2026/10/8 19:58:28 阅读更多 →
网络安全实战入门:从Kali配置到渗透测试全流程解析

网络安全实战入门:从Kali配置到渗透测试全流程解析

这类教程最值得先看的不是它覆盖了多少工具,而是能不能帮你把零散的知识点串成可复现的实战路径。很多人学网络安全,工具装了一堆,命令也敲了,但遇到真实环境还是不知道从哪下手,或者跑一半就报错卡住。这个所谓的“最…

2026/10/11 20:24:31 阅读更多 →
多机多卡训练实战:NCCL、GDR与InfiniBand组网配置全解析

多机多卡训练实战:NCCL、GDR与InfiniBand组网配置全解析

1. 项目概述:从单卡到集群的必然跨越如果你已经习惯了在单张GPU上跑模型,那么当你第一次面对需要将模型拆分到多台服务器、数十张甚至上百张GPU上时,那种感觉就像是从开家用轿车突然要去驾驶一辆重型卡车。多机多卡训练,或者说分布…

2026/10/11 6:10:50 阅读更多 →

最新新闻

新浪Level2接口SDK接入实战:授权、协议解析与避坑指南

新浪Level2接口SDK接入实战:授权、协议解析与避坑指南

简介:新浪Level2接口SDK是一份面向量化开发与行情分析人员的Java工程,用于对接新浪Level2全推行情,获取股票、基金等品种的深度交易数据。相比普通免费接口,Level2数据在速度与深度上更适合机构级策略,适合有一定Java基…

2026/10/11 22:50:35 阅读更多 →
一个 Key 调用所有模型:2026 四大聚合平台价格、生态与稳定性横评

一个 Key 调用所有模型:2026 四大聚合平台价格、生态与稳定性横评

大模型 API 聚合平台的核心价值一句话就能说清:一个 Key 接入多家大模型,统一计费与访问管理,把供应商切换成本降到最低。市面上的主流玩家分三类——国际商业聚合、国内商业聚合、自托管开源方案,路线不同,取舍也不同…

2026/10/11 22:50:35 阅读更多 →
HOP上游升级SOP:pnpm upstream:update一键同步rhwp并全链路验证的完整流程

HOP上游升级SOP:pnpm upstream:update一键同步rhwp并全链路验证的完整流程

【免费下载链接】hop 项目地址: https://gitcode.com/gh_mirrors/hop22/hop 点击查看 免费下载 HOP 是一款开源的 HWP/HWPX 文档编辑器,桌面外壳由 HOP 团队维护,而文档解析与渲染引擎来自上游项目 rhwp。如何安全地跟随上游版本前进&#x…

2026/10/11 22:50:35 阅读更多 →
Android游戏逆向重构实战:从植物大战僵尸源码2到可运行工程

Android游戏逆向重构实战:从植物大战僵尸源码2到可运行工程

简介:本资源为《植物大战僵尸》Android平台开源实现的完整工程源码,面向Android游戏开发初学者与进阶者,聚焦塔防类游戏架构设计、图形渲染与状态管理等核心实践。压缩包共173个文件,含20个Java源文件(涵盖GameScene、…

2026/10/11 22:50:35 阅读更多 →
基于线性回归的PM2.5预测系统Python源码实战解析

基于线性回归的PM2.5预测系统Python源码实战解析

简介:基于线性回归的PM2.5预测系统源码,是一套面向Python学习者、机器学习入门者及大气环境数据分析场景的小型完整项目。代码以单文件Python脚本承载数据读取、特征构造、模型训练与结果预测等关键流程,配套原始训练/测试CSV表、处理后的特征…

2026/10/11 22:50:35 阅读更多 →
PgQue 监控实战:5 个必须告警的队列健康指标 + 如何揪出卡住的消费者

PgQue 监控实战:5 个必须告警的队列健康指标 + 如何揪出卡住的消费者

【免费下载链接】PgQue PgQue – Zero-bloat Postgres queue built on top of on battle-proven Skypes PgQ. One SQL file to install, pg_cron to tick https://pgque.dev 项目地址: https://gitcode.com/gh_mirrors/pg/PgQue 点击查看 免费下载 PgQue 是一个零膨…

2026/10/11 22:49:35 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →