Mở đầu — vì sao bài này quan trọng
Nếu bạn từng dùng GitHub Copilot và cảm thấy nó chỉ "gợi ý nốt câu code" cho bạn, thì Cursor sẽ mở ra một trải nghiệm hoàn toàn khác. Cursor không phải là một plugin gắn thêm vào editor — nó là cả một IDE được xây dựng lại từ VS Code, với AI được đưa vào tận lõi. Nói cách khác, Copilot là chiếc động cơ AI gắn thêm; Cursor là chiếc xe được thiết kế lại từ đầu để chạy bằng AI.
Vì sao điều này quan trọng với bạn — một developer đang làm việc ở Việt Nam, có thể trong một startup fintech ở TP.HCM hay một agency outsourcing ở Đà Nẵng? Bởi vì tốc độ ship sản phẩm đang trở thành lợi thế cạnh tranh sống còn. Một dev biết dùng Cursor thành thạo có thể đọc hiểu một codebase lạ nhanh gấp đôi, sửa bug qua nhiều file trong vài giây, và viết test cho cả module chỉ bằng một câu lệnh. Đây không còn là "chuyện tương lai" — nó là công cụ hàng ngày của rất nhiều team đã chuyển sang từ 2024–2025.
Trong bài này, chúng ta sẽ đi sâu vào bản chất Cursor: các tính năng cốt lõi (Tab autocomplete, Cmd+K inline edit, Chat và Composer/Agent), cách nó "hiểu" codebase của bạn, và quan trọng nhất là cách dùng nó một cách kỷ luật để không rơi vào cái bẫy "AI viết code sai mà mình không biết". Bài này chỉ tập trung vào Cursor như một IDE. Việc so sánh Cursor với Copilot và Claude Code sẽ được nói kỹ ở Bài 16, còn AI code review là chủ đề của Bài 17 — ở đây ta không lấn sang.
Khái niệm cốt lõi
Cursor là gì?
Cursor là một fork của VS Code — nghĩa là nó giữ nguyên giao diện, phím tắt, extension và theme quen thuộc của VS Code, nên bạn gần như không phải học lại gì về mặt editor. Bạn có thể import toàn bộ cấu hình VS Code (settings, extensions, keybindings) chỉ trong một bước khi mở lần đầu. Điều khác biệt nằm ở chỗ: AI không phải là một tính năng phụ mà là trung tâm của cách bạn viết code.
Cursor hoạt động theo mô hình "bring your own workflow": bạn vẫn gõ code như bình thường, nhưng có bốn cách chính để nhờ AI can thiệp, mỗi cách phù hợp với một tình huống khác nhau.
Bốn cơ chế tương tác chính
1. Tab autocomplete (Cursor Tab). Đây là tính năng gây nghiện nhất. Khác với autocomplete truyền thống chỉ gợi ý một dòng, Cursor Tab dự đoán cả một khối thay đổi — thậm chí gợi ý bạn nhảy tới vị trí tiếp theo cần sửa (multi-line và multi-location edit). Ví dụ khi bạn đổi tên một biến, Cursor Tab có thể tự động đề xuất sửa tất cả chỗ dùng biến đó ở các dòng phía dưới; bạn chỉ cần nhấn Tab liên tục để "chốt" từng gợi ý. Nó học từ ngữ cảnh những dòng bạn vừa gõ và cả những file gần đây.
2. Cmd+K (Ctrl+K trên Windows) — inline edit. Bôi đen một đoạn code, nhấn Cmd+K, gõ yêu cầu bằng tiếng Việt hoặc tiếng Anh ("thêm try-catch và log lỗi ra console"), Cursor sẽ sửa ngay tại chỗ và cho bạn xem diff để chấp nhận hoặc từ chối. Đây là cách nhanh nhất để refactor một hàm nhỏ mà không cần rời khỏi dòng code.
3. Chat (Cmd+L). Mở một khung chat bên phải, nơi bạn hỏi đáp về codebase. Điểm mạnh là bạn có thể "gắn" (mention) file, folder, hoặc symbol bằng cú pháp @ — ví dụ @utils/auth.ts — để đưa đúng ngữ cảnh cho AI thay vì để nó đoán mò. Chat phù hợp khi bạn muốn hiểu code, hỏi "tại sao hàm này lỗi", hay lên kế hoạch trước khi viết.
4. Composer / Agent mode. Đây là chế độ mạnh nhất và cũng là thứ khiến Cursor khác biệt rõ nhất. Bạn mô tả một tính năng ("thêm endpoint đăng ký user với validate email và hash password"), Agent sẽ tự đọc các file liên quan, tạo file mới, sửa nhiều file cùng lúc, thậm chí chạy lệnh terminal và tự sửa nếu build lỗi. Bạn review toàn bộ diff trước khi apply. Đây là bước nhảy từ "AI gợi ý code" sang "AI thực thi một task".
Cursor "hiểu" codebase của bạn như thế nào
Khác biệt lớn nhất so với autocomplete thuần túy là Cursor lập chỉ mục (index) toàn bộ project của bạn. Nó chia nhỏ code, tạo embeddings và lưu để khi bạn hỏi, nó tìm ra những đoạn code liên quan trên toàn repo chứ không chỉ file đang mở. Nhờ vậy khi bạn hỏi "chỗ nào trong dự án đang gọi API thanh toán", nó trả lời được dù bạn chưa mở file đó.
Bạn kiểm soát ngữ cảnh này bằng vài cơ chế quan trọng:
- File
.cursor/rules(hoặc.cursorrulesở phiên bản cũ): nơi bạn viết các quy tắc dự án — coding convention, framework đang dùng, ngôn ngữ trả lời. Ví dụ: "Luôn dùng TypeScript strict mode, dùng Tailwind, không dùng thư viện moment.js, trả lời giải thích bằng tiếng Việt". Đây là cách bạn "dạy" Cursor về dự án của mình một lần và dùng mãi. @mentions: chủ động đưa đúng file/folder vào ngữ cảnh..cursorignore: loại trừ các thư mục nhạy cảm hoặc nặng (nhưnode_modules, file.env, thư mục chứa secret) khỏi việc index.
Về model và chi phí
Cursor không tự train model mà đứng trên các model hàng đầu — bạn chọn được giữa các dòng của Anthropic (Claude), OpenAI (GPT), Google (Gemini)... ngay trong dropdown. Điểm này rất đáng giá với người Việt: bạn không cần từng nhà cung cấp riêng, chỉ trả một subscription Cursor (bản Pro khoảng 20 USD/tháng thời điểm 2025) là dùng được nhiều model. Có bản Free giới hạn để dùng thử. Chuyện "khi nào đáng trả tiền cho AI" sẽ được bàn kỹ ở Bài 46 — ở đây bạn chỉ cần biết Cursor có cả bản miễn phí lẫn trả phí.
Tình huống thực tế
Tình huống 1 — Startup fintech Sài Gòn onboard dev mới vào codebase 200 nghìn dòng
Một startup fintech ở Quận 1 (gọi là PayFlow) có một hệ thống backend Node.js đã chạy 3 năm, khoảng 200.000 dòng code, tài liệu thì lỗi thời. Mỗi khi tuyển dev mới, họ mất trung bình 3–4 tuần để người đó "quen mặt" codebase trước khi dám sửa gì.
Sau khi chuyển sang Cursor, quy trình onboard thay đổi hẳn. Dev mới mở project, để Cursor index xong, rồi dùng Chat với @ mention: "Giải thích luồng xử lý một giao dịch từ lúc client gọi API /transaction đến khi ghi vào database". Cursor lần theo các file liên quan và vẽ ra luồng, chỉ đúng tên hàm và file. Khi gặp một đoạn code khó hiểu, cậu ấy bôi đen và hỏi thẳng "đoạn này để làm gì, tại sao lại lock row ở đây".
Bài học rút ra: giá trị lớn nhất của Cursor với team không phải là "viết code mới nhanh hơn" mà là đọc hiểu code cũ nhanh hơn. PayFlow rút thời gian onboard từ 3–4 tuần xuống còn khoảng 1 tuần. Nhưng họ cũng đặt ra quy tắc: Cursor giải thích để hiểu, còn mọi thay đổi vào code fintech vẫn phải qua review người thật — vì sai sót trong xử lý tiền là không thể chấp nhận.
Tình huống 2 — Agency outsourcing Đà Nẵng và bài toán refactor xuyên nhiều file
Một agency ở Đà Nẵng nhận dự án migrate một app React từ class component sang function component với hooks — khoảng 120 component. Nếu làm tay, đây là công việc lặp đi lặp lại, nhàm chán và dễ sai, ước tính mất 3 tuần cho 2 dev.
Họ dùng Composer/Agent của Cursor kết hợp với một file .cursor/rules mô tả rõ chuẩn migrate: cách chuyển this.state sang useState, cách chuyển componentDidMount sang useEffect, giữ nguyên logic nghiệp vụ. Với mỗi component, họ mở nó, ra lệnh cho Agent migrate, xem diff, rồi chạy test có sẵn để xác nhận không vỡ. Những component đơn giản gần như tự động; những component phức tạp thì Agent làm 80%, dev chỉnh nốt 20%.
Kết quả: công việc 3 tuần rút còn khoảng 6 ngày làm việc. Nhưng có một chi tiết đắt giá — trong tuần đầu, một dev vì tin AI quá đã apply hàng loạt diff mà không đọc kỹ, và một component bị Agent "tiện tay" đổi luôn logic điều kiện hiển thị. Bug lọt tới tận lúc QA.
Bài học rút ra: Agent mode là con dao hai lưỡi. Nó tăng tốc thật, nhưng "review diff" không phải thủ tục cho có — đó là phần việc quan trọng nhất còn lại của bạn. Tốc độ chỉ có giá trị khi đi kèm kỷ luật đọc diff và chạy test.
Tình huống 3 — Freelancer làm nhiều ngôn ngữ và chuyện .cursorignore cứu một bàn thua
Một freelancer nhận dự án cho khách hàng Singapore, trong repo có sẵn file .env chứa API key thật và một thư mục export dữ liệu khách hàng. Ban đầu cậu để Cursor index toàn bộ repo mà không nghĩ ngợi. Khi hỏi Chat một câu vô hại về cấu hình, cậu giật mình nhận ra ngữ cảnh có thể chạm tới những file nhạy cảm này.
Cậu lập tức thêm .cursorignore để loại trừ .env, thư mục dữ liệu và mọi file chứa secret, đồng thời bật Privacy Mode trong Cursor (chế độ cam kết code không được lưu trữ phía server). Từ đó mỗi dự án mới, việc đầu tiên là cấu hình .cursorignore trước khi index.
Bài học rút ra: với AI IDE, bảo mật dữ liệu là trách nhiệm chủ động của bạn, không phải mặc định an toàn. Đây là chủ đề sẽ được đào sâu ở Bài 45, nhưng riêng với Cursor, .cursorignore + Privacy Mode là hai nút bạn phải bật trước khi làm việc với code của khách hàng.
Hướng dẫn từng bước
Đây là lộ trình để bạn dùng Cursor hiệu quả ngay từ ngày đầu:
- Cài đặt và import cấu hình. Tải Cursor từ cursor.com, mở lên và chọn import settings từ VS Code. Toàn bộ extension, theme, keybinding của bạn được giữ nguyên — coi như bạn vẫn đang dùng VS Code, chỉ thêm siêu năng lực.
- Đăng nhập và chọn model. Đăng ký tài khoản, dùng bản Free để làm quen. Trong khung chat, thử đổi qua lại vài model để cảm nhận sự khác biệt về chất lượng và tốc độ.
- Mở project và để nó index. Mở một dự án thật của bạn. Chờ Cursor index xong (thanh trạng thái sẽ báo). Đây là bước tạo "bộ nhớ" cho AI về codebase.
- Cấu hình bảo mật trước. Tạo file
.cursorignoreở gốc project, thêm.env,node_modules, thư mục secret. Vào Settings bật Privacy Mode nếu làm việc với code không được phép chia sẻ.
- Viết
.cursor/rules. Tạo file quy tắc mô tả stack, convention, ngôn ngữ trả lời. Đây là khoản đầu tư 15 phút cho lợi ích cả dự án — Cursor sẽ ngừng gợi ý những thứ trái với chuẩn của bạn.
- Luyện Tab trước, Cmd+K sau. Vài ngày đầu chỉ tập trung dùng Tab autocomplete để quen phản xạ. Sau đó tập Cmd+K để refactor các hàm nhỏ, xem diff và quyết định accept/reject.
- Dùng Chat để hiểu, rồi mới đến Agent. Trước khi nhờ Agent làm một task lớn, hãy dùng Chat để hỏi và lên kế hoạch. Khi đã rõ hướng, chuyển sang Composer/Agent, mô tả task cụ thể, và luôn review từng diff trước khi apply.
- Chạy test sau mỗi thay đổi lớn. Coi test là lưới an toàn. Không có test thì mỗi lần Agent sửa nhiều file là một lần bạn đánh cược.
Lỗi thường gặp & mẹo
Lỗi 1 — Accept diff mà không đọc. Đây là lỗi phổ biến và nguy hiểm nhất, đúng như tình huống agency Đà Nẵng. Mẹo: tập thói quen đọc diff như đọc một PR của đồng nghiệp. Nếu diff dài quá, hãy chia task nhỏ ra để mỗi lần review được nhẹ nhàng.
Lỗi 2 — Đưa ngữ cảnh mơ hồ rồi trách AI đoán sai. Nếu bạn hỏi chung chung "sửa bug này" mà không mention file hay dán lỗi cụ thể, Cursor sẽ đoán, và đoán thì hay sai. Mẹo: luôn @ mention đúng file, dán nguyên văn error message, nói rõ kết quả mong muốn.
Lỗi 3 — Bỏ qua .cursorignore và Privacy Mode. Rất nhiều người chỉ nhớ đến bảo mật sau khi đã lỡ. Mẹo: đưa việc tạo .cursorignore thành bước bắt buộc đầu tiên của mọi dự án, như một checklist.
Lỗi 4 — Không viết .cursor/rules nên phải nhắc lại convention mỗi lần. Nếu bạn thấy mình cứ phải sửa tay những thứ AI làm sai chuẩn, đó là dấu hiệu bạn nên viết rules. Mẹo: mỗi lần sửa một lỗi lặp lại, hãy thêm một dòng vào rules để nó không tái diễn.
Lỗi 5 — Lạm dụng Agent cho việc nhỏ. Với một sửa đổi một dòng, mở Agent là chậm và tốn. Mẹo: chọn đúng công cụ — Tab cho gợi ý tức thì, Cmd+K cho sửa cục bộ, Chat để hiểu, Agent cho task đa file.
Mẹo nâng cao: dùng @Web để Cursor tra cứu tài liệu mới nhất khi làm với thư viện lạ, và @Docs để thêm tài liệu chính thức của một framework vào ngữ cảnh. Điều này giảm hẳn chuyện AI "bịa" API không tồn tại.
Bài tập thực hành
- Cài đặt và cấu hình nền tảng. Cài Cursor, import cấu hình VS Code, mở một dự án cá nhân của bạn. Tạo
.cursorignore(ít nhất loại trừ.envvànode_modules) và viết một file.cursor/rulesmô tả stack cùng yêu cầu "giải thích bằng tiếng Việt".
- Làm chủ bốn cơ chế. Với chính dự án đó, thực hiện lần lượt: (a) dùng Tab để hoàn thiện một hàm; (b) bôi đen một hàm và dùng Cmd+K yêu cầu thêm xử lý lỗi; (c) dùng Chat với
@mention để hỏi "luồng dữ liệu của tính năng X đi qua những file nào"; (d) dùng Agent để thêm một tính năng nhỏ có thật (ví dụ một endpoint hoặc một component), rồi review toàn bộ diff và ghi lại những chỗ bạn phải sửa tay.
- Rút bài học cá nhân. Viết một đoạn ngắn (5–7 câu) trả lời: trong bốn cơ chế, cái nào giúp bạn nhiều nhất với style làm việc của bạn? Bạn đã bắt AI làm sai chỗ nào, và nếu viết thêm một dòng vào
.cursor/rulesthì có tránh được không?
Tóm tắt
Cursor là một IDE fork từ VS Code với AI ở tận lõi, không phải một plugin gắn thêm. Bốn cơ chế tương tác — Tab autocomplete (gợi ý đa dòng, đa vị trí), Cmd+K (inline edit), Chat (hỏi đáp về codebase với @ mention), và Composer/Agent (thực thi task đa file) — phủ gần như mọi tình huống hàng ngày của developer. Sức mạnh thật sự đến từ việc Cursor index toàn bộ codebase để "hiểu" dự án, cộng với khả năng bạn định hướng nó qua .cursor/rules, @ mentions và .cursorignore.
Ba tình huống thực tế cho thấy Cursor tỏa sáng nhất ở việc đọc hiểu code cũ (fintech Sài Gòn), refactor xuyên nhiều file (agency Đà Nẵng) và cho thấy bảo mật là trách nhiệm chủ động của bạn (freelancer với .cursorignore). Nhưng xuyên suốt tất cả là một nguyên tắc vàng: tốc độ chỉ đáng giá khi đi kèm kỷ luật review diff và chạy test. Cursor giúp bạn ship nhanh gấp nhiều lần, nhưng trách nhiệm về chất lượng code vẫn hoàn toàn nằm ở bạn — người ngồi ghế lái.