
如果你最近在折腾 Claude Code多半会跟我一样遇到同一个尴尬在 Windows 终端里敲claude第一轮对话还没结束它就丢过来一串 bash 命令然后很诚实地告诉你当前环境不对。VSCode、WSL 和 Claude Code 这三个词拆开看都不陌生但真正把三者串成一套每天都用的开发流程中间有大量文档不会写清楚的细节。这篇文章不打算复读官方 README而是把我从零搭建到日常使用的完整过程——环境规划、安装、VSCode 接入、第三方模型替换、以及几个卡了我很久的报错——原原本本讲一遍给正在走同一条路的你当参考。1. 为什么非要把 Claude Code 放进 WSL而不是直接装在 Windows 上1.1 我在 Windows 直装时踩到的三个典型问题先说结论Claude Code 不是不能在 Windows 上跑而是跑起来之后你会持续难受。我第一次就是图省事在 PowerShell 里直接npm install -g anthropic-ai/claude-code装完也能启动但实际用起来问题一个接一个。第一个问题最直接Claude Code 生成的命令几乎全是 Linux 风格grep、find、rm -rf、sed这些在 PowerShell 里的行为和 bash 完全不同。我让它帮忙搜日志里某个关键字它写出来的命令在 Windows 上直接报错我还得手动翻译一遍。第二个问题是项目环境。我用 WSL 跑 Python 和 PyTorch代码却在 Windows 侧编辑两边文件系统互相访问慢不说依赖版本还经常不一致。第三个问题更隐性Node 版本、Python 版本、Git 换行符设置Windows 和 Linux 各有一套Claude Code 生成的代码里带#!/usr/bin/env bash之类的脚本在 Windows 上根本没意义。我后来想明白了Claude Code 本质是根据当前环境来理解和操作项目的。如果你让它在一个 Windows 环境里工作它眼中的项目就带着 Windows 风格如果你让它在一个 Linux 环境里工作它理解的文件路径、命令、权限模型就全部对味了。对于绝大多数后端和 AI 项目Linux 环境才是真实的归宿。1.2 WSL2 带来的不只是能跑 Linux 命令这么简单WSL2 本质上是一个轻量级虚拟机但它和传统虚拟机的体验差别非常大。最核心的一点VSCode 的 Remote 系列插件对 WSL 有原生支持打开 VSCode 就能直接以Linux 本地的姿态编辑 WSL 里的文件不需要装图形界面不需要配置 SSH连端口转发都是自动的。我实际体验下来WSL2 的收益主要体现在四个地方环境一致性Claude Code 生成的命令、脚本、路径全部按 Linux 语义执行不用再做Windows 翻译。文件性能代码放在 WSL 的 ext4 文件系统里比如~/projects读写速度接近原生 Linux如果放在/mnt/c下的 Windows 盘里跨文件系统 IO 会明显变慢建议不要这么干。依赖管理干净Python 虚拟环境、Node 模块、CUDA 驱动这些都可以在 WSL 内部独立安装不影响 Windows 侧环境。Docker 联动Docker Desktop 默认支持 WSL2 后端Linux 容器可以直接跑在 WSL 内核上Claude Code 在对话里帮你执行docker compose up之类命令时两边是通的。1.3 先确认你当前的 WSL 版本和发行版状态在动手之前先在 PowerShell 里看一眼自己的 WSL 状态wsl --status wsl -l -v如果输出显示的是 WSL2且已经装了 Ubuntu 或 Debian那直接跳到第三节即可。如果你从来没装过或者还在用 WSL1那下面这步就很有必要了。wsl -l -v会列出所有已安装的发行版和版本号。注意一个容易忽略的点WSL1 和 WSL2 的文件系统、网络模型、系统调用兼容性完全不同。Claude Code 很多底层操作依赖 Linux 系统调用WSL1 的翻译层会在这类场景下出各种莫名其妙的兼容问题。所以我的建议很明确要么用 WSL2要么就别用 WSL。2. VSCode 与 WSL 环境搭建安装顺序、发行版选择和磁盘迁移2.1 安装顺序有讲究先装哪个都行但建议先 WSLWSL 和 VSCode 的安装顺序其实无所谓但如果你是从零开始我建议先装 WSL再装 VSCode。原因是 WSL 装完重启之后VSCode 会自动识别到 WSL 的存在装 Remote 插件时也更顺。在管理员 PowerShell 里执行wsl --install -d Debian这条命令会自动启用 Windows 需要的几个功能虚拟机平台、Windows Subsystem for Linux然后下载并安装 Debian。如果是第一次装系统会提示你设置 Linux 用户名和密码。-d Debian是我个人的推荐。很多人默认装 Ubuntu资料多、教程多这点确实好但 Debian 更精简系统占用更低而且社区里关于 Debian 13 的讨论最近明显多起来新装机的用户不少。至于选哪个当主力我的标准很简单如果你是为了装 PyTorch、CUDA、ROS 这类生态依赖Ubuntu 的兼容性资料更多如果你只是想要一个干净的编码环境跑 Claude Code 和 DockerDebian 完全够用。安装完成后确认一下wsl -l -v里 Debian 的版本是 2如果不是用wsl --set-version Debian 2切到 WSL2。这一步偶尔会因为系统组件问题失败常见的处理是先wsl --update升级内核或者检查 BIOS 里虚拟化是否开启。2.2 把 WSL 从 C 盘迁到 D 盘export/import 全流程这是我一直想吐槽的点WSL 默认会把整个 Linux 文件系统放在 C 盘而且是以虚拟磁盘文件ext4.vhdx的形式存在。随着你往里面装 Node 模块、Python 包、克隆仓库这个文件可以膨胀到几十 GB。如果你的 C 盘本来就不富裕用不了几个月就会开始飘红。迁移的操作并不复杂核心就三步导出、注销、导入。# 1. 导出当前 WSL 发行版为 tar 文件 wsl --export Debian D:\wsl-backup\debian.tar # 2. 注销 Debian这一步会删除 C 盘上的原有实例数据 wsl --unregister Debian # 3. 导入到 D 盘目录指定 WSL2 wsl --import Debian D:\wsl\debian D:\wsl-backup\debian.tar --version 2有个细节必须强调wsl --unregister会删除 C 盘上该发行版的所有数据所以务必先确认第 1 步的导出文件已经完整生成。导入之后默认的登录用户会变成 root需要手动设置默认用户。对于 Debian 来说在 WSL 里执行echo -e [user]\ndefault你的用户名 | sudo tee /etc/wsl.conf改完这个文件在 PowerShell 里执行wsl --terminate Debian再重新进入默认用户就生效了。迁移完还有一个可选操作在 VSCode 的 WSL 扩展设置或 Windows 的%USERPROFILE%\.wslconfig文件里写清楚分配多少内存和 CPU。建议给 WSL 分配一个合理的上限避免它跟 Windows 抢资源。.wslconfig大概长这样[wsl2] memory8GB processors4 swap2GB2.3 VSCode 连接 WSL三种方式与推荐组合VSCode 连接 WSL 主要靠官方扩展名字就叫 WSL你搜的时候可能会看到旧的 Remote - WSL 这个名字其实是同一个东西改版了。装好扩展之后VSCode 左下角会出现一个绿色的 按钮点开选择 Connect to WSL 或者 Open Folder in WSL就能直接进入 Linux 环境。实际使用中我一般这样组合方式一直接连接。启动 VSCode点左下角绿色图标选择当前 WSL 发行版VSCode 窗口会重新加载为远程模式此时左下角显示WSL: Debian。方式二从 WSL 终端反向启动。在 WSL 终端里执行code .VSCode 会自动检测到这是 WSL 侧的调用并以远程模式打开当前目录。这个方式最常用我基本每天都是这么干的。方式三打开远程窗口后手动选择目录。如果不小心关掉了项目窗口直接用CtrlShiftP调出命令面板输入 WSL: Open Folder in WSL重新选择目录。连接成功后注意看 VSCode 的终端面板如果终端标题显示的是你 WSL 的用户名和主机名比如user机器名说明正处于 WSL 的 bash 环境如果还是PowerShell或者cmd那说明连接没生效检查一下扩展是否在 WSL 侧也安装了——VSCode 首次连接到 WSL 时会在 WSL 里安装一个 server 组件这一步偶尔会因为网络问题失败多试几次或检查代理设置即可。3. Claude Code 安装与 VSCode 内联使用全流程3.1 Node.js 版本坑不要用 apt 直接装Claude Code 本体是一个 npm 包官方要求 Node.js 18 以上。这个要求看起来人畜无害但如果你在 Debian 或 Ubuntu 里直接sudo apt install nodejs装出来的版本很可能是 16 甚至更低。等到claude命令启动时报语法错误时再追根溯源就成了很浪费时间的环节。我的做法是先装 nvmNode Version Manager再用 nvm 安装 LTS 版本curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash装完重新打开终端或者执行source ~/.bashrc让 nvm 生效。然后nvm install --lts nvm alias default lts/* node -v看到输出的 Node 版本在 18 以上就可以继续了。用 nvm 的好处是以后如果要跑某个项目需要特定 Node 版本随时可以nvm install 20然后nvm use 20不影响全局环境。而用 apt 装的系统级 Node 会把整个系统环境绑死升级又麻烦这是我踩过坑后的明确选择。3.2 安装 Claude Code 与首次鉴权Node 环境就绪后安装过程其实就是一条命令npm install -g anthropic-ai/claude-code装完先验证一下claude --version能输出版本号说明安装成功。首次运行claude时程序会输出一个 URL需要在浏览器里打开并授权登录本质是拿账号换一个本地 API Key。鉴权之后Claude Code 会在你的用户目录下生成~/.claude目录里面存配置、会话历史和密钥。这里有一个容易卡住的点如果你打算直接用第三方模型的 API下一节会详细讲首次鉴权这一步可以跳过因为 Claude Code 根本不会向官方服务器发请求。但我的建议是第一次不管用什么模型先把官方方式的完整链路跑通一次。因为官方鉴权成功意味着 npm 包、Node 版本、网络、配置文件路径全都没问题之后切换第三方模型出问题时你知道是该查环境变量还是查服务商而不是无从下手。3.3 在 VSCode 里把 Claude Code 用顺手Claude Code 是一个命令行交互工具启动后它会进入一个 REPL 风格的对话界面。在 VSCode 的 WSL 终端里运行claude它会在终端区域里交互。我的习惯是开两个终端面板一个跑claude对话另一个留着跑普通 shell 命令这样 Claude Code 执行操作时我可以随时在旁边看输出。日常最常用的几个启动参数我列一下# 开启新的对话 claude # 继续上一次会话 claude --continue # 直接问一个问题然后退出适合写进脚本 claude -p 解释一下当前仓库的架构 # 指定工作目录启动 claude /path/to/project--continue这个参数对日常使用特别重要因为 Claude Code 本身有会话历史机制重启终端之后还能接上昨天的上下文。我经常上午让它写代码下午继续让它 review 同一批文件上下文衔接得很自然。在 VSCode 里还有一个非常顺手的小配置按下Ctrl 打开终端后默认如果进的是 PowerShell 而不是 bash可以在命令面板里执行 Terminal: Select Default Profile选 WSL 对应的 bash。这样每次打开终端直接就是 WSL 环境省一步wsl 命令。3.4 Claude Code 执行终端命令的安全边界Claude Code 的一大特性是它可以在对话中直接执行 bash 命令——你可以让它跑一下测试看看这个文件的前 50 行安装项目依赖。这是非常强大的能力但前提是你对它的操作有足够的控制意识。我的安全实践是第一次让它执行命令时盯着它的输出确认它真的在跑预期指令而不是干别的。涉及rm、mv、git push、sudo这类有副作用的命令时留意程序是否要求确认。如果让它处理~/.claude配置或密钥文件建议先在旁边备份一份。Claude Code 在终端里执行命令时会明确列出命令内容而不是闷头执行。看到命令不对可以选 n 拒绝。这就像是给了你一个每次都能审查代码的实习生只要你不当甩手掌柜整体安全性是可控的。4. 接入 DeepSeek / Qwen / GLM让 Claude Code 跑第三方模型4.1 为什么要换模型成本、延迟和已有额度的考虑Claude Code 默认走官方 Anthropic API如果只是偶尔玩玩问题不大但真要日常高强度使用订阅额度或充值成本会变成很现实的问题。于是很多团队会把目光转向国内可用、按量计费更灵活的模型服务比如 DeepSeek、通义千问Qwen、智谱GLM。这里多说一句Claude Code 调用模型的底层协议是基于 Anthropic 的 API 格式。第三方服务商只要提供 Anthropic 兼容端点Claude Code 就能通过环境变量切过去。好消息是现在 DeepSeek、Qwen、GLM 都官方提供了这类兼容接口不需要任何中间转换层直接改配置就能用。4.2 环境变量直连方案理解 ANTHROPIC_BASE_URL 这三个变量切换模型的核心环境变量有三兄弟ANTHROPIC_BASE_URLAPI 服务地址指向第三方兼容端点。ANTHROPIC_AUTH_TOKEN你的 API Key。ANTHROPIC_MODEL模型名称比如deepseek-chat、qwen-plus、glm-4-plus。以 DeepSeek 为例临时切换可以这样export ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic export ANTHROPIC_AUTH_TOKENsk-your-key export ANTHROPIC_MODELdeepseek-chat claude如果这个方案跑通一次你理解了Claude Code 本质上是一个 AGENT 框架模型可以换这件事后面折腾的底气就足很多。但每次手动 export 太繁琐而且把 API Key 写进 shell 历史也有泄露风险。我更推荐把它写进 Claude Code 的用户配置文件~/.claude/settings.json{ env: { ANTHROPIC_BASE_URL: https://api.deepseek.com/anthropic, ANTHROPIC_AUTH_TOKEN: sk-your-key, ANTHROPIC_MODEL: deepseek-chat } }这样只要配置文件在~/.claude下Claude Code 启动时就会自动读取并注入环境变量不用每次手动 export。不同模型之间的切换本质就是改这几个字段——这就是下一节 cc switch 这类工具做的事。4.3 cc switch多模型配置一键切换我第一次在 DeepSeek、Qwen、GLM 之间来回切换时就是用文本编辑器改 settings.json。虽然也能用但每次改完还要重启claude而且容易记错模型名。后来看到社区里有人分享 cc switch 这个工具本质是一个管理多套 Claude Code 环境变量配置的小程序你把各家 API 的 Base URL、Key、Model 存成一套配置需要哪个就切哪个。我用它的实际体验配置好 DeepSeek、Qwen、GLM 三套 profile 后想切到 Qwen 只需要运行它选一下然后重启 Claude Code模型的 base URL 和 token 就自动改好了。比手动改 JSON 省事很多也避免了反复写错 Key 的尴尬。需要提醒的是cc switch 这类社区工具更新节奏快使用前看清楚它要求的 Node 版本。另外它本质只是改配置不负责代理、不负责网络如果遇到连接问题还是要从网络层排查。4.4 换模型后的能力差异与注意事项我实测下来第三方模型接入 Claude Code 是能跑的但和官方模型相比有几个明显的差异先说清楚关注点官方模型DeepSeek / Qwen / GLM 等第三方Tool Calling 完整度最完整基本可用但复杂工具链偶发漏调用代码编辑准确度高主流场景可用深水区不稳定上下文理解强长对话后个位数百分比质量下降速度官方稳定取决于服务商负载DeepSeek 高峰偶尔慢成本较高通常便宜一个量级另外要注意一个使用习惯切到第三方模型后Claude Code 官方的一些功能比如某些内置分析模式、MCP 工具链的兼容程度可能和官方模型表现不一样。如果你的工作流重度依赖 MCP 这类工具建议先在目标模型上跑一个代表性用例测试一下再决定是否长期使用。5. 高频踩坑记录升级、Docker、Debian 13 与路径问题5.1 Docker Desktop 更新后 WSL 无法启动这个坑我遇到过一次表现是前一天 Docker Desktop 还正常第二天更新完系统补丁后Docker Desktop 一打开就报 Docker Engine stoppedWSL 终端里敲任何wsl命令都提示服务无法启动。排查路径是这样的先看 WSL 本身能不能重启在 PowerShell 里执行wsl --shutdown等几秒再执行wsl -l -v。如果还不行检查 WSL 核心组件wsl --update把内核和组件升到最新。如果更新提示无法完成再去检查 Windows 功能面板里的 适用于 Linux 的 Windows 子系统 和 虚拟机平台 是否还处于勾选状态——系统更新有时不会动这个但保险起见看一眼。我那次坏掉后的修复路径是wsl --shutdown之后更新 WSL 组件再启动 Docker Desktop 就恢复了。这个问题的根源通常是 Windows 更新了系统组件但 WSL 内核还在旧版本两边不匹配。如果wsl --update也解决不了最后的手段才是考虑重新安装 WSL 组件。5.2 Debian 13 安装后的第一件事源和基础依赖如果你用的是 Debian 13trixie装好系统后的第一件事建议先处理软件源。默认源在国外服务器上在国内环境下跑apt update会非常慢装个 Node 依赖能把人急死。Debian 13 的源配置文件和以前有些区别它从单文件/etc/apt/sources.list迁移到了/etc/apt/sources.list.d/debian.sources用的是 deb822 格式。你需要把里面的deb.debian.org替换成国内镜像源地址比如阿里云镜像或清华镜像。替换之后执行sudo apt update sudo apt upgrade -y升级完成再装基础包sudo apt install -y build-essential git curl wget unzip这里必须补一句不要在 WSL 里装桌面环境和额外服务它是一个开发环境不是正式服务器。保持精简Claude Code 运行时也不容易被无关进程干扰。5.3 Claude Code 升级时的权限陷阱Claude Code 作为 npm 全局包升级方式很简单npm update -g anthropic-ai/claude-code但我遇到的一个情况是某次我在 VSCode 的终端里用sudo执行了 npm 全局安装导致~/.npm-global或系统 npm 全局目录里的文件归属变成了 root。之后再用普通用户执行升级权限不够升级失败或者更隐蔽的问题是旧版本还在新版本下载了但写不进目录于是每次启动都用致命老的版本。解决方法是把 npm 的全局目录设置到用户目录下完全绕开系统目录的权限问题npm config set prefix ~/.npm-global然后在~/.bashrc里加上export PATH$HOME/.npm-global/bin:$PATH这样 npm 全局包全部安装到自己的用户目录npm update -g永远不需要 sudo。这是一个很小但能避免无数次权限报错的操作。5.4 磁盘空间和路径相关的常见坑最后集中说说路径方面的经验代码别放在/mnt/c下。WSL2 访问 Windows 盘的文件是通过 9P 协议性能打折严重而且 Claude Code 在处理文件时经常要遍历目录放 Windows 盘会明显变慢。正确姿势是放在 WSL 的~/projects下。如果项目确实在 Windows 盘里比如团队仓库在D:\code可以接受慢一些但你要知道 Claude Code 修改文件、执行git log时都会感受到延迟。谨慎使用中文目录名。WSL 本身能处理中文路径但很多命令行工具、脚本在中文路径下会出编码问题Claude Code 在处理文件路径时也可能产生歧义。项目目录名尽量用英文。磁盘空间的问题前面提过一嘴这里再补充一个技巧定期清理不需要的 WSL 快照和 Docker 镜像。对于 WSL 的 vhdx 文件膨胀可以在 WSL 里先清掉不需要的包缓存然后在 PowerShell 里执行wsl --shutdown和diskpart压缩虚拟磁盘能回收不少空间。网上关于 compact vhdx 的教程很多按步骤操作即可。我现在的日常路径基本固定了VSCode 连进 WSL在~/projects下面开项目终端里claude常驻写代码遇到问题直接让它解释、补测试、查逻辑。这套组合最大的价值在于AI 编码助手处在一个和真实生产环境一致的位置上它看到的文件、跑的脚本、执行的命令都是 Linux 语义下的不会像 Windows 直装那样到处需要翻译。最后分享一个建议第一次配置时别急着换第三方模型先用官方方式跑通一个完整对话再慢慢折腾模型路由。每换一层都只变更一个变量出问题的时候就非常容易定位。这套环境配好之后你会明显感觉 Claude Code 从一个偶尔用用的玩具变成了真正能扛活的工作搭档。