第一眼看到終端機,會覺得它有點冷冰冰:黑漆漆的視窗、一閃一閃的游標,平常熟悉的按鈕一個也沒有。實際上沒那麼玄。它就是直接告訴電腦要做什麼的一種方式:一個指令列出檔案,另一個切換到需要的資料夾,第三個啟動程式。

剛開始和代理一起工作時遇到的卡關,幾乎都不是因為請求寫得不好,而是因為終端機待在錯的資料夾裡。所以我們先把資料夾和路徑弄清楚,之後再談 claude 指令。最後會把這些套用到 codegym-project 專案上,在那裡,每個任務都是一個獨立的專案。

終端機:直接操控專案的方式

終端機是一個視窗,您在裡面用文字指令操作電腦。不必在選單裡找按鈕,而是直接說出要做的動作:列出檔案、開啟資料夾、啟動程式。

用滑鼠比較快,但只快到同一個動作得重複第十次為止。改用終端機,能換來這些:

  • 一個指令只做一件具體的事 - 結果就顯示在同一個視窗裡,不用猜;
  • 一連串動作很容易重複 - 檢查資料夾、查看檔案、切換過去再啟動;
  • 看得到介面藏起來的狀態 - 尤其是目前所在的資料夾。

不需要二選一。在 IDEA 裡,瀏覽找到檔案、點一下就開啟很方便;在終端機裡,則適合執行一個精確的指令並馬上看到結果。實務上,兩種方式一直是搭配著用的。

Claude Code 也是用指令啟動的

當您輸入 claude 時,代理會從終端機的目前目錄開始工作。所以最好先弄清楚終端機在哪裡,再啟動代理。

日常工作用的五個指令

五個動作。剛開始,這些真的就夠用了。在 Windows 上我們用 PowerShell,在 macOS 和 Linux 上用系統內建的終端機。這幾個簡短的指令在三種系統上寫法都一樣。

指令全稱作用
pwdprint working directory - "顯示工作目錄"印出終端機目前所在資料夾的完整路徑。
lslist - "清單"列出目前目錄裡的檔案和資料夾。
cd demo-projectchange 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 出發的相對路徑
WindowsC:\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/tw/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 自己就能在目錄之間切換,並在需要的資料夾裡執行指令。但還是值得親手弄懂一次:您不必依賴代理的提示,也能馬上看清目前任務的邊界。

  1. 在專案樹裡找到需要的 taskXX。
  2. 在任務資料夾上按滑鼠右鍵。
  3. 選擇 Open In - Terminal。
  4. 用 pwd 指令確認目前目錄。
  5. 用 ls 指令確認檔案。
  6. 確定路徑的結尾是需要的 taskXX,再執行 claude。

IDEA 有時會把巢狀的 package 資料夾顯示成一行、用點隔開,例如 tw.codegym.claude.course.level01。不要把這一行當成磁碟上的路徑照打。比較簡單的做法是透過 Open In - Terminal 開啟終端機,或用 Copy Path/Reference 複製真正的路徑。

如果終端機已經開在 codegym-project 裡,可以手動切換過去:

cd src/tw/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 指令之前,做三個快速檢查就夠了:

  1. 用 pwd 查看路徑。
  2. 用 ls 查看檔案。
  3. 確定眼前看到的是需要的那一個專案,再啟動代理。

就這樣。終端機在這裡不是讓工作變複雜,而是把看不見的設定變得看得見:您清楚知道自己在哪裡,也知道要把哪個專案交給代理。