Sửa lỗi "Cannot edit in read-only editor" trong VS Code

beginner💻 VS Code2026-05-09| Visual Studio Code (tất cả phiên bản), Windows / macOS / Linux

Error Message

Cannot edit in read-only editor
#read-only#cài-đặt#khóa-editor

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 (chmod hoặ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.readonlyInclude cho đườ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 .env hoặ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 .editorconfig hoặ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/www hoặc /etc thường thuộc sở hữu của root. Chạy sudo chown $USER:$USER yourfile.js thay vì mở VS Code với quyền root.

Related Error Notes