Làm thế nào để sửa đổi quyền ghi trên bộ đệm hiện tại trong emacs?


16

Có thể thay đổi quyền ghi trên một tệp từ bên trong emacs, mà không giết / mở lại bộ đệm không?

Đôi khi tôi quên sửa đổi các quyền trên một tập tin trước khi mở nó. Tôi có thể sửa đổi các quyền từ bên trong emacs ( M-! chmod u+w filename) nhưng điều này không cập nhật bộ đệm vẫn được bảo vệ ghi và từ chối sửa đổi tệp.

Có cách nào để cập nhật quyền bên trong bộ đệm không? Điểm thưởng nếu tôi có thể gán cái này cho một phím tắt!

Câu trả lời:


15

Sau khi thay đổi chế độ tệp và trước khi thực hiện bất kỳ chỉnh sửa nào, hãy chạy M-x revert-bufferđể tải lại tệp. Nếu tệp bây giờ có thể ghi, bộ đệm sẽ không còn ở chế độ chỉ đọc.

Ngoài ra, gõ C-x C-q( read-only-mode). Điều này làm cho bộ đệm không còn chỉ đọc. Bạn có thể chỉnh sửa và thậm chí lưu, nhưng bạn sẽ nhận được lời nhắc xác nhận hỏi liệu bạn có muốn ghi đè lên tệp chỉ đọc hay không.


Mặc dù Cx Cq vẫn hoạt động, kể từ ngày 24.3, giờ đây nó gọi chế độ chỉ đọc thay vì chuyển đổi chỉ đọc và chuyển đổi chỉ đọc đã bị vô hiệu hóa.
Paul Rubel

9

Để thay đổi trạng thái chỉ đọc của bộ đệm, hãy sử dụng C-xC-q(chuyển đổi read-only-mode). Để thay đổi quyền của tệp, bạn có thể chạy diredtrên thư mục của tệp ( C-xd), tìm kiếm tệp bằng cách C-ssử dụng Mđể thay đổi chế độ của tệp .


3
Rõ ràng, bạn đã bỏ lỡ dired-jump(thường bị ràng buộc C-x C-j). Nó chạy diredvà nhảy đến dòng cho tệp bạn đang chỉnh sửa.
cjm

2
@cjm: Nó không hoạt động đối với tôi trừ khi tôi tải dired-x.
choroba

Xin lỗi, tôi đã quên rằng tôi đã thiết lập tự động tải trong dired-jumpkhoảng 20 năm trước. Tôi khuyến khích điều đó.
cjm

Khó chịu toggle-read-onlyđã được thay thế bằng read-only-mode, mặc dù các ràng buộc là như nhau.
Charlie Martin

2

Nếu quy trình công việc yêu cầu thay đổi quyền của tệp bộ đệm nhiều lần, thì việc có một chức năng tùy chỉnh sẽ giúp như sau.

Điều này chỉ hoạt động trên các máy unix (thực thi lệnh hệ thống "chmod"

(defun chmod-plus-w ()
  (interactive)
  (shell-command-to-string (concat "chmod +w " (buffer-file-name (current-buffer))))
  (revert-buffer))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.