Lỗi Gặp Phải
Bạn mở một file, bắt đầu gõ, và không có gì xảy ra. Hoặc VS Code hiển thị thông báo ở góc dưới bên phải:
Cannot edit in read-only editor
Tab đã mở. File trông có vẻ ổn. Nhưng mọi phím bấm đều bị bỏ qua. Đây là lý do — và cách khắc phục.
Nguyên Nhân
VS Code có nhiều cách độc lập để đánh dấu file là chỉ đọc. Phần khó chịu là chúng có thể cộng dồn với nhau. Bất kỳ nguyên nhân nào sau đây đều có thể gây ra lỗi này:
- File được đánh dấu chỉ đọc ở cấp hệ điều hành (
chmodhoặc thuộc tính file trên Windows) - Tính năng khóa editor tích hợp của VS Code bị bật lên — có biểu tượng khóa trên thanh tab
- File nằm trong hệ thống file ảo chỉ đọc: một đối tượng
.git, workspace Remote SSH với quyền hạn chế, hoặc Docker volume được mount với:ro - Cài đặt workspace hoặc extension đã thiết lập
files.readonlyIncludecho đường dẫn hoặc loại file đó - Bạn đang xem diff view, panel Output, hoặc preview Markdown — những tab này luôn chỉ đọc theo thiết kế
Các Bước Khắc Phục
Bước 1 — Kiểm tra biểu tượng khóa trước
Nhìn vào tab của file bị lỗi. Thấy biểu tượng khóa (🔒) bên cạnh tên file không? Hãy nhấp vào đó. Đây là nguyên nhân phổ biến nhất — khóa vô tình được bật khi bạn nhấp chuột phải vào tab và chọn Lock mà không để ý.
Thích dùng bàn phím? Mở Command Palette và chạy lệnh:
Ctrl+Shift+P (hoặc Cmd+Shift+P trên macOS)
> Toggle Editor Read-only Lock
Bước 2 — Sửa quyền file ở cấp hệ điều hành
File có thể thực sự đang chỉ đọc trên ổ đĩa. Kiểm tra nhanh:
Linux / macOS:
ls -l yourfile.js
# -r--r--r-- nghĩa là chỉ đọc với mọi người
# Cấp quyền ghi cho chủ sở hữu:
chmod u+w yourfile.js
# Hoặc đặt quyền chuẩn:
chmod 644 yourfile.js
Windows (PowerShell):
Get-Item yourfile.js | Select-Object IsReadOnly
# Xóa thuộc tính chỉ đọc:
Set-ItemProperty yourfile.js -Name IsReadOnly -Value $false
Windows (File Explorer): Nhấp chuột phải vào file → Properties → bỏ chọn Read-only → Apply.
Bước 3 — Tìm quy tắc chỉ đọc trong settings.json
Các extension và chỉnh sửa thủ công có thể âm thầm thêm quy tắc chỉ đọc mà bạn đã quên. Mở cài đặt và tìm các khóa sau:
// Ctrl+Shift+P → "Open User Settings (JSON)"
{
"files.readonlyInclude": {
"**/some-pattern/**": true // ← xóa hoặc chỉnh sửa dòng này
},
"files.readonlyExclude": { ... },
"files.readonlyFromPermissions": true // ← bắt buộc kiểm tra quyền hệ điều hành
}
Xóa bất kỳ pattern nào khớp với file của bạn. Một lưu ý về files.readonlyFromPermissions: true — khi được bật, VS Code phản chiếu trực tiếp quyền hệ điều hành. Sửa quyền hệ điều hành ở Bước 2 và vấn đề này sẽ tự giải quyết.
Bước 4 — Bạn có đang ở trong tab editor đặc biệt không?
Các panel Output, Git diff view, Markdown preview và tài liệu do extension tạo ra luôn ở chế độ chỉ đọc. Đây là thiết kế có chủ ý, không phải lỗi.
Dấu hiệu nhận biết: tiêu đề tab có hậu tố như [Preview] hoặc [Output], và thanh trạng thái không hiển thị đường dẫn file có thể chỉnh sửa. Đóng tab này và mở file nguồn thực sự bằng Ctrl+P → gõ tên file.
Bước 5 — Remote SSH, Dev Containers và WSL
Đang làm việc từ xa? File có thể thuộc sở hữu của một người dùng khác bên trong môi trường đó. Chạy lệnh này trong terminal từ xa:
# Trong terminal từ xa (SSH / container / WSL):
ls -l /workspace/yourfile.js
# Sửa quyền sở hữu nếu bạn có sudo:
sudo chown $USER yourfile.js
chmod u+w yourfile.js
Với Docker volume, kiểm tra docker-compose.yml của bạn xem có hậu tố :ro không — điều đó mount volume ở chế độ chỉ đọc ở cấp container:
volumes:
- ./src:/app/src:ro # ← xóa ":ro" để cho phép ghi
Bước 6 — Tìm extension gây lỗi
Prettier, ESLint, một số công cụ Git và plugin file-watcher đều có thể ép chế độ chỉ đọc. Cách nhanh nhất để kiểm tra:
Ctrl+Shift+P → "Extensions: Disable All Installed Extensions"
Mở lại file. Có thể chỉnh sửa rồi không? Bật lại từng extension một cho đến khi vấn đề xuất hiện trở lại — đó chính là thủ phạm.
Xác Nhận Đã Sửa Xong
- Nhấp vào editor và gõ một ký tự. Nó phải hiện ra.
- Không còn biểu tượng khóa trên tab, không còn thông báo "Cannot edit in read-only editor".
- Thanh trạng thái ở phía dưới hiển thị chế độ ngôn ngữ (ví dụ:
JavaScript) mà không có nhãn Read-only. - Trên Linux/macOS, xác nhận bằng
ls -l yourfile.js— bạn sẽ thấy ít nhất-rw-cho chủ sở hữu.
Tóm Tắt Nhanh
Nguyên nhânCách sửa
Biểu tượng khóa editor đang bậtNhấp vào biểu tượng khóa hoặc chạy *Toggle Editor Read-only Lock*
Quyền file hệ điều hành`chmod u+w file` hoặc bỏ chọn Read-only trong Properties
Pattern khớp với `files.readonlyInclude`Xóa pattern khỏi `settings.json`
Tab Output / Diff / PreviewMở file nguồn thực sự bằng Ctrl+P
Remote / container volume chỉ đọcSửa quyền sở hữu hoặc xóa `:ro` khỏi cấu hình volume
Extension ép chế độ chỉ đọcTắt toàn bộ extension, sau đó bật lại từng cái một
Mẹo Thêm
- Khóa editor thực ra rất hữu ích. Hãy chủ động khóa file
.envhoặc file config được tạo tự động để tránh chỉnh sửa nhầm. Nhấp chuột phải vào bất kỳ tab nào → Lock. - Nếu dự án của bạn dùng
.editorconfighoặc công cụ build đánh dấu các file được tạo tự động là chỉ đọc, đừng cố gắng sửa trực tiếp — hãy chỉnh sửa template nguồn và để build tạo lại output. - Trên server Linux được truy cập qua Remote SSH, các file trong
/var/wwwhoặc/etcthường thuộc sở hữu củaroot. Chạysudo chown $USER:$USER yourfile.jsthay vì mở VS Code với quyền root.

