乍一看,终端显得有点冷冰冰的:黑乎乎的窗口,闪烁的光标,平时熟悉的按钮一个也没有。其实它没那么神秘。终端就是直接告诉电脑该做什么的一种方式:一条命令列出文件,另一条切换到需要的文件夹,第三条启动程序。
刚开始用智能体时遇到的卡壳,几乎都不是因为请求写得不好,而是因为终端待在了错误的文件夹里。所以我们先把文件夹和路径弄清楚,之后再讲 claude 命令。最后,我们会把这些知识用到 codegym-project 上,在这个项目里,每个任务都是一个独立的项目。
终端:直接操控项目的方式
终端是一个窗口,您在里面通过文本命令操控电脑。不用在菜单里找按钮,而是直接说出要做的操作:列出文件、打开文件夹、启动程序。
用鼠标确实更快,但也只快到同一个操作要重复第十次之前。终端能换来的是这些:
- 一条命令只做一件具体的事,结果就显示在同一个窗口里,不用猜;
- 一连串操作很容易重复:检查文件夹、查看文件、切换过去再启动;
- 能看到界面藏起来的状态,首先就是当前所在的文件夹。
两者并不需要二选一。在 IDEA 里,用眼睛找文件、点一下打开很方便;在终端里,则适合执行一条精确的命令并马上看到结果。实际工作中,这两种方式一直是并用的。
当您输入 claude 时,智能体会从终端的当前目录开始工作。所以最好先弄清楚终端在哪里,然后再启动智能体。

日常工作用的五条命令
五个操作。刚开始的时候,这些真的就够用了。在 Windows 上我们用 PowerShell,在 macOS 和 Linux 上用系统自带的终端。这几条简短的命令在三个系统里写法都一样。
| 命令 | 全称 | 作用 |
|---|---|---|
pwd | print working directory - "显示工作目录" | 显示终端当前所在文件夹的完整路径。 |
ls | list - "列表" | 列出当前目录里的文件和文件夹。 |
cd demo-project | change directory - "切换目录" | 进入当前位置下的 demo-project 文件夹。 |
cd .. | .. 表示上一级目录 | 让终端回到上一级文件夹。 |
claude | 要启动的程序名 | 从当前目录启动 Claude Code。 |
在 PowerShell 里,这些简短命令只是方便使用的别名:pwd 调用的是 Get-Location,ls 调用的是 Get-ChildItem,cd 调用的是 Set-Location。长名字不用怕,现在也不用去记。不过从这些名字上,很容易看出每条命令是干什么的。
下面在 macOS 或 Linux 上简单走一遍。终端一开始在 projects 文件夹里,然后进入 demo-project:

注意看路径的最后一段:projects 变成了 demo-project。没有任何魔法。cd 命令既没有打开新文件,也没有复制任何东西,它只是把终端的工作位置移到了另一个文件夹。
能节省时间的按键
这里有几个小习惯,很快就能帮您省下时间。终端会保存输入历史,还能帮您补全较长的名称:
↑- 显示上一条命令。多按几次,可以在历史记录里继续往前翻;↓- 回到历史记录里较新的命令;Tab- 补全命令、文件或文件夹的名称。例如,输入cd dem后按Tab,就会得到cd demo-project;←和→- 在当前行内移动光标,改一个字母时不用把整条命令重新输入一遍;Ctrl+C- 通常用来停止正在执行的命令,比如启动错了程序,或者进程一直不结束;Ctrl+L- 清空终端的可见区域,但不会删除文件,也不会清除命令历史。
最常用的是上箭头和 Tab。前者能调出已经输入过的命令,后者能减少长路径里的输入错误。
文件夹、目录和路径
把一个路径复制进命令,换到另一个文件夹,结果同一条命令就不管用了。问题不在拼写:路径分两种,其中一种取决于终端此刻所在的位置。下面两种都讲一讲。
先说叫法,其实比看上去简单。文件夹和目录指的是同一个东西。在图形界面里一般说"文件夹",讲到终端时则多说"目录"。
路径就是目录在磁盘上的地址。Windows、macOS 和 Linux 的分隔符各不相同,但逻辑是一样的:路径的每一段都往里深入一层。先是磁盘或根目录,然后是用户,再是存放项目的公共文件夹,最后才是具体的项目。
完整路径和绝对路径是一回事,只是有两个叫法。这种路径从文件系统的最顶层开始:在 Windows 上从盘符开始,在 macOS 和 Linux 上从 / 符号开始。无论终端当前开在哪个目录,它指向的都是同一个位置。
相对路径正好相反:它描述的是从当前目录出发的路线。它更短,因为地址开头那部分不用重复写。但只要换到别的文件夹,这个路径的含义就变了。
假设项目里有这样一个文件:
demo-project/
└── src/
└── index.html终端开在 demo-project 的根目录。要找到同一个 index.html,有两种写法:
| 系统 | 完整路径(即绝对路径) | 从 demo-project 出发的相对路径 |
|---|---|---|
| Windows | C:\Users\student\projects\demo-project\src\index.html | .\src\index.html |
| macOS | /Users/student/projects/demo-project/src/index.html | ./src/index.html |
| Linux | /home/student/projects/demo-project/src/index.html | ./src/index.html |
点号 . 表示"当前目录"。所以 .\src\index.html 和 ./src/index.html 的意思是"从当前文件夹进入 src,找到 index.html"。点号常常省略不写:src\index.html 和 src/index.html 表示的是同一个意思。
如果从 demo-project 往上退到公共文件夹 projects,原来的相对路径就不管用了。从新的位置出发,在 Windows 上要写 .\demo-project\src\index.html,在 macOS 和 Linux 上要写 ./demo-project/src/index.html。而完整路径则保持不变。
带空格的路径要用双引号括起来,否则终端会以为空格后面开始的是另一个参数:
cd "C:\Users\student\My Projects\demo-project"为什么当前目录很重要
终端总是处在某个目录里,哪怕一条命令都还没输入。这个目录叫作当前目录或工作目录。命令会从这里开始查找文件、推算相对路径。
您需要把一个文件从"Downloads"复制到"Documents"里的"财务机密"文件夹。您复制文件,一路点到目标文件夹,到了那里才点"粘贴"。文件被写入磁盘上一个具体的地址。没有人会把文件粘贴到"Documents 里的某个地方",您每次都会走到准确的位置,只不过是用鼠标完成的,没有特意去想。
在终端里也是一样的,只是文件资源管理器的窗口换成了一行路径。目录仍然由您来选,智能体就从这个目录开始工作。
从技术上说,可以在磁盘根目录 C:\ 打开终端。这样做好吗?不好。原因并不是 Claude Code 会冲上去把磁盘上的每个文件都读一遍,它不会。问题在于您选了一个糟糕的起点:
- 智能体看不到单个项目的清晰边界:旁边就是系统文件、用户文件夹和您的其他项目;
- 相对路径的起点不在您预想的地方:
src突然就不是您以为的那个src了; - 单看路径,看不出您现在在处理哪个项目。
还有一个容易踩的小坑:IDEA 里打开的文件和终端的当前目录是两种不同的状态。您可能正在看一个项目的文件,而终端还停在另一个项目里。切换编辑器标签页,并不会让已经打开的终端跟着移动。
起点
项目根目录是最上层的那个文件夹,里面放着同一个项目的相关文件:代码、设置、文档以及其他需要的材料。正式定义不用死记。看它的作用更简单:这个文件夹把一个完整的项目归拢在一起。
例如,公共文件夹 projects 里可以存放好几个互不相关的项目:
projects/
├── demo-project/
│ ├── README.md
│ └── src/
└── calculator/
├── README.md
└── src/在这个目录树里,projects 只是一个容器。第一个项目的根目录是 demo-project,第二个是 calculator。从技术上说,可以在公共文件夹里启动智能体,但那里有用的上下文反而更少:两个毫不相关的项目摆在一起。
实际操作时,规则很简单:找到您要修改的那个项目的最上层文件夹,在那里打开终端,从那里启动各种工具。这样命令、文件和项目说明就都落在同一个清晰的范围里。
为了理解上下文,智能体会查看任务周围的结构和文件。如果启动的位置太靠上,旁边就会出现其他项目。请求一旦不够明确,智能体可能会认为这些项目也和任务有关,顺手改掉没人让它改的东西。
忙起来的时候,很容易只看到预期的结果,却漏掉旁边项目里多出来的改动。所以,正确的工作目录不是走形式,而是给智能体划出的一条清楚的边界。
codegym-project 的结构
现在来看前面一直在铺垫的 CodeGym 的情况。IDEA 插件会把任务下载到一个很大的 codegym-project 目录树里。从外面看,它像是一个项目,但里面有个重要的转折:每个任务都是一个独立的项目。
不是堆在一起的某一个文件,而是一个自成一体的项目:有自己的文件夹、自己的文件,还有 .claude 里专门给智能体的规则。有多少个任务,就有多少个项目。一点不夸张。
简化后的目录树是这样的:
codegym-project/
└── src/zh/codegym/claude/course/level01/
├── task05/
│ ├── .claude/ # task05 的智能体规则
│ └── arkanoid.html # 这个任务的文件
└── task09/
├── .claude/ # task09 自己的规则
├── arkanoid.html
├── clicker.html
└── tictactoe.html这就是前面比喻里说的那些办公室,只不过现在门上有了编号:task05 和 task09。每间办公室都有自己的文件和自己的规矩,而 codegym-project 是整栋大楼。把助手叫到大厅里是不够的,您得说清楚当前的工作放在哪间办公室。
相邻的任务并不会给当前任务补充上下文。解 task09 用不到 task05 的文件,一个文件夹里的规则也代替不了另一个文件夹里的规则。所以在 CodeGym 上做任务时,项目根目录是具体任务的文件夹,而不是公共的 codegym-project。
在做 task09?那就在 task09 里打开终端,在那里启动 claude。课程的公共根目录对这件事来说太大了。
在任务文件夹里启动智能体
好消息是:长长的地址不用手动输入。IDEA 可以直接在选中的文件夹里打开终端。
下面介绍的是手动的方法。没错,Claude Code 自己也能在目录之间切换,并在正确的文件夹里执行命令。但还是值得亲手弄明白一次:这样您不必依赖智能体的提示,也能一眼看清当前任务的边界。
- 在项目树里找到需要的
taskXX。 - 右键点击任务文件夹。
- 选择
Open In-Terminal。 - 用
pwd命令检查当前目录。 - 用
ls命令检查文件。 - 确认路径以正确的
taskXX结尾,然后执行claude。

IDEA 有时会把嵌套的 package 文件夹显示成用点号连接的一行,例如 zh.codegym.claude.course.level01。不要把这一行照抄成磁盘上的路径。更简单的做法是通过 Open In - Terminal 打开终端,或者用 Copy Path/Reference 复制真实路径。
如果终端已经开在 codegym-project 里,可以手动切换过去:
cd src/zh/codegym/claude/course/level01/task09
pwd
ls
claude新任务 - 新的工作目录
从 task05 换到了 task09?已经打开的智能体会话不会自己跟着 IDEA 的标签页搬过去。用 /exit 命令结束它,在新任务里打开终端,再检查一遍路径,然后启动 claude。
不要把不同的任务混在同一个会话里。之前的文件、决定和假设都还留在对话里,智能体可能会把旧的上下文带进新的工作。结果就成了两个任务搅在一起的大杂烩,事后很难理清。
会话上下文为什么这么重要、该怎么管理,课程后面会讲。眼下先记住一条简单的规则:新任务,新会话。
可以同时开几个终端标签页,但每个标签页都应该有明确对应的任务。刚开始的时候,更简单的做法是切换前先关掉旧会话,这样就不用去猜智能体现在在为哪个项目干活。
路径的结尾是 C:\、您的主文件夹或 codegym-project,而不是 taskXX?那就停止会话,进入任务文件夹,重新启动智能体。先把地址改对,再继续工作。
这一切如何与 Claude Code 配合
我们把所有内容串成一幅完整的图景。终端给 Claude Code 的不只是一条启动命令,它还为项目结构、相对路径和本地说明设定了起点。当前目录决定工作从哪里开始,而单个项目的根目录则为智能体提供一组相互关联的文件,不受旁边项目的干扰。
由此还能得出两点,忙起来的时候很容易忘记。IDE 里打开的标签页不会改变已经运行的会话所在的目录,所以换到另一个任务,既意味着新的目录,也意味着单独的会话。另外,在 codegym-project 里,单个项目的根目录不在目录树的顶层,而是在具体的 taskXX 这一层。
实际操作时,在执行 claude 命令之前,做三个快速检查就够了:
- 用
pwd看一下路径。 - 用
ls看一下文件。 - 确认您看到的是需要的那一个项目,然后再启动智能体。
就这些。终端在这里并没有让工作变复杂,而是把看不见的设置变得看得见:您清楚地知道自己在哪里,也知道把哪个项目交给了智能体。
GO TO FULL VERSION