Tự động hoàn thành bằng phím Tab và chỉnh sửa trực tiếp trong Cursor

Hai công cụ nhanh nhất của bạn

🔄 Trong Bài học 2, bạn đã thiết lập Cursor, nhập cấu hình VS Code và làm quen với giao diện. Giờ đây, bạn sẽ học hai tính năng bạn sẽ sử dụng hàng trăm lần mỗi ngày: Tự động hoàn thành bằng phím Tab và chỉnh sửa trực tiếp.

Đây là những tính năng cốt lõi của Cursor. Chúng đủ nhanh để bạn không phải suy nghĩ nhiều khi sử dụng, và chúng xử lý phần lớn các tác vụ lập trình hàng ngày mà không cần mở cửa sổ trò chuyện hoặc khởi chạy agent.

Tự động hoàn thành bằng phím Tab: Chỉnh sửa dự đoán

Phím Tab của Cursor không phải là tính năng tự động hoàn thành tiêu chuẩn. Tính năng tự động hoàn thành tiêu chuẩn đề xuất từ ​​tiếp theo. Mô hình Tab của Cursor dự đoán thao tác chỉnh sửa tiếp theo của bạn.

Điều đó có nghĩa là gì trong thực tế?

Giả sử bạn vừa đổi tên một hàm từ getData thành fetchUserData. Tab có thể dự đoán rằng bạn cần cập nhật lệnh gọi hàm ở dòng 47, lệnh import ở dòng 3 và tham chiếu kiểm thử trong một file khác. Nó không chỉ hoàn thành các từ — nó dự đoán những gì bạn sắp làm dựa trên những gì bạn vừa thực hiện.

Cách hoạt động:

  1. Bạn bắt đầu gõ hoặc thực hiện thay đổi
  2. Cursor hiển thị gợi ý mờ (văn bản màu xám)
  3. Nhấn phím Tab để chấp nhận toàn bộ gợi ý
  4. Nhấn Ctrl+→ (mũi tên phải) để chấp nhận từng từ
  5. Nhấn phím Esc để bỏ qua

Mẹo chấp nhận từng từ thường bị đánh giá thấp. Khi gợi ý đúng 90% nhưng phần cuối sai, Ctrl+→ cho phép bạn chỉ chấp nhận phần đúng. Bạn không cần phải chọn giữa chấp nhận toàn bộ hoặc không chấp nhận gì cả.

Kiểm tra nhanh: Bạn đang viết một component React và vừa tạo một hook useState cho isLoading. Phím Tab có thể dự đoán điều gì tiếp theo? Nó có thể sẽ dự đoán lệnh gọi thiết lập trạng thái tương ứng (setIsLoading(true)) nơi bạn sẽ sử dụng nó, hoặc đề xuất mẫu hiển thị có điều kiện load ({isLoading && <Spinner />}). Phím Tab học các mẫu phổ biến — một khi bạn tạo một biến trạng thái, nó biết bạn sẽ sử dụng nó ở đâu đó.

Cải thiện khả năng dự đoán của Tab

Một vài mẫu giúp cải thiện khả năng dự đoán của Tab:

Bắt đầu với tên biến rõ ràng. Nếu bạn đặt tên hàm là handleSubmit, Tab sẽ dự đoán logic gửi biểu mẫu. Đặt tên là fn1, và Tab sẽ không có gì để làm việc.

Hãy viết chú thích trước. Gõ // Validate email format trước khi viết hàm, và Tab sẽ tạo ra logic xác thực. Chú thích sẽ cho nó biết mục đích.

Chỉnh sửa nhất quán. Nếu bạn đổi tên biến trong nhiều file, Tab sẽ học được mẫu sau lần đổi tên đầu tiên và dự đoán phần còn lại. Tương tự đối với việc chuyển đổi hàm gọi lại thành promise, thêm kiểu dữ liệu hoặc tái cấu trúc dữ liệu.

Đừng chống lại nó. Nếu Tab liên tục đề xuất điều gì đó bạn không muốn, hãy nhấn Esc và tiếp tục nhập thủ công. Nó sẽ điều chỉnh theo hướng của bạn.

Chỉnh sửa trực tiếp bằng Cmd+K

Tab phản ứng – nó dự đoán. Cmd+K chủ động – bạn điều khiển.

Đây là quy trình làm việc:

  1. Highlight đoạn code bạn muốn thay đổi (hoặc đặt Cursor vào vị trí bạn muốn thêm code mới)
  2. Nhấn Cmd+K (Mac) hoặc Ctrl+K (Windows)
  3. Nhập hướng dẫn của bạn bằng tiếng Anh thông thường
  4. Xem lại sự khác biệt — Cursor sẽ hiển thị chính xác những gì sẽ thay đổi
  5. Nhấn Cmd+Enter để chấp nhận, hoặc Esc để hủy bỏ

Ví dụ về các hướng dẫn hoạt động tốt:

Những gì bạn nhập Những gì Cursor làm
"Hãy chuyển đổi đoạn này sang async/await" Viết lại hàm từ các hàm callback hoặc chuỗi .then() thành async/await
"Thêm chức năng xử lý lỗi" Bao bọc đoạn code trong khối try/catch với các kiểu lỗi phù hợp
"Hãy chuyển đoạn này thành TypeScript" Thêm chú thích kiểu, giao diện và sửa lỗi kiểu dữ liệu
"Hãy đơn giản hóa điều này" Tái cấu trúc code dài dòng thành phiên bản gọn gàng hơn
"Thêm chức năng xác thực đầu vào cho email và mật khẩu" Thêm các bước kiểm tra xác thực trước khi thực thi logic hàm

Điểm khác biệt chính so với khung chat: Tổ hợp phím Cmd+K chỉnh sửa code trực tiếp và hiển thị sự khác biệt. Bạn thấy chính xác những thay đổi trước khi chấp nhận. Không cần sao chép-dán từ cửa sổ chat. Nó chính xác hơn nhiều.

Viết hướng dẫn nội tuyến tốt hơn

Chất lượng hướng dẫn Cmd+K của bạn ảnh hưởng trực tiếp đến chất lượng chỉnh sửa. Đây là những gì hiệu quả:

Hãy cụ thể, đừng mơ hồ:

Không rõ ràng (kết quả kém hơn) Cụ thể hơn (cho kết quả tốt hơn)
"Hãy sửa lỗi này" "Sửa lỗi kiểm tra giá trị null — xử lý trường hợp user.email không được định nghĩa"
"Thêm chức năng xử lý lỗi" "Thêm khối try/catch để thử lại lỗi mạng một lần, sau đó ném vào ngoại lệ"
"Hãy làm cho nó tốt hơn" "Thay thế cấu trúc if-else lồng nhau bằng mẫu trả về sớm"

Bao gồm các ràng buộc: "Chuyển đổi sang TypeScript nhưng giữ nguyên chữ ký hàm hiện có" hoặc "Thêm xác thực nhưng không thay đổi kiểu trả về."

Tham chiếu ngữ cảnh: "Khớp với mẫu xử lý lỗi trong auth.ts" cho Cursor biết tìm và sao chép một mẫu từ một file khác. Điều này hiệu quả hơn so với việc mô tả mẫu từ đầu.

Kiểm tra nhanh: Bạn có một hàm 50 dòng và chỉ muốn thay đổi dòng 20-25. Bạn nên chọn toàn bộ hàm hay chỉ những dòng đó để sử dụng Cmd+K? Chỉ chọn dòng 20-25. Cmd+K được thiết kế để chỉnh sửa chính xác. Chọn toàn bộ hàm có nghĩa là nó có thể thay đổi những thứ bạn không muốn. Vùng chọn càng nhỏ, việc chỉnh sửa càng tập trung.

Khi nào nên sử dụng tính năng nào?

Đây là một framework quyết định thực tế:

Tình huống Sử dụng
Bạn đang gõ và Cursor gợi ý từ tiếp theo phù hợp Tab — chỉ cần chấp nhận nó
Bạn muốn đổi tên, tái cấu trúc hoặc chuyển đổi code hiện có Cmd+K — highlight và hướng dẫn
Bạn cần tạo một hàm hoặc code block mới hoàn toàn từ đầu Cmd+K — đặt con trỏ, mô tả những gì bạn cần
Bạn đang thực hiện cùng một loại chỉnh sửa ở nhiều vị trí khác nhau Tab — nó học được quy luật sau lần chỉnh sửa đầu tiên
Việc chỉnh sửa đòi hỏi phải hiểu ngữ cảnh vượt ra ngoài phạm vi file hiện tại Chat (Cmd+L) — nội dung sẽ được đề cập trong bài học tiếp theo
Quá trình chỉnh sửa yêu cầu chạy các bài kiểm tra hoặc những lệnh trong terminal Agent mode (Cmd+I) — được đề cập trong Bài học 5

Hầu hết các nhà phát triển dành 70% thời gian sử dụng Cursor cho tổ hợp phím Tab và Cmd+K. Chat và Agent xử lý 30% còn lại — các tác vụ lớn, phức tạp hơn.

Những điểm chính cần ghi nhớ

  • Tính năng tự động hoàn thành bằng Tab dự đoán lần chỉnh sửa tiếp theo của bạn, không chỉ là từ tiếp theo — nó theo dõi các mẫu thao tác của bạn và dự đoán những thay đổi trên nhiều file.
  • Chấp nhận từng từ một bằng Ctrl+→ khi đề xuất gần đúng.
  • Cmd+K (chỉnh sửa trực tiếp) cho phép bạn mô tả các thay đổi bằng tiếng Anh đơn giản và xem lại sự khác biệt trước khi chấp nhận.
  • Các hướng dẫn cụ thể sẽ cho kết quả tốt hơn: "Thêm khối try/catch để thử lại lỗi mạng" tốt hơn "thêm xử lý lỗi".
  • Sử dụng Tab để làm việc theo luồng, Cmd+K để chỉ đạo các thay đổi cụ thể.

Hãy thử: Gợi ý chỉnh sửa chính xác bằng Cmd+K

Mở Cursor. Highlight các dòng bạn muốn thay đổi, nhấn Cmd+K (Mac) hoặc Ctrl+K (Windows/Linux) và dán một trong các template này. Chúng được tinh chỉnh để giữ cho Cmd+K tập trung và chính xác.

Template 1 — Chỉnh sửa lại một khối cụ thể:

📍 Nơi dán: Mở ChatGPT (chat.openai.com), Claude (claude.ai) hoặc Gemini (gemini.google.com) và bắt đầu một cuộc trò chuyện mới.

📋 Cách sao chép prompt này: Nhấp vào bất kỳ đâu bên trong khối màu xám, nhấn Cmd+A rồi Cmd+C (Mac) hoặc Ctrl+A rồi Ctrl+C (Windows). Hoặc sử dụng biểu tượng sao chép xuất hiện.

Chỉnh sửa lại vùng chọn này theo các quy tắc sau:
- Giữ nguyên chính xác chữ ký hàm
- Giữ nguyên tất cả các chú thích hiện có và vị trí của chúng
- Thay thế [câu lệnh if-else lồng nhau / vòng lặp for / chuỗi gọi lại / vòng lặp thủ công] bằng [trả về sớm / map-filter-reduce / async-await / list comprehension]
- Khớp với mẫu xử lý lỗi được sử dụng trong [file hoặc phạm vi dòng trong cùng dự án]
- KHÔNG sửa đổi bất kỳ code nào bên ngoài vùng chọn này

Sau đó: tóm tắt trong 2 dòng những gì đã thay đổi và những gì vẫn giữ nguyên.

👀 Những gì bạn sẽ thấy: Trong vòng vài giây, AI sẽ trả về một phản hồi có cấu trúc dựa trên prompt ở trên. Hãy đọc kỹ và coi đó là bản nháp, không phải câu trả lời cuối cùng.

Template 2 — Thêm xác thực kiểu dữ liệu mà không thay đổi hành vi:

Thêm xác thực đầu vào cho lựa chọn này với các quy tắc sau:
- Giữ nguyên kiểu trả về hiện có
- Ném [lớp lỗi cụ thể hoặc loại lỗi của framework] khi nhập dữ liệu không hợp lệ
- Giữ nguyên mọi hành vi hiện có đối với đầu vào hợp lệ
- Nếu xác thực yêu cầu nhập khẩu mới, hãy thêm nó ở trên lựa chọn
- KHÔNG thêm khối try/catch trừ khi tôi yêu cầu rõ ràng

Sau đó: liệt kê mọi quy tắc xác thực đã thêm, mỗi quy tắc trên một dòng.

Template 3 — Chuyển đổi sang TypeScript / thêm kiểu dữ liệu:

Thêm kiểu dữ liệu vào lựa chọn này với các quy tắc sau:
- Giữ nguyên chữ ký hàm có thể gọi được từ các hàm gọi JavaScript hiện có (không thay đổi gây lỗi về số lượng tham số)
- Ưu tiên suy luận khi hợp lý; chỉ thêm kiểu dữ liệu rõ ràng khi suy luận sẽ thất bại hoặc sai
- KHÔNG sử dụng `any`. Sử dụng `unknown` + thu hẹp nếu thực sự không chắc chắn
- Phù hợp với kiểu dữ liệu được sử dụng trong [file gần đó, ví dụ: src/types.ts]
- KHÔNG được thay đổi logic thời gian chạy

Sau đó: liệt kê từng vị trí gọi hàm cần kiểm tra lại.

Template 4 — Đổi tên / viết lại để dễ hiểu hơn:

Đổi tên các biến và sắp xếp lại lựa chọn này để dễ đọc hơn với các quy tắc sau:
- KHÔNG thay đổi bất kỳ hành vi nào có thể quan sát được
- KHÔNG thay đổi chữ ký hàm, kiểu trả về hoặc xuất khẩu
- Chỉ đổi tên các biến cục bộ hiện chưa rõ ràng — giữ nguyên tất cả những tên bên ngoài
- Trích xuất các biểu thức con dài hơn 3 token thành hằng số có tên
- Giữ nguyên số dòng ban đầu trong phạm vi ±20%

Sau đó: liệt kê từng thay đổi tên (cũ → mới) và lý do.

Template 5 — Khớp một mẫu từ nơi khác trong kho lưu trữ:

Cập nhật lựa chọn này để khớp với mẫu được sử dụng trong [file hoặc hàm cụ thể]:
- Nghiên cứu mẫu đó trước
- Áp dụng cấu trúc tương tự ở đây
- KHÔNG nhập bất kỳ thứ gì mới trừ khi file tham chiếu đã nhập nó
- KHÔNG thêm nhật ký, số liệu hoặc báo cáo lỗi không có trong file tham chiếu

Sau đó: liệt kê 3 yếu tố cấu trúc bạn đã sao chép và bất kỳ yếu tố nào bạn chọn KHÔNG sao chép (kèm lý do).

NHỮNG QUY TẮC BẮT BUỘC áp dụng cho mọi lệnh Cmd+K ở trên:

  • Mỗi lệnh đều nêu rõ những gì KHÔNG được thay đổi — Cmd+K chỉ là thao tác chính xác, không phải là viết lại toàn bộ
  • Mỗi lệnh đều bao gồm bước "sau: tóm tắt" để bạn có thể xác minh sự khác biệt trước khi chấp nhận
  • Không bao giờ yêu cầu Cmd+K chỉnh sửa các file nằm ngoài vùng chọn hiện tại — hãy sử dụng Chat (Cmd+L) hoặc Agent (Cmd+I) để chỉnh sửa nhiều file
  • Không bao giờ hướng dẫn Cmd+K viết lại kiểu dữ liệu + logic + cấu trúc trong một lần — hãy chia thành các chỉnh sửa riêng biệt để bạn có thể xem xét
  • Giữ mỗi lệnh dưới ~8 dòng — Cmd+K hoạt động kém hiệu quả với các hướng dẫn dài
  • Không bao giờ dán thông tin bí mật, API key hoặc thông tin nhận dạng cá nhân vào lệnh — mọi thứ bạn nhập đều được gửi đến nhà cung cấp của Cursor

✏️ Cách điền thông tin chi tiết của bạn: Thay thế mỗi [] và trình giữ chỗ trong ngoặc bằng thông tin cụ thể từ tình huống thực tế của bạn. Thông tin đầu vào mơ hồ sẽ tạo ra kết quả đầu ra mơ hồ — hãy cụ thể.

Những gì bạn sẽ thấy: Các thay đổi nhỏ trong codebase, chính xác là những gì bạn yêu cầu, kèm theo tóm tắt rõ ràng để bạn biết có nên chấp nhận hay không — thay vì chấp nhận một bản viết lại lớn hơn làm hỏng các bài kiểm tra của bạn.

📌 Cách xử lý kết quả: Lưu phản hồi vào một file Notes. Chọn đề xuất có tác động cao nhất và thực hiện nó trong tuần này — đừng cố gắng làm tất cả cùng một lúc.

⚠️ Nếu thấy không ổn: Nếu các đề xuất có vẻ chung chung, hãy dán nội dung sau: "Hãy cụ thể hơn với ngữ cảnh thực tế của tôi. Bỏ những lời khuyên chung chung đi." Nếu bỏ qua các chi tiết quan trọng bạn đã cung cấp, hãy hỏi: "Bạn đã bỏ sót [X] trong ngữ cảnh của tôi — hãy thực hiện lại với [X] làm ràng buộc chính."

  • Câu 1:

    Khi nào nên sử dụng tính năng tự động hoàn thành bằng phím Tab so với chỉnh sửa trực tiếp bằng Cmd+K?

    GIẢI THÍCH:

    Tính năng tự động hoàn thành bằng phím Tab mang tính phản ứng — nó quan sát những gì bạn đang làm và dự đoán những gì bạn sẽ gõ tiếp theo. Tổ hợp phím Cmd+K mang tính chủ động — bạn cho nó biết chính xác những gì bạn muốn thay đổi. Sử dụng phím Tab khi bạn đang làm việc trôi chảy và con trỏ đoán đúng. Sử dụng tổ hợp phím Cmd+K khi bạn có một chỉnh sửa cụ thể mà phím Tab không thể dự đoán, chẳng hạn như 'chuyển đổi cái này thành async/await' hoặc 'thêm xác thực đầu vào'.

  • Câu 2:

    Bạn đã sử dụng Cmd+K để yêu cầu Cursor 'thêm xử lý lỗi vào hàm này' và sự khác biệt trông có vẻ đúng, nhưng một khối catch bị sai. Phương pháp tốt nhất là gì?

    GIẢI THÍCH:

    Cmd+K được thiết kế để chỉnh sửa chính xác. Chấp nhận chỉnh sửa gần đúng, sau đó chỉ chọn khối bắt lỗi có vấn đề và sử dụng Cmd+K với hướng dẫn cụ thể hơn như 'bắt lỗi kiểu NetworkError và thử lại một lần trước khi ném ngoại lệ vào'. Lặp lại trên từng phần nhỏ sẽ nhanh hơn là làm lại toàn bộ chỉnh sửa.

  • Câu 3:

    Tính năng tự động hoàn thành bằng phím Tab của Cursor khác biệt như thế nào so với tính năng tự động hoàn thành tiêu chuẩn?

    GIẢI THÍCH:

    Tính năng tự động hoàn thành tiêu chuẩn đề xuất từ ​​hoặc biến tiếp theo. Mô hình Tab của Cursor được đào tạo đặc biệt dựa trên các mẫu chỉnh sửa code. Sau khi bạn thực hiện thay đổi trong một file, nó có thể dự đoán thay đổi tương ứng mà bạn cần trong một file khác. Nó theo dõi những gì bạn đang làm và dự đoán những gì sẽ xảy ra tiếp theo.

Thứ Hai, 01/06/2026 09:37
51 👨
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo