Hướng dẫn sử dụng Cursor

PHẦN 1.

1. Giới thiệu chung

Cursor là gì?

Cursor là một trình soạn thảo mã nguồn được phát triển dựa trên nền tảng Visual Studio Code (VS Code), với tính năng đặc biệt là tích hợp công nghệ AI để hỗ trợ lập trình viên. Đây là công cụ giúp tối ưu hóa quá trình viết code và tăng năng suất làm việc một cách đáng kể.

Những điểm nổi bật của Cursor

  • Tab Completion thông minh: Cursor có khả năng dự đoán và gợi ý code thông minh, giúp lập trình viên viết code nhanh hơn thông qua việc nhấn phím Tab.
  • Multi-line Edits: Cho phép chỉnh sửa nhiều dòng code cùng một lúc, tiết kiệm thời gian và công sức trong quá trình lập trình.
  • AI Agent tích hợp: Hỗ trợ trả lời câu hỏi, giải thích code và đề xuất giải pháp dựa trên ngữ cảnh của dự án.
  • Smart Rewrites: Khả năng viết lại và tối ưu hóa code một cách thông minh dựa trên yêu cầu của người dùng.
  • Hiểu codebase: Cursor có khả năng phân tích và hiểu được toàn bộ codebase, giúp đưa ra gợi ý và hỗ trợ phù hợp với ngữ cảnh của dự án.

Với những tính năng mạnh mẽ này, Cursor đang trở thành công cụ được nhiều lập trình viên chuyên nghiệp tin dùng, giúp tăng hiệu suất và chất lượng trong quá trình phát triển phần mềm.

2. Các chức năng cơ bản

2.1. Tab completion

Tab completion là tính năng dự đoán và gợi ý code thông minh trong Cursor, giúp lập trình viên viết code nhanh và chính xác hơn.

Cách sử dụng

  • Nhấn phím Tab sau khi gõ một phần code để Cursor gợi ý phần tiếp theo
  • Cursor sẽ hiển thị gợi ý dựa trên ngữ cảnh hiện tại của code
  • Có thể dự đoán và hoàn thành nhiều dòng code cùng lúc

Ví dụ minh họa

Tính năng nổi bật

  • Dự đoán thông minh dựa trên ngữ cảnh code
  • Hỗ trợ đa dạng ngôn ngữ lập trình
  • Tự động định dạng code theo chuẩn
  • Tích hợp với các snippets có sẵn

Mẹo sử dụng hiệu quả

  • Kết hợp với phím tắt để di chuyển giữa các vị trí được gợi ý
  • Tùy chỉnh snippets theo nhu cầu cá nhân
  • Sử dụng kèm với các tính năng AI khác của Cursor để tối ưu workflow

Tab completion là một trong những tính năng cơ bản nhất nhưng mạnh mẽ của Cursor, giúp tăng đáng kể tốc độ coding và giảm thiểu lỗi cú pháp thường gặp.

2.2. Smart Rewrites

Smart Rewrites là tính năng mạnh mẽ giúp Cursor tự động sửa lỗi cú pháp và tinh chỉnh code ngay khi bạn gõ, giữ cho flow lập trình mượt mà và tránh các lỗi vặt ngăn dòng code.

Cách sử dụng

  • Gõ code bình thường không cần quá chính xác; nếu có lỗi cú pháp (ví dụ: thiếu dấu ngoặc, dấu chấm phẩy, typo biến), Cursor tự động phát hiện.
  • Hộp Smart Rewrite xuất hiện mô tả phần code đã được sửa.
  • Nhấn Tab để chấp nhận sửa — đoạn code sẽ được cập nhật ngay lập tức.

Ví dụ minh họa

Tính năng nổi bật

  • Nhanh và chính xác: Tự sửa lỗi tức thì mà không cần chạy compiler hoặc linter.
  • Giữ flow code: Không bị ngắt quãng khi phải dừng để sửa cú pháp.
  • Cải thiện code đa dòng: Hỗ trợ sửa nhiều dòng cùng lúc, refactor nhẹ khi gõ .

2.3. Mode, Agent

Agent là AI trợ lý tích hợp trong Cursor, hoạt động ngay sidebar hoặc popup chat (Ctrl/Cmd + L) để giúp bạn làm việc với codebase chỉ qua ngôn ngữ tự nhiên (docs.cursor.com).

Tính năng nổi bật: đọc file, phân tích project, chỉnh sửa code, chạy lệnh terminal, tạo checkpoint và quản lý tab chat độc lập.

2.3.1. Agent Mode

Đây là chế độ mặc định và toàn quyền nhất của Agent, tự động vào vai “developer AI” để:

  • Tự thực hiện: khám phá codebase, lập kế hoạch, và sửa code tự động .
  • Dùng tất cả công cụ: tìm kiếm, đọc/viết file, chạy terminal, tra web (docs.cursor.com).
  • Quy trình gồm: hiểu yêu cầu → khám phá → lập kế hoạch → thực thi → kiểm tra lỗi & fix → tạo checkpoint → tóm tắt .
  • Trường hợp sử dụng: thêm chức năng mới (VD: toggle dark mode), tối ưu API, refactor đa file, debug hoặc khởi tạo project .

2.3.2. Ask Mode

Chế độ chỉ đọc, không tự động sửa hoặc chạy lệnh:

  • Thích hợp để khám phá codebase, hỏi — không sửa đổi bất cứ thứ gì (docs.cursor.com).
  • Cấu hình: chọn model, bật chế độ tìm kiếm codebase để AI hiểu thêm ngữ cảnh (docs.cursor.com).

2.3.3. Manual Mode

Chế độ chỉnh sửa có mục tiêu, kiểm soát chặt:

  • Bạn chỉ định rõ file/đoạn code cần thay đổi (dùng @file) và AI sẽ sửa đúng theo yêu cầu (docs.cursor.com).
  • Không tự động khám phá codebase hay chạy lệnh, chỉ tập trung vào edit & reapply.
  • Thích hợp khi bạn biết chính xác bản thân cần chỉnh gì, ở đâu, và muốn kiểm soát tuyệt đối mỗi thay đổi (docs.cursor.com).

2.3.4. Custom Mode

Cho phép bạn tạo chế độ tùy chỉnh riêng theo workflow:

  • Cách tạo: bật trong Settings → Chat → Custom Modes, sau đó thêm mới tên, icon, phím tắt, chọn tool và viết prompt mặc định (docs.cursor.com).
  • Có thể lưu file .cursor/modes.json để chia sẻ cấu hình, phần này cursor giới thiệu trên trang chủ nhưng hiện tại thời điểm viết bài này thì nó chưa work, nên chúng ta sẽ làm thủ công tạo custom mode sẽ được trình bày ở cuối bài viết này.
  • Các ví dụ:
    • Learn: chỉ giải thích, không sửa code.
    • Refactor: chỉnh code nhưng không thêm chức năng.
    • Plan: tạo plan chi tiết, ghi ra plan.md.
    • Research: tra web & codebase rồi gợi ý.
    • Yolo: làm liều, auto-apply & auto-run.
    • Debug: tìm lỗi sâu, tra terminal rồi sửa (docs.cursor.com, docs.cursor.com).
  • Phân biệt với Rules:
    • Rule – xác định WHAT & WHY (hướng dẫn hệ thống).
    • Custom Mode – xác định HOW (công cụ & phong cách thực hiện) (forum.cursor.com).

2.3.5. Cách chọn model AI phù hợp với từng công việc

Một số model thường sử dụng:

Cursor cũng cung cấp nhiều Model AI khác nhau để lựa chọn, tùy thuộc vào nhu cầu cụ thể:

  • Fast coding, refactoring: Phù hợp cho các task viết code nhanh và không phức tạp.
    • GPT-4o
    • GPT-4.1
    • Claude Sonnet 3.5
    • Claude Sonnet 3.7
    • Gemini 2.0 Flash
  • Reasoning/planning: Thích hợp cho các tác vụ yêu cầu suy luận và lập kế hoạch phức tạp.
    • Claude Sonnet 3.7 Thinking
    • Claude Sonnet 4.0 Thinking
    • Claude Opus 4.0 Thinking
    • o1
    • o3-mini
    • Gemini 2.5 Pro

Với một số công việc không cần quá phức tạp chúng ta nên sử dụng những model Fast để tiết kiệm tài nguyên và chi phí.

2.3.6. Cách chọn mode phù hợp với từng công việc

  • Agent Mode: Thực hiện tác vụ phức tạp (refactor đa file, thêm feature, debug nâng cao). Agent tự động khám phá codebase, lập kế hoạch, sửa code và chạy terminal.
  • Ask Mode (Chat): Khi bạn muốn tìm hiểu, ask, planning, hoặc hỏi ý nghĩa code mà không sửa gì hết. Ask Mode là chế độ đọc, chỉ trả lời & giải thích.
  • Manual Mode: Khi bạn biết chính xác file và đoạn code cần sửa. Manual không tự tìm file hay chạy terminal – chỉ sửa theo chỉ định rõ ràng cùng @file .
  • Custom Mode:
    • Khi workflow của bạn là: học, refactor, plan, research, debug, review code… cần cách thể hiện và công cụ khác nhau.
    • Ví dụ: Learn Mode (chỉ giải thích), Refactor Mode (chuyển code), Yolo Mode (auto apply & run)…

So sánh tổng quan

Công việc Mode đề xuất Lý do lựa chọn
Thêm tính năng mới, refactor lớn Agent Mode Tự động hóa nhiều bước, chạy terminal
Học, giải thích code, plan Ask Mode Không sửa code, chỉ trao đổi & hiểu
Sửa đoạn code cụ thể, chính xác Manual Mode Kiểm soát từng thay đổi, explicit context
Workflow chuyên biệt (e.g. test, debug) Custom Mode Tùy cấu hình tool & prompt phù hợp

2.3.7. Cách sử dụng custom mode

Về cơ bản thì custom mode giúp chúng ta có thể switch nhanh mode với một mẫu prompt, mode, tools đã định sẵn giúp cho có thể sử dụng nhanh hơn, tiết kiệm thời gian prompt.

Ví dụ về một case review code như sau:

Giả sử chúng ta phải review code ở local mà không có công cụ review trực tiếp trên pull request như copilot code review. Phải xử lý review code ở local, công việc này lặp đi lặp lại bây giờ chúng ta sẽ tạo một custom mode dành riêng cho việc code review:

Bước 1: Tạo một custom mode mới

Bước 2: Cài đặt mode

Bước 3: Chọn model, tools phù hợp, điền nội dung prompt

Ví dụ nội dung prompt về review code như sau:

 You are a senior code-review assistant. The user will supply two branch names (for example “feature/x” and “develop”). Your job is to:

  0.**High-Level Summary**

     In 2–3 sentences, describe:

     –**Product impact**: What does this change deliver for users or customers?

     –**Engineering approach**: Key patterns, frameworks, or best practices in use.

  1.**Fetch and scope the diff**

     – Run `git fetch origin` and check out the remote branches (`origin/feature/x`, `origin/develop`) to ensure you have the absolute latest code.

     – Compute `git diff –name-only –diff-filter=M origin/develop…origin/feature/x` to list only modified files.

     – For each file in that list, run `git diff –quiet origin/develop…origin/feature/x — <file>`; skip any file that produces no actual diff hunks.

  2.**Evaluation Criteria**

     For each truly changed file and each diffed hunk, evaluate only those lines against:

     -**Design & Architecture**: Verify the change fits your system’s architectural patterns, avoids unnecessary coupling or speculative features, enforces clear separation of concerns, and aligns with defined module boundaries.

     -**Complexity & Maintainability**: Ensure control flow remains flat, cyclomatic complexity stays low, duplicate logic is abstracted (DRY), dead or unreachable code is removed, and any dense logic is refactored into testable helper methods.

     -**Functionality & Correctness**: Confirm new code paths behave correctly under valid and invalid inputs, cover all edge cases, maintain idempotency for retry-safe operations, satisfy all functional requirements or user stories, and include robust error-handling semantics.

     -**Readability & Naming**: Check that identifiers clearly convey intent, comments explain*why* (not*what*), code blocks are logically ordered, and no surprising side-effects hide behind deceptively simple names.

     -**Best Practices & Patterns**: Validate use of language- or framework-specific idioms, adherence to SOLID principles, proper resource cleanup, consistent logging/tracing, and clear separation of responsibilities across layers.

     -**Test Coverage & Quality**: Verify unit tests for both success and failure paths, integration tests exercising end-to-end flows, appropriate use of mocks/stubs, meaningful assertions (including edge-case inputs), and that test names accurately describe behavior.

     -**Standardization & Style**: Ensure conformance to style guides (indentation, import/order, naming conventions), consistent project structure (folder/file placement), and zero new linter or formatter warnings.

     -**Documentation & Comments**: Confirm public APIs or complex algorithms have clear in-code documentation, and that README, Swagger/OpenAPI, CHANGELOG, or other user-facing docs are updated to reflect visible changes or configuration tweaks.

     -**Security & Compliance**: Check input validation and sanitization against injection attacks, proper output encoding, secure error handling, dependency license and vulnerability checks, secrets management best practices, enforcement of authZ/authN, and relevant regulatory compliance (e.g. GDPR, HIPAA).

     -**Performance & Scalability**: Identify N+1 query patterns or inefficient I/O (streaming vs. buffering), memory management concerns, heavy hot-path computations, or unnecessary UI re-renders; suggest caching, batching, memoization, async patterns, or algorithmic optimizations.

     -**Observability & Logging**: Verify that key events emit metrics or tracing spans, logs use appropriate levels, sensitive data is redacted, and contextual information is included to support monitoring, alerting, and post-mortem debugging.

     -**Accessibility & Internationalization**: For UI code, ensure use of semantic HTML, correct ARIA attributes, keyboard navigability, color-contrast considerations, and that all user-facing strings are externalized for localization.

     -**CI/CD & DevOps**: Validate build pipeline integrity (automated test gating, artifact creation), infra-as-code correctness, dependency declarations, deployment/rollback strategies, and adherence to organizational DevOps best practices.

     -**AI-Assisted Code Review**: For AI-generated snippets, ensure alignment with your architectural and naming conventions, absence of hidden dependencies or licensing conflicts, inclusion of tests and docs, and consistent style alongside human-authored code.

  3.**Report issues in nested bullets**

     For each validated issue, output a nested bullet like this:

     – File: `<path>:<line-range>`

       – Issue: [One-line summary of the root problem]

       – Fix: [Concise suggested change or code snippet]

  4.**Prioritized Issues**

Title this section `## Prioritized Issues` and present all bullets from step 3 grouped by severity in this order-Critical, Major, Minor, Enhancement-with no extra prose:

     ### Critical

     – …

     ### Major

     – …

     ### Minor

     – …

     ### Enhancement

     – …

  5.**Highlights**

 After the prioritized issues, include a brief bulleted list of positive findings or well-implemented patterns observed in the diff.

Throughout, maintain a polite, professional tone; keep comments as brief as possible without losing clarity; and ensure you only analyze files with actual content changes.

Bước 5: prompting

Cuối cùng chúng ta chỉ việc nhập 2 branch: FROM – TO và nhận kết quả.

2.4. Inline Edit

Inline Edit (nhấn Ctrl/Cmd + K) là tính năng mạnh mẽ giúp bạn sửa hoặc tạo code ngay trong file hiện tại bằng ngôn ngữ tự nhiên, hiệu quả như bạn đang làm việc trực tiếp trong trình soạn thảo.

Cách sử dụng

  • Để chỉnh sửa code có sẵn: bôi chọn đoạn code cần thay đổi rồi nhấn Ctrl/Cmd + K để mở Prompt Bar.
  • Để tạo code mới: nếu không bôi chọn, chỉ cần nhấn Ctrl/Cmd + K và mô tả đoạn code muốn thêm.
  • Lệnh khác trong Inline Edit:
    • Nhấn Ctrl/Cmd + Shift + Enter để chỉnh sửa toàn file.
    • Nhấn Ctrl/Cmd + L để gửi đoạn code vào chế độ Agent (multi-file, phức tạp hơn) (docs.cursor.com).

Ví dụ minh họa

Ví dụ 1 – Tự động tối ưu hàm JavaScript:

function sum(a, b) {

  return a + b

}

  • Bôi chọn hàm trên, nhấn Ctrl + K, nhập:
    “Thêm kiểm tra kiểu số và xử lý lỗi nếu không phải số”
  • Cursor sẽ tự chỉnh lại, thêm ifthrow, bạn chỉ việc nhấn Enter.
Ví dụ 2 – Tạo component React mới:
  • Không chọn gì, nhấn Ctrl + K, nhập:
    “Tạo component React called Button props label, onClick
  • Cursor sinh sẵn JSX component:

function Button({ label, onClick }) {

  return <button onClick={onClick}>{label}</button>;

}

Tính năng nổi bật

  • Chỉnh sửa hoặc tạo code ngay tại chỗ giúp giữ context và tiết kiệm thời gian (medium.com).
  • Prompt Bar hỗ trợ @ để attach context, sử dụng file liên quan hoặc docs có sẵn (docs.cursor.com).
  • Phù hợp từ việc refactor nhỏ đến tạo mới, hoặc thêm documentation, unit test…
  • Có UI mới hỗ trợ chỉnh file toàn diện và gửi sang Agent khi cần (cursor.com).

Mẹo dùng hiệu quả

  • Kết hợp với multi-file Agent: khi cần chỉnh nhiều file cùng lúc, dùng Ctrl + L để truyền prompt vào Agent.
  • Tùy chỉnh phím tắt nếu bạn muốn dùng phím khác thay Ctrl/Cmd + K (forum.cursor.com, docs.cursor.com).
  • Tách bạch đoạn chỉnh rõ ràng: nếu Cursor vô tình sửa lung tung, bạn có thể copy đoạn target, dùng inline edit với prompt rõ ràng như “chỉ thêm phần X, giữ nguyên phần Y” (forum.cursor.com).
  • Sử dụng full file edit (Ctrl + Shift + Enter) để chỉnh nhanh toàn bộ file khi cần thay đổi cấu trúc lớn (forum.cursor.com).

2.5. ✨ AI Commit Message

Cursor cung cấp tính năng tự động tạo message cho Git commit dựa trên diff của các file đã stage. Khi bạn nhấn vào biểu tượng ✨ Sparkle kế bên ô nhập message trong tab Git, Cursor sẽ phân tích các thay đổi hiện tại và lịch sử commit để tạo ra một commit message phù hợp với phong cách của dự án (docs.cursor.com).

🛠️ Cách sử dụng

  1. Stage các file cần commit.
  2. Mở Git tab trong sidebar của Cursor.
  3. Bên cạnh ô nhập commit message sẽ có biểu tượng .
  4. Nhấn vào biểu tượng này – Cursor sẽ tự phân tích diff và lịch sử để đề xuất một commit message phù hợp (docs.cursor.com).
  5. Bạn có thể chỉnh lại nội dung nếu cần, sau đó nhấn Commit.

⌨️ Shortcut

Muốn nhanh hơn, bạn có thể thiết lập phím tắt cho lệnh cursor.generateGitCommitMessage:

{

  “key“: “cmd+m”,

  “command“: “cursor.generateGitCommitMessage”

}

– Sau đó chỉ cần nhấn ⌘M trên macOS khi đang ở Git tab để tạo message nhanh (docs.cursor.com).

Hiệu quả & hạn chế

✅ Ưu điểm

  • Tự động tạo message từ diff và lịch sử commit, giúp nhất quán với phong cách commit đã có .
  • Chi tiết hơn so với các giải pháp AI commit khác, kèm bullet list rõ ràng (blog.openreplay.com).
  • Tích hợp ngay trong tab Git, không cần copy-paste diff (forum.cursor.com).

⚠️ Hạn chế

  • Không thể tùy chỉnh prompt đầu vào (về kiểu Conventional Commits, style message, keywords…) ở thời điểm hiện tại (docs.cursor.com).
  • Đã có feature request để thêm khả năng tùy chỉnh prompt hoặc dùng loại commit format (ví dụ: Conventional Commits) .

🛠 Triển khai thêm (workaround)

  • Có thể dùng @commit trong Chat panel:
    • Mở Chat, gõ @Commit (Diff of Working State) , Cursor sẽ generate message dựa trên diff hiện có (reddit.com).

Tóm lược

  • Cursor cho phép bạn tạo AI-generated commit message chỉ với một cú nhấn ✨.
  • Phân tích diff & lịch sử commit để tạo message phù hợp với phong cách codebase.
  • Tích hợp trong Git tab + có thể bind phím tắt để thao tác nhanh.
  • Hiện chưa hỗ trợ tùy chỉnh prompt – nhưng đang trong radar feature request.
  • Có thể sử dụng qua @commit nếu muốn linh hoạt hơn.

Kết luận

Với sự kết hợp giữa nền tảng VS Code quen thuộc và sức mạnh của AI, Cursor đang mở ra một cách tiếp cận mới trong việc phát triển phần mềm: nhanh hơn, thông minh hơn và ít lỗi hơn. Những tính năng như Tab Completion, Smart Rewrites hay Agent Mode không chỉ hỗ trợ viết code hiệu quả, mà còn thay đổi cách lập trình viên tương tác với codebase hàng ngày.

Trong phần tiếp theo, chúng ta sẽ cùng khám phá những phần hay ho tiếp theo về Context & indexing, cách thiết lập rule, prompting hiệu quả, từ cài đặt ban đầu đến cách tích hợp vào quy trình làm việc thực tế.

————————————————————————

PHẦN 2.

Sau khi đã tìm hiểu tổng quan về Cursor và các tính năng nổi bật như Tab Completion, Smart Rewrites hay Agent Mode, phần tiếp theo sẽ tập trung vào việc sử dụng Cursor trong thực tế dự án. Đây là những nội dung quan trọng nếu bạn muốn tận dụng hết sức mạnh của AI tích hợp trong Cursor để cải thiện hiệu suất làm việc cá nhân hoặc cộng tác theo nhóm.

Trong phần này, bài viết sẽ lần lượt hướng dẫn ba trụ cột chính giúp bạn tối ưu hóa trải nghiệm làm việc với Cursor:

  1. Context & Indexing – cách Cursor hiểu và sử dụng toàn bộ codebase để trả lời chính xác theo ngữ cảnh.
  2. Rule – Thiết lập quy tắc làm việc – tạo các quy định riêng cho dự án như chuẩn code, cách đặt tên, cách viết commit… để AI làm việc theo đúng tiêu chuẩn của team.
  3. Nâng cao / Tối ưu workflow – cấu hình quy trình làm việc thông minh, tích hợp hệ thống nội bộ, chia sẻ rule và thiết lập môi trường thống nhất giữa các thành viên.
  4. Prompting hiệu quả.

Nếu bạn là người mới bắt đầu, phần này sẽ giúp bạn nắm rõ cách cấu hình và áp dụng Cursor một cách bài bản. Còn nếu bạn là người đã có kinh nghiệm, đây sẽ là cơ hội để khám phá các cách tùy chỉnh nâng cao nhằm khai thác tối đa khả năng của công cụ này.

Chúng ta sẽ bắt đầu với Context & Indexing – một phần rất quan trọng giúp Cursor hiểu được toàn bộ dự án và cung cấp gợi ý chính xác hơn.

1. Context & indexing

1.1. Codebase Indexing để Cursor hiểu toàn bộ repo

  • Mục đích: Cursor đánh chỉ mục toàn bộ workspace của bạn bằng cách tạo embedding (vector) cho mỗi tệp, giúp AI hiểu và phản hồi chính xác hơn khi bạn dùng các tính năng như @Codebase hoặc chat ⌘+Enter (docs.cursor.com).
  • Tự động hóa: Khi mở dự án, Cursor tự khởi tạo và cập nhật chỉ mục. Sau lần đầu, mọi tệp mới thêm cũng sẽ được tự động index (docs.cursor.com).
  • Hiệu năng:
    • Sử dụng cấu trúc Merkle tree và caching để chỉ tải lại tệp thay đổi — tiết kiệm băng thông và thời gian (read.engineerscodex.com).
    • Đối với dự án lớn, sử dụng .cursorignore hoặc cấu hình ignore để loại bỏ các file không cần thiết, tăng hiệu quả (docs.cursor.com).
  • Quy mô: Người dùng Pro được index đến 50k tệp, Business là 250k. Dữ liệu bị xóa sau 6 tuần không sử dụng, và có thể tái-index nếu mở lại (docs.cursor.com).

1.2. Quản lý context bằng @file, @Web, @Library

Cursor cung cấp nhiều phương thức để thêm context vào prompt, giúp AI hiểu rõ hơn về dự án:

a) @file / @Files / @Code

  • @file hoặc @Files để chọn tệp cụ thể làm ngữ cảnh — hiển thị preview để lựa chọn chính xác (forum.cursor.com, cursorpractice.com).
  • Nếu tệp quá dài, Cursor sẽ tách thành các chunk nhỏ (full/outline/chunks) và chọn phần liên quan nhất (cursorpractice.com).
  • @Code dùng để chèn snippet code cụ thể từ editor vào chat hoặc prompt ⌘+K (cursorpractice.com).

b) @Web

  • Khi dùng @Web, Cursor tự động xây dựng query và thực hiện tìm kiếm trên internet để lấy thông tin mới nhất, hữu ích khi bạn cần refer tài liệu, ví dụ cập nhật API hoặc tìm pattern (cursorpractice.com).

c) @Docs

  • Cursor có sẵn thư viện tài liệu công khai. Bạn cũng có thể thêm URL docs riêng và index chúng để dùng trong chế độ @Docs, giúp khi cần dùng docs nội bộ hoặc của bên thứ ba — sử dụng ngay trong editor (cursorpractice.com).

d) @Library, @Folders, @Git, @Chat, @Definitions

  • @Folders: dùng trong chat để thêm toàn folder làm context.
  • @Git: thêm commit, diff vào prompt để AI xem xét.
  • @Chat & @Definitions: chèn tin nhắn chat trước đó hoặc định nghĩa gần đó vào prompt (cursorpractice.com).

2. Rule – thiết lập quy tắc

2.1. Khái niệm về rules (.cursor/rules, định dạng .mdc)

  • Rules là các file cấu hình hướng dẫn AI hoạt động trong dự án, giúp đảm bảo tương đồng về style, chuẩn kiến trúc hoặc quy tắc đặc thù.
  • Các file đặt trong thư mục .cursor/rules/, với phần frontmatter metadata (YAML-like) đầu file gồm: description, globs, alwaysApply (docs.cursor.com, cursor101.com).
  • File .mdc (Markdown Cursor) là file markdown có metadata để Cursor hiểu và xử lý; không phải XML mà là markdown bình thường với phần frontmatter ở đầu (forum.cursor.com).

2.2. Các loại rule

Cursor hỗ trợ 4 loại rule khác nhau (docs.cursor.com):

Loại Frontmatter Hành vi
Always alwaysApply: true Luôn được nạp vào AI context, lặp lại trong mỗi prompt.
Auto-Attached globs: […] Tự gắn khi file matching được mở hoặc đính kèm.
Agent-Requested description: “…” Có thể được Agent tự yêu cầu khi cần, phải có description.
Manual Không có globs hoặc alwaysApply Chỉ dùng khi bạn explicit dùng @ruleFile.mdc trong chat.
  • Thứ tự ưu tiên áp dụng rule: Manual > Auto-Attached > Agent-Requested > Always (reddit.com, github.com).

2.3. Cách tạo rule, nested rules, lưu và best practices

🛠 Cách tạo

  • Sử dụng UI: Cmd/Ctrl + Shift + P → “New Cursor Rule”. Editor sẽ tạo file .mdc với metadata mặc định (github.com).
  • Hoặc tự tạo file .mdc trong .cursor/rules/, với cấu trúc:

description: “Miêu tả tác dụng của rule”

globs:

  – “src/**/*.py”

alwaysApply: false

– Ví dụ: Luôn sử dụng snake_case cho tên biến Python

– Thêm hướng dẫn refactor cụ thể

  • Sử dụng YAML trong frontmatter; nội dung dưới dạng markdown liệt kê các hướng dẫn cụ thể (forum.cursor.com, apidog.com).

🔗 Nested rules

  • Rules có thể tham khảo file khác bằng @file path/to/other.rule.mdc để kết nối ngữ cảnh (cursor101.com).

Lưu & version

  • ➜ Đặt .mdc trong thư mục .cursor/rules/, nằm trong quản lý version control.
  • Có thể tự động chuyển từ file .cursorrules cũ sang .mdc với script hoặc UI (apidog.com).
  • Với nhiều file .mdc, Metadata globsdescription cần rõ ràng, tránh xung đột về luồng áp dụng rule (forum.cursor.com).

2.3. Best Practices

  • Đặt tên file theo quy tắc rõ ràng, ví dụ 001-core-security.mdc, 100-api-integration.mdc, 200-data-validation.mdc để kiểm soát thứ tự (forum.cursor.com).
  • Sử dụng YAML cho metadata vì trực quan hơn và hỗ trợ comment .
  • Metadata rõ ràng:
    • description giúp Agent Requested quyết định dùng rule nào.
    • globs để auto-attach rule đúng file.
    • Giữ alwaysApply chỉ khi rule áp dụng toàn bộ dự án.
  • Dùng UI để tạo rule tránh lỗi không có frontmatter hoặc định dạng sai (forum.cursor.com).
  • Khi cần rule meta (rule tạo rule), dùng file .mdc đặc biệt, ví dụ rule-generating-agent.mdc (reddit.com).

2.4. Tóm tắt:

  • File .mdc với frontmatter description, globs, alwaysApply.
  • 4 loại rule: Always, Auto-Attached, Agent-Requested, Manual.
  • Tạo file đúng thư mục, metadata nên rõ ràng, sắp xếp và nested nếu cần.
  • Best practices: đặt tên có thứ tự, dùng YAML, tạo qua UI để đảm bảo format, dùng nested rule khi cần chia nhỏ.

2.5. Áp dụng rule trong thực tế

2.5.1. Tìm rule chuẩn ở đâu và sử dụng loại rule nào?

Thư viện cộng đồng & mẫu tham khảo
  • Repos như awesome-cursorrules trên GitHub cung cấp nhiều mẫu rule chuẩn (ví dụ git-conventional, framework-specific) (github.com).
  • Cộng đồng Cursor (forums) chia sẻ best practices, ví dụ file tổ chức theo thư mục module hoặc nested rules .
  • Bài viết từ Trigger.dev hoặc PromptHub cũng liệt kê các rule mẫu (.mdc) đáng tham khảo (prompthub.us).
  • Đối với những dự án đang chạy rồi có thể tạo rule bằng cách revert từ code trong project.
Sử dụng loại rule nào?
  • Always Rule: Luôn áp dụng cho mọi prompt và mọi file trong dự án – ví dụ chuẩn code cơ bản, bảo mật hoặc style chung.
  • Auto‑Attached Rule: Khi rule chỉ áp dụng cho một hoặc vài folder/type file nhất định. Ví dụ enforce format cho source hoặc component.
  • Agent‑Requested Rule: Rule dùng khi AI cảm thấy phù hợp với task hiện tại, ví dụ nâng cấp style, refactor nhỏ.
  • Manual Rule: Khi bạn muốn bật rule chỉ khi explicit yêu cầu – rule không tự apply hoặc được gắn theo file hay task cụ thể.

2.5.2. Áp dụng vào trong dự án

Sau khi chúng ta đã biết cách tạo rule rồi bây giờ sẽ triển khai nội dung với dự án thì thế nào? dưới đây là các bước triển khai:

  • Tạo ra folder rule và file rule cần thiết: tham khảo cách tạo rule của tác giả BMadCode hoặc có thể tự tạo folder rule theo dự án. https://github.com/bmadcode/cursor-custom-agents-rules-generator/tree/main/.cursor
  • Tạo thư mục .cursor/rules trong root của dự án nếu chưa có.
  • Copy hoặc viết mới các file .mdc rule vào thư mục này, theo từng chủ đề như jsrules.mdc, ui-guidelines.mdc, commit-message.mdc, v.v.
  • Tag rule vào agent bằng cách nhập @.cursor/rules/folder/tên-rule.mdc trong thanh chat hoặc thiết lập sẵn trong chế độ Agent sau đó prompt.
  • Kiểm tra agent đã nhận đúng rule bằng cách nhờ AI liệt kê các rule đang hoạt động (/agent rules hoặc hỏi trực tiếp trong chat).

3. Nâng cao / Tối ưu workflow

3.1. Compose workflows tự động (project_config.md, workflow_state.md)

  • Mục tiêu: Xây dựng hệ thống AI tự động theo vòng lặp “đọc → quyết định → thực hiện → cập nhật”, quản trị trạng thái dự án và công việc bằng file Markdown.
  • project_config.md: Chứa thông tin cấu hình dự án dài hạn (stack, domain, các role…).
  • workflow_state.md: Ghi lại trạng thái hiện tại, plan, log, và checklist công việc (todo). Agent đọc file này, thực hiện theo state và cập nhật sau mỗi bước. (forum.cursor.com)
  • Ví dụ prompt:

You are an autonomous AI developer…

Sources of truth:

– instructions.md

– project_config.md

– workflow_state.md

Follow loop:

  1. Read state
  2. Consult project context
  3. Act via Cursor
  4. Update state

Lợi ích: Tự động hóa trình xử lý tác vụ tuần tự, giữ context giữa bước, tránh drift, dễ revert.

3.2. Tích hợp MCP servers

  • MCP servers: Kết nối các service bên ngoài (ví dụ weather, database, testing framework, Figma), qua mcp.json trong settings. Cursor tự chọn server phù hợp điểm prompt. (medium.com)
    • Ví dụ kết nối Playwright/FM/CD DuckDuckGo để test UI, fetch data…
    • MCP giúp mở rộng khả năng Agent dùng external APIs.
    • Tìm hiểu các MCP https://mcp.so/

3.3. Gợi ý thiết lập workspace & share rules/modes nội bộ

  • Workspace: Tạo modes.json hoặc .cursor/rules/.cursor/modes.json để chia sẻ rule và mode trong team. (cursor.directory, gist.github.com, docs.cursor.com)
  • Rule share:
    • Global: đặt trong user folder .cursor/rules
    • Project: .cursor/rules/*.mdc
    • Tùy chỉnh theo module để tăng tính linh hoạt, tránh lắp tất cả rules vào 1 file (gist.github.com, kirill-markin.com)
  • Mode share: Ví dụ Learn, Refactor, Plan, Debug… lưu vào .cursor/modes.json, version vào git để đồng đội dùng chung.
  • Tham khảo cách cài đặt của BmadCode https://github.com/bmadcode/BMAD-METHOD

Dưới đây là phiên bản cập nhật, bao gồm best practiceprompt mẫu thực tế, giúp bạn tận dụng tối đa Cursor AI 🚀

4. Best practice khi viết prompt với cursor

4.1. Quản lý ngữ cảnh rõ ràng

  • Dùng @file/path hoặc @Code thay vì @codebase để giới hạn scope rõ ràng ([docs.cursor.com][1]).
  • Chỉ đưa vào những file hoặc đoạn code cần thiết, để tránh tràn token và giữ focus.

4.2. Cấu trúc prompt theo bước

  • Bắt đầu bằng system prompt rõ vai trò (“You are an expert in X”), giảm khả năng hallucination ([fatcatcoders.com][2]).
  • Sử dụng mô hình “Plan → Code → Test → Refactor”:
  1. Yêu cầu AI vẽ plan.
  2. Yêu cầu viết code theo plan.
  3. Viết test trước rồi code.
  4. Chạy test & refine ([builder.io][3]).

4.3. Tận dụng YOLO mode & TDD

  • Bật YOLO mode, cho phép Cursor tự chạy command build/test ([builder.io][3]).
  • Áp dụng TDD: “Write tests first, then code, run tests, iterate until passing” ([builder.io][3]).

4.4. Sử dụng Rules & Prompt Templates

  • Định nghĩa rule trong .cursor/rules/*.mdc để đưa tiêu chuẩn code vào ngữ cảnh ([docs.cursor.com][1]).
  • Có thể dùng /Generate Cursor Rules để tạo rule từ chat ([docs.cursor.com][1]).
  • Tạo templates reusable như request.md, refresh.md, retro.md để áp dụng workflow chuẩn ([gist.github.com][4]).

4.5. Kỹ thuật nâng cao

  • Chain‑of‑Thoughtfew‑shot prompting để hướng dẫn AI lập luận hoặc định dạng đầu ra cụ thể ([extremelysunnyyk.medium.com][5]).
  • Khi cần debug: yêu cầu thêm logging, chạy và paste output để AI phân tích ([siddharthbharath.com][6]).

4.6. Prompt mẫu thực tế

Ví dụ 1: Giả sử bạn cần tạo màn hình login bằng Android Native với *Kotlin + Jetpack Compose + ViewModel + StateFlow + Validation*:

@/app/src/main/java/com/example/auth/ui/LoginScreen.kt

@/app/src/main/java/com/example/auth/viewmodel/LoginViewModel.kt

@/app/src/main/java/com/example/auth/state/LoginUiState.kt

@/app/src/test/java/com/example/auth/LoginViewModelTest.kt

System: You are a senior Android developer. You use Jetpack Compose with MVVM architecture. All business logic goes inside a `ViewModel`, UI observes `StateFlow`. The code should be modular, testable, and follow Android best practices.

Plan:

  1. Create a `LoginScreen.kt`:

   – Email and password `OutlinedTextField`

   – `Login` button

   – Validation errors below each field

   – Show loading indicator while logging in

  1. Create `LoginViewModel`:

   – Expose `StateFlow<LoginUiState>`

   – Handle input updates + login event

   – Simulate login success/failure

  1. Create `LoginUiState` data class:

   – email, password, isLoading, errorMessage, isLoggedIn

  1. Write unit tests for `LoginViewModelTest`:

   – Test input changes

   – Test successful login

   – Test login error

Code:

– Implement `LoginUiState.kt` as a sealed or data class

– Implement `LoginViewModel.kt` using `StateFlow`, no Compose inside ViewModel

– Implement `LoginScreen.kt` using `collectAsState()` and Compose best practices

Add preview composable for `LoginScreen`

In test, use `Turbine` or `runTest` for collecting flows

YOLO mode is enabled: You can run tests, create files, refactor, and fix until test passes.

Log & Debug: If any test fails or state does not update, show logs, explain cause, and fix.

Summary: At the end, summarize all changed files, states, and test results.

Why it works

  • Ngữ cảnh đúng file giúp AI tập trung.
  • Plan first giảm sự mơ hồ.
  • Test‑first + YOLO tăng độ tin cậy và tự động hoá.
  • Cấu trúc rõ ràng hỗ trợ debug, refactor, chất lượng code.

Ví dụ 2: Giả sử bạn muốn xử lý tính năng **login bằng API sử dụng NestJS (Node.js backend), theo chuẩn kiến trúc RESTful, sử dụng **JWT, **Validation, **Service layer, và **Testing:

@/src/auth/auth.controller.ts

@/src/auth/auth.service.ts

@/src/auth/dto/login.dto.ts

@/src/auth/strategies/jwt.strategy.ts

@/src/auth/auth.module.ts

@/test/auth/auth.service.spec.ts

System: You are a senior backend developer using NestJS. You follow clean architecture with modules, DTOs, services, and guards. You must write secure, testable code for authentication using JWT.

Plan:

  1. Create `LoginDto` in `dto/login.dto.ts`:

   – Fields: `email` (must be email), `password` (min 6 chars)

   – Use `class-validator` decorators

  1. Create `AuthService` with method `validateUser()` and `login()`:

   – Validate credentials

   – On success: return `{ accessToken }` with JWT

  1. Create `AuthController`:

   – POST `/auth/login` endpoint

   – Use `@Body() LoginDto`

   – Return token using `authService.login()`

  1. Use `JwtModule` to generate JWT

   – Set secret, expiry

   – Configure `JwtStrategy` for protected routes (optional)

  1. Write unit tests for `AuthService`:

   – Test login success

   – Test invalid credentials

   – Use mocking for user repository

Code:

– Implement full login flow with validation and security

– Reuse NestJS standard modules like `JwtService`, `PassportModule`

– Ensure `bcrypt` is used to hash/compare passwords

Return proper status codes (200, 401)

YOLO mode is enabled: You can create new files, use `npm install`, run `npm test`, and fix test failures automatically.

Log & Debug: Show console logs or test outputs if validation fails. Retry until tests are green.

Summary: At the end, summarize all created files, main logic of `auth.service.ts`, and test results.

Kiến trúc file mẫu

File Vai trò
auth.controller.ts Xử lý request HTTP (POST /login)
auth.service.ts Logic xác thực, tạo JWT
login.dto.ts Validate đầu vào (email/password)
jwt.strategy.ts Chiến lược bảo vệ route sau login
auth.module.ts Register các dependency cần thiết
auth.service.spec.ts Kiểm thử login logic

Bạn có thể mở rộng tiếp:

  • Thêm register endpoint
  • Kết hợp 2FA (Google Authenticator)
  • Tạo refresh token + logout

Dưới đây là prompt mẫu dành cho Cursor, kết hợp với cách sử dụng rule đã định nghĩa sẵn trong project Android (Kotlin + Jetpack Compose). Prompt này vừa tận dụng sức mạnh của rule .mdc, vừa đảm bảo quy trình tạo tính năng rõ ràng, tự động và nhất quán.

Ví dụ 3: Giả sử bạn bạn cần tạo màn hình Login trong Android Compose, sử dụng Rule đã định nghĩa:

Giả sử đã có một rule sẵn tên là:

.cursor/rules/ui-rule/android-compose-ui-style.mdc

description: “Android login screen best practices using Jetpack Compose and ViewModel”

globs: [“*.kt”]

alwaysApply: false

– UI must follow Material 3 design

– Use ViewModel with StateFlow for all business logic

– No logic inside Composables

– Show error below input or as snackbar

– Use `collectAsState()` for observing UI state

Prompt thực tế:

@/app/src/main/java/com/example/auth/ui/LoginScreen.kt

@/app/src/main/java/com/example/auth/viewmodel/LoginViewModel.kt

@/app/src/main/java/com/example/auth/state/LoginUiState.kt

@/app/src/test/java/com/example/auth/LoginViewModelTest.kt

@android-compose-ui-style.mdc

System: You are an expert Android developer using Jetpack Compose. Please follow all coding style and logic rules defined in @android-compose-login-style.mdc.

Goal:

Build a fully functional Login screen including:

– Email and password input with validation

– Login button

– Error display under field or via snackbar

– Loading state when login is in progress

Architecture:

– All business logic must be in `LoginViewModel`

– Use `StateFlow<LoginUiState>` to drive the UI

– UI in `LoginScreen.kt` observes state via `collectAsState()`

– Login success/failure is handled through state changes

Tests:

Write `LoginViewModelTest.kt` to cover:

– Email/password updates

– Invalid input case

– Login success and error

YOLO mode is enabled: You may create files, run `./gradlew test`, and refactor as needed. Ensure tests pass and validation logic is covered.

Log & Debug: If validation or tests fail, show error logs and fix accordingly.

Summary: At the end, list what was added/changed, and summarize test results.

Giải thích

Thành phần Mục đích
@/… file Truy rõ các file cần tạo/sửa
@android-compose-ui-style.mdc Áp dụng rule đã định nghĩa trong project
System: Ràng buộc hành vi theo expert domain
Goal & Architecture Giao rõ logic chia layer
YOLO mode Cho phép AI tự động test/fix
Log & Debug Hướng dẫn AI fix khi gặp lỗi

Kết luận cuối cùng

Cursor không chỉ là một công cụ hỗ trợ viết mã, mà là một nền tảng lập trình thông minh có thể thích ứng theo phong cách làm việc của bạn. Khi được cấu hình đúng với context, rule, workflow, và prompt rõ ràng, Cursor sẽ không chỉ giúp bạn code nhanh hơn — mà còn code đúng hơn, đồng đều hơn và dễ bảo trì hơn.

Hãy xem Cursor như một đồng đội AI – người luôn nắm vững codebase, hiểu quy chuẩn team, và sẵn sàng hỗ trợ bạn từ việc viết mã, refactor, đến test và document.

Tối ưu công cụ – tăng tốc tư duy – chuẩn hóa phát triển.

Đó chính là giá trị thật sự khi làm chủ được Cursor.

✦ Cảm ơn bạn đã theo dõi đến đây (Thực ra bài này mình cũng dùng các công cụ AI để viết như ChatGpt, Cursor để gen ra ví dụ 😁😁😁)
✦ Còn rất nhiều công cụ hay ho khác mà cursor, copilot cung cấp nhưng mình không thể tổng hợp được hết.
✦ Chúc bạn và team khai thác Cursor thật hiệu quả trong những dự án sắp tới!

Top bài viết trong tháng

Scroll to Top

FORM ỨNG TUYỂN

Click or drag a file to this area to upload.
File đính kèm định dạng .docs/.pdf/ và nhỏ hơn 5MB