Chat 對話模式
Chat 是 Cursor 最直覺的 AI 互動方式,按 Ctrl+L(或 Cmd+L)開啟右側對話面板。
基本操作
- 直接輸入問題,AI 會參考當前開啟的檔案與游標位置回答
- 在程式碼中選取一段後再開啟 Chat,AI 會自動帶入選取的內容
- 使用
@符號引用特定檔案或資料夾(例如@utils/helper.ts) - 對話歷史會保留在當前工作階段中,可以追問
@ 引用語法
// 引用單一檔案
@src/components/Button.tsx 這個元件的 props 型別是什麼?
// 引用資料夾
@src/utils 幫我找出所有處理日期格式的函式
// 引用整個程式碼庫
@codebase 我的專案中哪些地方有使用 Redux?
// 引用網路文件
@https://docs.react.dev/reference/react/useState
根據官方文件,useState 的最佳實踐是什麼?
// 引用最近的錯誤訊息
@errors 這個錯誤是什麼意思,如何修復?實用 Chat 提示詞
// 解釋程式碼
"解釋這段程式碼的邏輯,用繁體中文說明"
// 發現潛在問題
"這段程式碼有什麼潛在的 bug 或效能問題?"
// 生成測試
"為這個函式生成 Jest 單元測試,涵蓋邊界情況"
// 改善程式碼
"重構這段程式碼使其更符合 SOLID 原則"
// 生成文件
"為這個模組生成 JSDoc 說明,包含參數與回傳值"Chat 模式 vs Agent 模式
Chat 模式適合「問問題、獲取建議」;Agent 模式(Composer)適合「直接執行任務、修改程式碼」。兩者的主要差異在於 Agent 會主動修改檔案,而 Chat 預設只提供建議。
Agent 模式(Composer)
按 Ctrl+I(或 Cmd+I)開啟 Composer 面板,這是 Cursor 最強大的功能,能夠自動完成複雜的多步驟開發任務。
Agent 的能力
- ✓ 讀取並修改多個檔案
- ✓ 在終端機執行指令(安裝套件、執行測試等)
- ✓ 建立新檔案與資料夾
- ✓ 搜尋程式碼庫找到相關程式碼
- ✓ 根據錯誤訊息自動修正並重試
- △ 執行前會顯示計畫讓你確認(可以在設定中調整)
典型使用情境
// 新增功能
"在 src/components 目錄下建立一個 Modal 元件,
支援標題、內容、確認/取消按鈕,並加入動畫效果"
// 重構任務
"將 src/utils/dateHelper.js 轉換為 TypeScript,
加入完整的型別定義並更新所有引用的檔案"
// 修復 Bug
"找出並修復應用程式中所有造成記憶體洩漏的地方,
特別注意 useEffect 的清理函式"
// 加入測試
"為 src/services 目錄下的所有服務建立單元測試,
使用 Jest 和 React Testing Library"審查 Agent 的變更
Agent 完成任務後,所有變更都會以 diff 形式顯示,你可以:
- 按「Accept All」接受所有變更
- 逐一審查每個檔案的變更,選擇性接受或拒絕
- 要求 Agent 調整某個特定的變更
Agent 執行終端指令時,預設會在執行前顯示指令讓你確認。建議保持這個設定,避免意外刪除或覆蓋重要檔案。
Tab 智慧補全
Cursor 的 Tab 補全是基於整個程式碼庫上下文的 AI 預測,遠比傳統 IntelliSense 更智慧。
操作方式
- 開始輸入程式碼時,Cursor 會以灰色文字顯示補全建議
- 按 Tab 接受整個建議
- 按 →(右方向鍵)逐字接受
- 按 Esc 或繼續輸入來忽略建議
Tab 補全的智慧之處
// 情境一:完成函式實作
// 當你輸入函式簽名後,Cursor 可能直接預測完整實作
function calculateTax(amount: number, rate: number) {
// Cursor 可能自動補全:
return amount * (rate / 100);
}
// 情境二:重複模式的延伸
// 當你輸入第一個 case,Cursor 預測後續的 case
switch (action.type) {
case 'INCREMENT':
return { ...state, count: state.count + 1 };
case 'DECREMENT': // ← 你輸入到這,Tab 補完整行
return { ...state, count: state.count - 1 };
// 情境三:測試程式碼生成
// 輸入一個 describe 區塊的標題,Cursor 預測 test 內容
describe('calculateTax', () => {
it('should return correct tax amount', () => {
// Cursor 可能預測:
expect(calculateTax(100, 10)).toBe(10);
});
});調整補全行為
在設定中可以調整 Tab 補全的行為:
- 開啟/關閉自動觸發
- 調整觸發延遲時間
- 設定特定語言或資料夾停用補全
Cmd+K 行內編輯
選取程式碼後按 Ctrl+K(或 Cmd+K),可以用自然語言直接修改選取的程式碼,結果以 diff 形式顯示。
常用場景
// 場景一:型別轉換
// 選取 JavaScript 函式,輸入:
"轉換為 TypeScript,加入完整型別定義"
// 場景二:重構
// 選取多層巢狀的 if-else,輸入:
"重構為 early return 風格,提高可讀性"
// 場景三:加入錯誤處理
// 選取 API 呼叫,輸入:
"加入完整的錯誤處理,包含 try-catch 與錯誤訊息"
// 場景四:效能最佳化
// 選取迴圈邏輯,輸入:
"用 Array.reduce 重寫這個邏輯,提高效能"
// 場景五:加入文件
// 選取函式,輸入:
"加入 JSDoc 說明,包含 @param 和 @returns"接受或拒絕變更
Cmd+K 修改後,變更會以 diff 形式高亮顯示:
- 按 Ctrl+Y 接受變更
- 按 Ctrl+N 拒絕,恢復原始程式碼
- 也可以用滑鼠點擊「Accept」或「Reject」按鈕
Rules for AI(.cursorrules)
在專案根目錄建立 .cursorrules 檔案,可以為整個專案設定 AI 的行為規範。這個檔案會在每次 AI 回覆時自動被包含在上下文中。
React + TypeScript 專案範例
# .cursorrules
你是一個精通 React 與 TypeScript 的資深前端工程師。
## 程式碼規範
- 使用 functional components,不使用 class components
- 所有 props 都必須有 TypeScript 型別定義
- 使用 const 宣告,避免 let(除非值需要改變)
- import 順序:React → 第三方套件 → 本地模組
## 命名規範
- 元件:PascalCase(例如 UserProfile)
- Hooks:camelCase 且以 use 開頭(例如 useUserData)
- 常數:SCREAMING_SNAKE_CASE(例如 MAX_RETRIES)
- 一般變數與函式:camelCase
## 架構規範
- 元件拆分原則:單一職責,不超過 150 行
- 將業務邏輯抽取到自訂 hooks
- 使用 React Query 管理伺服器狀態
- 使用 Zustand 管理客戶端狀態
## 回覆格式
- 說明文字使用繁體中文
- 程式碼範例完整可執行,不省略
- 有多種實作方式時,說明各自優缺點Node.js 後端專案範例
# .cursorrules(後端版本)
你是一個 Node.js 後端工程師,熟悉 Express 和 PostgreSQL。
- 使用 async/await,避免 callback 風格
- 所有資料庫操作使用 Drizzle ORM
- API 路由遵循 RESTful 規範
- 輸入驗證使用 Zod schema
- 錯誤統一透過 middleware 處理
- 環境變數使用 dotenv,不硬編碼任何密鑰MCP 整合(Model Context Protocol)
MCP(Model Context Protocol)是 Anthropic 推出的開放標準,讓 AI 可以透過標準化介面連接外部工具與資料來源。Cursor 從 0.43 版本開始支援 MCP。
常用 MCP 工具
- Filesystem MCP:讓 AI 讀寫本地檔案系統
- GitHub MCP:讓 AI 直接操作 GitHub 倉庫、PR、Issues
- Postgres MCP:讓 AI 查詢 PostgreSQL 資料庫
- Brave Search MCP:讓 AI 搜尋即時網路資訊
- Puppeteer MCP:讓 AI 控制無頭瀏覽器進行測試
設定 MCP
// ~/.cursor/mcp.json 或 .cursor/mcp.json(專案層級)
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your_token_here"
}
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
}
}
}