WSL2 安装 Ubuntu 后迁移到新盘并配置 VS Code 远程开发:TaoToken 统一 Key 接入实践
1. WSL2 装完 Ubuntu 后为什么一定要迁移到新盘WSL2 安装 Ubuntu 这件事本身不复杂微软商店点一下就能跑起来。真正让人头疼的是后面默认情况下Ubuntu 的虚拟磁盘文件ext4.vhdx会落在C:\Users\你的用户名\AppData\Local\Packages\...下面。这个文件会随着你装依赖、拉代码、跑构建不断膨胀几十 GB 是常态。系统盘一旦被吃满Windows 更新失败、休眠文件写不进去、各种奇怪的卡顿都会冒出来。所以这篇要解决的是一个完整链路在 Windows 上把 WSL2 和 Ubuntu 装好把发行版整体迁移到非系统盘比如 D 盘再用 VS Code 的 Remote-WSL 打通编辑和调试最后把模型请求的 endpoint 统一指向 TaoToken让本地开发环境里的 AI 辅助能力也能用同一套 Key 管理。适合谁适合在 Windows 上做后端、算法、数据工程又不想被系统盘空间和零散 API Key 折腾的开发者。迁移这件事的核心逻辑其实很朴素WSL2 的每个发行版本质上就是一个虚拟磁盘文件迁移 把这个文件从 C 盘搬到 D 盘然后让 WSL 知道新位置在哪。早期大家用 LxRunOffline 这个第三方工具来做现在 WSL 官方自带的wsl --export和wsl --import已经能覆盖绝大多数场景而且更稳。我会把两种方式都讲清楚你可以按自己的 WSL 版本选。先确认你的环境。打开 PowerShell建议用管理员身份后面有些操作需要权限执行wsl -l -v正常输出类似NAME STATE VERSION * Ubuntu-22.04 Running 2这里要盯两个点VERSION必须是 2NAME记住后面导入导出都用它。如果显示 1先转过来wsl --set-version Ubuntu-22.04 2如果wsl -l -v直接报错说没有已安装的发行版那说明你还没装 Ubuntu先去微软商店搜 Ubuntu 22.04 LTS 装上首次启动会让你设用户名和密码设完再回来。迁移前有个必须做的动作彻底关掉 WSL否则文件被占用导出会失败或者导出不完整。wsl --shutdown执行完再wsl -l -vSTATE 应该全是 Stopped。这一步别偷懒我见过太多人卡在这里报「文件正在被另一进程使用」。2. TaoToken 前置准备统一 Key 与 endpoint 的接入思路在动手迁移之前先把模型接入这条线理清楚因为后面 VS Code 里的配置会用到。本地开发环境里AI 辅助工具越来越多有的插件走 OpenAI 兼容接口有的走 Anthropic 接口有的自己一套。每个工具单独配 Key、单独记 endpoint时间一长就是一团乱麻。TaoToken 在这里扮演的角色是提供一个统一的入口把 Key 和 endpoint 收敛到一处管理。你需要先拿到两样东西一个 API Key和一个 Base URL。Key 在控制台的 API Keys 页面创建Base URL 统一是https://taotoken.net/api。注意这个地址后面不带斜杠也不带/v1具体路径由各工具自己拼。这一点很关键很多 401 和 404 就是因为把/v1重复拼了。创建 Key 的入口在这里https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite拿到 Key 之后先别急着往各种工具里塞。我的习惯是先在终端里用 curl 验证一次确认 Key 和 endpoint 是通的再去配编辑器。这样出问题的时候能快速判断是「Key 本身有问题」还是「某个工具的配置写错了」。验证命令长这样curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer 你的API_KEY \ -d { model: gpt-4o-mini, messages: [{role: user, content: 只回复两个字通了}], max_tokens: 20 }如果返回的 JSON 里有choices数组并且message.content是「通了」说明链路没问题。如果返回 401检查 Key 有没有复制全、有没有多余空格如果返回 404检查 URL 是不是多拼了/v1或者少了/v1。这个验证动作建议每换一个环境都做一次成本很低但能省掉大量排查时间。关于模型 IDTaoToken 支持多种模型具体可用列表在文档里能查到。你在配置工具时填的model字段要和文档里列出的 ID 完全一致大小写敏感。我一般会先在模型对话页面手动试一次确认某个模型 ID 可用再写进配置文件。模型对话入口https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite接入文档在这里配置格式、可用模型、常见问题都有https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite把这两步做完你手里就有了一个可用的 Key 和一个确认能通的 endpoint。接下来迁移 Ubuntu、配 VS Code都会围绕这套东西展开。3. 可复制配置导出导入迁移 Ubuntu 与 wsl.conf、settings.json 片段迁移分两条路我建议优先用官方命令LxRunOffline 作为备选。3.1 官方 export/import 方式推荐先关 WSLwsl --shutdown然后导出。假设你的发行版叫Ubuntu-22.04导出到 D 盘一个临时位置wsl --export Ubuntu-22.04 D:\wsl-backup\ubuntu2204.tar这个 tar 文件大小和你当前 Ubuntu 占用空间差不多导出过程可能几分钟取决于你装了多少东西。导出完成后注销原来的发行版wsl --unregister Ubuntu-22.04注意unregister会删掉原发行版所以导出必须成功之后再执行。执行完wsl -l -v里就没有这个发行版了。接着导入到新位置。先建好目标目录比如D:\WSL\Ubuntu-22.04mkdir D:\WSL\Ubuntu-22.04 wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl-backup\ubuntu2204.tar --version 2导入完成后启动wsl -d Ubuntu-22.04这里有个坑用--import导入的发行版默认登录用户是 root而不是你原来设的用户。想恢复成普通用户需要在 Ubuntu 里改默认用户。先查你的用户名然后编辑/etc/wsl.confsudo vi /etc/wsl.conf写入[user] default你的用户名 [boot] systemdtruesystemdtrue这一行看需求如果你要用 systemd 管理的服务比如 docker、某些数据库就打开不需要可以去掉。改完在 PowerShell 里wsl --shutdown再启动默认用户就生效了。3.2 LxRunOffline 方式备选如果你用的是比较老的 WSL 版本或者官方命令报错可以用 LxRunOffline。先确认 WSL 版本是 2wsl -l -v停掉 WSLwsl --shutdown查看已安装发行版.\LxRunOffline.exe list迁移.\LxRunOffline.exe move -n Ubuntu-22.04 -d D:\WSL\Ubuntu-22.04验证新位置.\LxRunOffline.exe get-dir -n Ubuntu-22.04如果报「拒绝访问」给目标目录授权icacls D:\WSL\Ubuntu-22.04 /grant Administrator:(OI)(CI)(F)然后重启 LxssManagernet stop LxssManager net start LxssManager3.3 VS Code settings.json 配置片段迁移完装 VS Code 的 WSL 扩展在扩展市场搜 WSL微软官方那个。装好后左下角会出现绿色远程连接图标点它选「Connect to WSL」就能连进 Ubuntu。为了让远程开发体验顺一点在 Ubuntu 里的 VS Code 用户设置~/.vscode-server/data/Machine/settings.json或者通过命令面板打开 Remote 设置加上这些{ remote.WSL.fileWatcher.polling: true, files.watcherExclude: { **/.git/objects/**: true, **/node_modules/**: true, **/dist/**: true, **/.venv/**: true }, terminal.integrated.defaultProfile.linux: bash, editor.formatOnSave: true, remote.extensionKind: { ms-python.python: [workspace] } }fileWatcher.polling打开是因为 WSL2 跨文件系统监听有时不灵轮询虽然费一点 CPU但能保证热重载不抽风。watcherExclude把大目录排除掉能明显降低内存占用。如果你在 VS Code 里用 Continue、Cline 这类插件接模型它们的配置里通常有 Base URL、API Key、Model 三个字段填法就是{ baseUrl: https://taotoken.net/api, apiKey: 你的API_KEY, model: gpt-4o-mini }Base URL 不要带/v1插件一般会自己拼。Model ID 用文档里确认过的。4. 验证请求从 WSL 内发起调用并确认成功结果配置写完必须验证。验证分两层先确认 WSL 网络能通再确认模型请求能返回。先在 Ubuntu 终端里测网络curl -I https://taotoken.net/api如果返回 HTTP 状态码比如 200、401、404 都算通说明 DNS 和网络没问题。如果卡住或者报Could not resolve host检查 WSL 的 DNS 配置。WSL2 默认会继承 Windows 的 DNS但有时会抽风。可以在/etc/wsl.conf里加[network] generateResolvConf true然后wsl --shutdown重启。网络通了之后在 WSL 里跑一次完整的模型请求curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer 你的API_KEY \ -d { model: gpt-4o-mini, messages: [{role: user, content: 用一句话说明 WSL2 是什么}], max_tokens: 100 }成功的话你会看到类似这样的返回{ id: chatcmpl-xxx, object: chat.completion, choices: [ { index: 0, message: { role: assistant, content: WSL2 是 Windows 上运行 Linux 内核的轻量级虚拟化环境。 }, finish_reason: stop } ], usage: { prompt_tokens: 18, completion_tokens: 22, total_tokens: 40 } }看到choices里有内容就说明从 WSL 到 TaoToken 的整条链路是通的。这一步过了再去 VS Code 插件里配基本不会出问题。如果你用的是 Claude Code 这类工具它的配置方式不太一样通常是通过环境变量或者配置文件指定 endpoint。Claude Code 的接入方式在文档里有专门说明配置时同样注意 Base URL 和 Key 的填法。Coding Plan 适合长期编码场景如果你打算把 AI 辅助常态化用在日常开发里可以了解一下https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite验证通过后建议把这条 curl 命令存成一个脚本比如~/check-api.sh以后换环境或者怀疑 Key 失效时跑一下就知道。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth迁移和接入过程中报错基本集中在几个地方。我把真实遇到过的整理出来对照着查。401 Unauthorized。最常见的原因是 Key 复制时带了空格或者换行。从网页复制 Key 时很容易把末尾的换行也带进去。解决方法是把 Key 放进环境变量用的时候引用变量避免手打出错export TAOTOKEN_KEY你的API_KEY curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_KEY \ ...如果确认 Key 没问题还是 401检查是不是把 Key 用在了错误的 endpoint 上或者 Key 被禁用/额度耗尽。local proxy failed。这个报错通常出现在 VS Code 插件里意思是插件尝试走本地代理但失败了。原因可能是插件配置里填了http://127.0.0.1:xxxx这样的代理地址但本地并没有代理在跑。解决方法是把插件配置里的代理项清空让它直连。如果你确实需要代理确保代理服务在 WSL 里能访问到注意 WSL2 访问 Windows 宿主的地址不是 127.0.0.1而是宿主的 WSL 网关 IP。Error reading choices / reading choices。这个报错说明代码在解析返回 JSON 时找不到choices字段。根因通常是返回的根本不是正常的 completion 响应而是一个错误对象。比如返回了{error: {message: ...}}代码却按成功响应去读choices就崩了。排查方法是先把原始返回打印出来看curl -s https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_KEY \ -d {model:gpt-4o-mini,messages:[{role:user,content:hi}]} | jq .用jq格式化后错误信息一目了然。常见触发原因是 model ID 写错、请求体格式不对、或者 max_tokens 超限。OAuth 相关报错。有些工具比如某些 CLI默认走 OAuth 登录流程而不是 API Key。如果你在配置里填了 API Key 却仍然被要求 OAuth检查工具是否有「使用 API Key」的选项或者是否需要设置特定的环境变量来跳过 OAuth。Claude Code 这类工具在接入第三方 endpoint 时通常需要显式指定 base URL 和 auth token具体字段名以文档为准。迁移后默认用户变 root。前面提过wsl --import后默认用户是 root。除了改/etc/wsl.conf还要确认你的用户目录还在。如果导入前用户是ubuntu导入后/home/ubuntu应该还在只是登录用户变了。改完 wsl.conf 记得wsl --shutdown再进。VS Code 连不上 WSL。先确认 WSL 扩展装了再确认wsl -l -v里发行版是 Running 状态。如果 VS Code 一直转圈试试在命令面板执行「WSL: Reopen in WSL」或者重启 VS Code。有时候是~/.vscode-server目录权限问题删掉重连会重新下载。文件监听不生效。在 WSL2 里改文件Windows 侧的热重载没反应或者反过来。这是跨文件系统监听的经典问题。前面 settings.json 里的fileWatcher.polling就是治这个的。如果还不行把项目放在 WSL 的文件系统里/home/你的用户名/...而不是/mnt/c/...性能会好很多。排查的核心思路就一条先确认网络通再确认 Key 对再确认请求格式对最后才怀疑工具配置。按这个顺序大部分问题五分钟内能定位。6. 把 Key 和 endpoint 收敛到一处长期开发更省心迁移 Ubuntu 到新盘解决的是空间和性能问题用 VS Code Remote-WSL解决的是编辑体验问题把模型 endpoint 统一到 TaoToken解决的是 Key 管理和多工具配置分散的问题。这三件事单独看都不复杂但串起来之后你的 Windows 开发环境会变得干净很多系统盘不再被虚拟磁盘吃掉代码在 Linux 环境里跑AI 辅助工具共用一套 Key。我自己的习惯是每配一个新工具先跑一遍那条 curl 验证命令确认 Key 和 endpoint 没问题再写进配置文件。这样出问题的时候能立刻分清是工具的问题还是接入的问题。另外/etc/wsl.conf和 VS Code 的 settings.json 建议纳入版本管理换机器或者重装的时候直接拉下来用省得重新踩一遍坑。如果你还没创建 Key从这里开始https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite配置过程中遇到格式问题文档里有各工具的完整示例https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite想先手动试试模型效果用模型对话页面最直接https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite长期在 WSL 里做编码和 Agent 开发的话Coding Plan 的额度模型更适合日常高频使用https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite最后留一个实用技巧把常用的 WSL 操作写成 PowerShell 函数比如wsl-restart一键 shutdown 再启动wsl-backup一键导出当前发行版。迁移和备份这件事做得越顺手你越愿意定期做环境也就越不容易出问题。

相关新闻

工具调用的重试风暴防范:指数退避与随机抖动(Jitter)算法实战

工具调用的重试风暴防范:指数退避与随机抖动(Jitter)算法实战

距离双 11 还有不到一个月,全链路压测的报警短信已经开始在半夜频繁轰炸。昨晚凌晨两点,模拟大促零点订单洪峰的第五轮压测中,我们核心的履约查询微服务突然雪崩,RT 直接飙到 30 秒,数据库连接池瞬间打满,随…

2026/10/12 21:55:01 阅读更多 →
智能容量巡检:GLM 5.3 结合 Prometheus 指标预测双 11 扩容水位

智能容量巡检:GLM 5.3 结合 Prometheus 指标预测双 11 扩容水位

每年国庆节过后的第一周,我工位旁边的小黑板上就会写上鲜红的“双 11 倒计时”。对于电商架构师来说,十月中旬最磨人、最容易挨批的事情绝不是写代码,而是“定扩容机器数量”。 定少了,大促零点洪峰一冲,集群直接被打崩…

2026/10/12 21:55:01 阅读更多 →
自己写龙虾:用 Flask + DeepSeek 复刻 OpenClaw 式 AI Agent 的 SkillHub 架构

自己写龙虾:用 Flask + DeepSeek 复刻 OpenClaw 式 AI Agent 的 SkillHub 架构

/* 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:55:01 阅读更多 →

最新新闻

2019天梯赛真题三刷复盘:L2稳定拿分是关键

2019天梯赛真题三刷复盘:L2稳定拿分是关键

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

2026/10/13 1:05:49 阅读更多 →
产品EMC设计与风险评估:从原理图到量产的全链路避坑指南

产品EMC设计与风险评估:从原理图到量产的全链路避坑指南

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

2026/10/13 1:05:49 阅读更多 →
gdal111预编译包实战:Windows下老版本GDAL环境配置与排坑

gdal111预编译包实战:Windows下老版本GDAL环境配置与排坑

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

2026/10/13 1:05:49 阅读更多 →
群辉NAS部署Dify教程:从安装包到避坑排查与备份迁移

群辉NAS部署Dify教程:从安装包到避坑排查与备份迁移

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

2026/10/13 1:05:48 阅读更多 →
GT911触摸屏I2C地址之谜:双地址由引脚状态决定,驱动调试避坑指南

GT911触摸屏I2C地址之谜:双地址由引脚状态决定,驱动调试避坑指南

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

2026/10/13 1:05:48 阅读更多 →
MATLAB船舶航向PID控制仿真:Nomoto模型与参数整定详解

MATLAB船舶航向PID控制仿真:Nomoto模型与参数整定详解

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

2026/10/13 1:04:48 阅读更多 →

日新闻

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

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

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

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/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →