claude code简易教程

前言

本文关键词:WSL 环境、第三方 API
贴一下 Claude Code 官方文档:https://docs.claude.com/zh-CN/docs/claude-code/overview

本文主要讨论如何在 Windows 系统下,通过 WSL 安装和配置 Claude Code 工具。

WSL,全称 Windows Subsystem for Linux​,可以理解成在 Windows 下安装一个 Linux。它允许开发者在 Windows 上直接运行 Linux 环境,而无需虚拟机或双启动。

而最重要的,在 WSL 下,可以直接访问 Windows 下的所有文件,它会把 Windows 下的各个盘符挂载在 /mnt​ 目录下,比如 C 盘 就是 /mnt/c

安装步骤

1. 进入 WSL 环境

首先,你需要确保 Windows 系统已经安装了 WSL。如果还没有,可以参考 Microsoft​ 官方文档进行安装。安装完成后,在 PowerShell​ 或 CMD​ 中输入 wsl​ 即可进入 Linux 环境。安装教程直接问 AI 就好了,就几步命令的事

2. 安装 Claude Code

bash 安装(推荐)

在 WSL 环境中,执行命令安装:

curl -fsSL https://claude.ai/install.sh | bash

注意:部分环境安装后,看安装返回的说明,如果有类似于“安装成功但没有添加进 Path,请执行 xxxxx...”的说明,那就跟着它的命令执行一下,其实就是把 claude​ 命令添加进 path,添加后在任意地方就可以使用 claude​ 命令了

通过 npm 安装

在 WSL 环境中,使用 npm​ 进行安装:

npm install -g @anthropic-ai/claude-code

如果在安装过程中遇到问题,不要使用 sudo​(官方也不推荐,可能导致后续的权限问题),可以按照以下方法解决:

首先创建 npm​ 全局安装目录,并配置 npm​ 将全局包安装到该目录:

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'

然后,将这个目录添加到系统的 PATH​ 环境变量中,这样系统就能找到全局安装的命令了。执行以下命令,将配置写入 .bashrc​ 文件并立即生效:

echo -e "\n export PATH=~/.npm-global/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

完成上述配置后,再次尝试安装 Claude Code。

最简配置

Claude Code 文档很多内容,以下是保证能用的基础配置,再后面会有进阶设置。

1. 第三方模型配置

配置第三方服务 API(比如 GLM​、AnyRouter​ 等),就需要配置 key​ 和 baseUrl​。这里以 AnyRouter​ 为例。

在 WSL 环境中,进入 ~/.claude​ 目录。如果该目录下没有 settings.json​ 文件,就新建一个,然后添加以下内容:

{
    "env":{
        "ANTHROPIC_AUTH_TOKEN": "sk-xxxxx",
        "ANTHROPIC_BASE_URL": "https://anyrouter.top"
    }
}

另外,如果用公益站的建议设置减少一些上报请求,毕竟公益站一般限制并发比较严(参数说明可见官方文档 Claude Code 设置 #环境变量):

{
    "env":{
        "ANTHROPIC_AUTH_TOKEN": "sk-xxxxx",
        "ANTHROPIC_BASE_URL": "https://anyrouter.top",
		"DISABLE_BUG_COMMAND": "1",
		"DISABLE_ERROR_REPORTING": "1",
		"DISABLE_TELEMETRY": "1",
    }
}

2. 全局提示词

~/.claude​ 目录下,检查是否存在 CLAUDE.md​ 文件。如果没有,就新建一个,并添加你希望的全局提示词,例如:

## Response Language
**除非有特殊说明,请用中文回答。**

你可以根据自己喜好随意修改这个全局提示词。

开始使用

最简配置完成后,就可以开始使用 Claude Code 了。

首先,导航到你的项目目录:

cd your-awesome-project

然后,启动 Claude Code:

claude

当然,Claude Code 还有更多的配置项,后文会列几个较为常用的进阶配置

进阶配置

1. 修改模型

如果你比较富有,或者有其他特殊需求,可以通过修改 settings.json​ 来使用不同的模型,比如 Opus​ 模型。

~/.claude/settings.json​ 文件中,添加 model​ 字段:

{
    "model": "opus",
    "env":{
        // ...省略其他配置...
    }
}

这里 opus​ 是模型的别名,你可以填写完整的模型名称。具体可用的模型名称和配置,请参考 Claude Code 官方文档中关于模型配置的部分:https://docs.claude.com/zh-CN/docs/claude-code/model-config

2. 提示词管理

Claude Code 的提示词分为全局提示词和项目提示词。

全局提示词:上面已经提到过,在 ~/.claude/CLAUDE.md​ 中配置。

项目提示词:如果你希望某个项目有专属的提示词,可以在该项目目录下新增 CLAUDE.md​ 文件,或者在该项目目录下创建 .claude​ 文件夹,并在其中新增 CLAUDE.md​ 文件。

关于提示词的更多详细信息和最佳实践,可以参考 Claude Code 官方文档中关于记忆(Memory​)的部分:https://docs.claude.com/zh-CN/docs/claude-code/memory

3. (重要)IDE 联动 claude code

说起来,用过 cursor​ 的人刚入手 Claude Code 会发现命令行版始终是不太方便,其中最核心的就是:cursor 中,当前编辑器所打开中的某个文件,会实时的在 cursor AI​ (暂且叫这个名)中实时关联,我可以直接对这个文件提问,同样的,如果我选中某段代码,它也能实时感知到。相比之下, cc (打 Claude Code 打累了,就叫这个吧)如果你要对某个文件提问,你就得把文件具体路径告诉它,如果你偷懒只打了文件名,那么好,它会在整个项目中调命令去找到这个文件,耗时间也耗 token,针对代码段提问你也得把具体行数告诉它。

==但其实,这个问题是可以解决的==

cc 内置功能是可以通过 /ide​ 命令来选择关联的 ide 的,vscode 系列包括 cursor、Jetbrain 等都可以。但是吧,如果你通过这个命令,发现检测不到 ide,那就看下面的解决方法

  1. 官方解决方案:https://docs.claude.com/zh-CN/docs/claude-code/troubleshooting#wsl2%E4%B8%8A%E6%9C%AA%E6%A3%80%E6%B5%8B%E5%88%B0jetbrains-ide
  2. WSL 环境处理
    首先呢,WSL 默认是 NAT 网络,是什么不重要,重要的是,这可能会导致 WSL 环境下安装的 cc 检查不到 windows 系统下的 ide。官方说 “可能”,反正在我这里就是 100% 不得行。然后官方这里提了两种解决方案:
    第一种:配置 Windows 防火墙:windows 下执行 wsl hostname -I​ 可以看到 wsl 系统的 IP,然后以管理员身份打开 PowerShell 并创建防火墙规则:New-NetFirewallRule -DisplayName "Allow WSL2 Internal Traffic" -Direction Inbound -Protocol TCP -Action Allow -RemoteAddress 172.21.0.0/16 -LocalAddress 172.21.0.0/16​ (根据步骤 1 中的 WSL2 子网调整 IP 范围)

其实第一种,我执行了并没什么用,还是不得行,你们可以试试,我是用第二种解决的,但官方推荐这种

第二种:切换到镜像网络
在您的 Windows 用户目录中的 .wslconfig​ 中添加(没这个文件就自己加一个):

[wsl2]
networkingMode=mirrored

然后从 PowerShell 使用 wsl --shutdown 重启 WSL。(自测发现最好也要重启下 ide 和其他 wsl 窗口)

  1. 在 cc 中,通过 /ide​ 命令来选择关联的 ide。
  2. 如果有必要,你可以设置自动连接 ide:输入 /config​,将 Auto-connect to IDE​ 改成 true。完事

4. 状态栏自定义

使用 cursor 的 ai 时,输入框旁边是可以显示你当前用的什么模型,也能显示当前上下文的百分百。但你刚用 cc 会发现,这玩意啥都没有

==好了,其实也是可以有的==

cc 提供了状态栏的自定义,懒得说了,有兴趣可以直接看文档: https://docs.claude.com/zh-CN/docs/claude-code/statusline

我这里直接说一个简单版的,有两种选择吧:
第一种选择(稍微复杂一点,自定义程度高):

来自:https://github.com/sirmalloc/ccstatusline

通过bunx安装(如果没安装bunx就问AI):bunx ccstatusline@latest

然后在 `.claude\settings.json` 中配置:
{
    ...
    "statusLine": "bunx ccstatusline@latest"
    ...
}

然后 wsl 中执行 bunx ccstatusline@latest,可以自定义配置你要显示的状态栏,配置完按指引保存,下次打开 cc 就能看到效果了

第二种选择(极其简单,自定义程度低,够用):

来自:https://github.com/ryoppippi/ccusage

在 `.claude\settings.json` 中配置:
{
    ...
    "statusLine": "npx -y ccusage@latest statusline"
    ...
}

两种都只介绍了最简单的用法,详细可以去对应的 github 仓库看

5. MCP

看官方文档就行:

MCP 介绍:https://code.claude.com/docs/zh-CN/mcp#%E4%BD%BF%E7%94%A8-mcp-%E5%8F%AF%E4%BB%A5%E5%81%9A%E4%BB%80%E4%B9%88

推荐的 MCP:

"mcpServers": {
    "context7": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@upstash/context7-mcp"
      ]
    },
    "exa": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.exa.ai/mcp"
      ],
      "env": {
        "EXA_API_KEY": "**这里要额外注册一下apikey**"
      }
    },
    "sequential-thinking": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sequential-thinking"
      ]
    },
    "serena": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/oraios/serena",
        "serena",
        "start-mcp-server",
        "--context",
        "ide-assistant",
        "--enable-web-dashboard",
        "False",
        "--project",
        "\"$(pwd)\""
      ]
    },
    "deepwiki": {
      "type": "http",
      "url": "https://mcp.deepwiki.com/mcp"
    }
  }

强烈推荐 Serena,github 链接:https://github.com/oraios/serena ,作用是读代码,比较省 token,在大项目中比较友好。

6. 斜杆命令

这个简单,就是有时候你经常会有重复的命令,比如你经常让 cc “git diff 并检查下修改的代码有没有问题”,你可以创建一个 /checkDiff​ 的斜杆命令来替代。

创建方法也简单,在 .claude/commands/​ 下新增 checkDiff.md​,文件里输入“git diff 并检查下修改的代码有没有问题”,完事

7. 子代理

子代理 - 前言

于我个人而已,一般小场景其实用不上子代理,子代理的优势在于 “独立的上下文” ,有点像面向对象编程中的“封装”概念了,一个对话的上下文是有限的(比如 Claude Sonnet 4.5 是 200K 上下文),但如果把某些相对独立的对话“封装”起来,那就能省不少上下文空间了,在介绍使用方法前先讲一个子代理的个人使用场景。

前阵子需要根据源码统计二十个微服务的一些信息,比如说每个微服务有哪些类,每个类使用了什么缓存、缓存 key 结构如何、有没有用锁、锁的粒度如何..等等,这很明显需要理解代码后才能得到,当我尝试直接对话让 cc 帮我时,它确实一开始是用了 serena(一款 MCP,用于阅读代码的)读代码,然后给出结果,但当他发现还有 19 个微服务等着它读时,它就告诉我微服务太多,怕耗费太多 token,所以写了个 python 脚本用正则匹配的方式来给我结果...这明显是不准确的,我阻止了它,让他老老实实读代码,别搞小聪明,它确实也老老实实读多了两个微服务,但后面又开始写脚本处理了。我推测是读代码本身会耗费挺大一部分 token,然后我对它的提示(用 serena​**读代码)就渐渐埋没在众多上下文中了,不过也不只是这个原因,就算 cc 老老实实读代码,我估摸读多几个微服务代码,就算 1m 上下文也不够用了。

于是想到了**子代理 ,既然一次性读那么多微服务行不通,那搞个子代理,让他专心读某一个微服务代码去分析不就好了,然后在 cc 主流程中,给出所有微服务,让 cc 对每个微服务都调用一次子代理。于是试了一下,结果果然是可行的,甚至 cc 为了效率,还并发用 5 个微服务调用子代理来执行,效率 max。

子代理 - 使用
  1. 输入下面命令,在 cc 中进入子代理管理界面
/agents
  1. 创建子代理
  2. 输入你对子代理的要求
  3. 不重要的设置:设置子代理颜色、子代理专用模型...
  4. 最终 cc 会根据你的要求,生成一个子代理 md 文件,位于 .claude/agents/​ 目录下
  5. 使用:你在对话时,cc 判断如果能用上该子代理,它会在征求你同意后自动调用;你也可以直接告诉它子代理名称让它直接调用