Câu trả lời:
Mx chuyển đổi chỉ đọc
hoặc trong các phiên bản gần đây hơn của Emacs
Chế độ chỉ đọc Mx
Trên hộp Windows của tôi, số tiền đó tương ứng với Alt-x để hiển thị dấu nhắc meta và gõ "chỉ chuyển đổi chỉ đọc" để gọi hàm elisp chính xác.
Nếu bạn đang sử dụng các ràng buộc bàn phím mặc định,
Cx Cq
(mà bạn đọc to là "Control-X Control-Q") sẽ có tác dụng tương tự. Tuy nhiên, hãy nhớ rằng emacs về cơ bản là có thể cấu hình lại, số dặm của bạn có thể thay đổi.
Theo dõi từ bình luận: bạn nên lưu ý rằng trạng thái có thể ghi của bộ đệm không thay đổi sự cho phép có thể ghi của tệp. Nếu bạn cố gắng viết ra một tệp chỉ đọc , bạn sẽ thấy một thông báo xác nhận. Tuy nhiên, nếu bạn sở hữu tệp, bạn có thể viết ra các thay đổi của mình mà không thay đổi quyền trên tệp.
Điều này rất thuận tiện nếu bạn muốn thay đổi nhanh chóng thành một tệp mà không phải trải qua nhiều bước thêm quyền ghi, viết thay đổi, xóa quyền ghi. Tôi có xu hướng quên bước cuối cùng đó, để lại các tệp quan trọng có khả năng mở cho các thay đổi ngẫu nhiên sau này.
Hãy chắc chắn rằng bạn không nhầm lẫn 'tập tin' với 'bộ đệm'. Bạn có thể đặt bộ đệm thành chỉ đọc và quay lại với C-x C-q
( toggle-read-only
). Nếu bạn có quyền đọc, nhưng không ghi, một tệp, bộ đệm bạn nhận được khi bạn truy cập tệp ( C-x C-f
hoặc find-file
) sẽ tự động được đặt ở chế độ chỉ đọc. Nếu bạn muốn thay đổi quyền trên một tệp trong hệ thống tệp, có thể bắt đầu bằng dired
thư mục chứa tệp. Tài liệu cho dired có thể được tìm thấy trong thông tin; C-h i (emacs)dired RET
.
inc
. Dạy một người đàn ông câu cá ...
Những gì tôi tìm thấy là M-x set-file-modes filename mode
Nó hoạt động ở hộp Windows Vista của tôi. Ví dụ:M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666
(set-file-modes FILE 438)
(trong đó 438 là số thập phân tương đương 2#0110110110
hoặc 666
).
Như đã đề cập ở trên bởi một người khác: Mx toggle-read-only sẽ hoạt động.
Tuy nhiên, điều này hiện không được chấp nhận và chế độ chỉ đọc Mx là cách hiện tại để thực hiện, nó được đặt thành liên kết phím Cx Cq .
Nếu chỉ có bộ đệm (và không phải tệp) là chỉ đọc, bạn có thể sử dụng toggle-read-only
, thường được ràng buộc C-x C-q
.
Tuy nhiên, nếu bản thân tệp chỉ đọc, bạn có thể thấy chức năng sau đây hữu ích:
(defun set-buffer-file-writable ()
"Make the file shown in the current buffer writable.
Make the buffer writable as well."
(interactive)
(unix-output "chmod" "+w" (buffer-file-name))
(toggle-read-only nil)
(message (trim-right '(?\n) (unix-output "ls" "-l" (buffer-file-name)))))
Hàm phụ thuộc vào unix-output
và trim-right
:
(defun unix-output (command &rest args)
"Run a unix command and, if it returns 0, return the output as a string.
Otherwise, signal an error. The error message is the first line of the output."
(let ((output-buffer (generate-new-buffer "*stdout*")))
(unwind-protect
(let ((return-value (apply 'call-process command nil
output-buffer nil args)))
(set-buffer output-buffer)
(save-excursion
(unless (= return-value 0)
(goto-char (point-min))
(end-of-line)
(if (= (point-min) (point))
(error "Command failed: %s%s" command
(with-output-to-string
(dolist (arg args)
(princ " ")
(princ arg))))
(error "%s" (buffer-substring-no-properties (point-min)
(point)))))
(buffer-substring-no-properties (point-min) (point-max))))
(kill-buffer output-buffer))))
(defun trim-right (bag string &optional start end)
(setq bag (if (eq bag t) '(?\ ?\n ?\t ?\v ?\r ?\f) bag)
start (or start 0)
end (or end (length string)))
(while (and (> end 0)
(member (aref string (1- end)) bag))
(decf end))
(substring string start end))
Đặt các chức năng trong của bạn ~/.emacs.el
, đánh giá chúng (hoặc khởi động lại emacs). Sau đó, bạn có thể làm cho tệp trong bộ đệm hiện tại có thể ghi với M-x set-buffer-file-writable
.
set-buffer
bên ngoài save-excursion
.
subseq
bằng substring
bây giờ. Điều đó nên tránh cảnh báo.
Nếu bạn đang xem một thư mục của các tệp (được định hướng), thì bạn có thể sử dụng Shift + M
tên tệp và nhập modespec
, các thuộc tính tương tự được sử dụng trong chmod
lệnh.
M modespec <RET>
Xem các lệnh hữu ích khác trên các tệp trong danh sách thư mục tại http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html
Tôi đã thử giải pháp của Vebjorn Ljosa và hóa ra ít nhất trong Emacs của tôi (22.3.1) không có chức năng như "trim-right", được sử dụng để xóa một dòng mới vô dụng ở cuối đầu ra chmod.
Xóa cuộc gọi thành 'trim-right', nhưng làm cho hàng trạng thái "nảy" vì có thêm dòng mới.
C-x C-q
là vô dụng Bởi vì bạn cũng cần sự cho phép để lưu một tập tin.
Tôi sử dụng Spacemacs . Nó cho tôi một chức năng thuận tiện để giải quyết câu hỏi này. Các mã đang theo sau.
(defun spacemacs/sudo-edit (&optional arg)
(interactive "p")
(if (or arg (not buffer-file-name))
(find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: ")))
(find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
Tôi gọi spacemacs/sudo-edit
để mở một tệp trong emacs và nhập mật khẩu của mình, tôi có thể thay đổi tệp mà không cần chế độ chỉ đọc.
Bạn có thể viết một chức năng mới như thế nào spacemacs/sudo-edit
.
toggle-read-only
chỉ bật trạng thái chỉ đọc của bộ đệm không phải của tệp. Nếu bạn muốn thay đổi chế độ của tệp, hãy sử dụngdired
hoặc thực thichmod +w
như một lệnh shell trên tệp.