답변:
MX 토글 읽기 전용
또는 최신 버전의 Emacs
MX 읽기 전용 모드
내 Windows 상자에서 Alt-x에 도달하면 메타 프롬프트가 표시되고 "toggle-read-only"를 입력하여 올바른 elisp 함수를 호출합니다.
기본 키보드 바인딩을 사용하는 경우
Cx Cq
( "Control-X Control-Q"라고 큰 소리로 읽음) 효과는 동일합니다. 그러나 emacs가 본질적으로 무한정 재구성 가능하다는 점을 감안하면 마일리지가 다를 수 있습니다.
주석에서 후속 조치 : 버퍼의 쓰기 가능 상태는 파일의 쓰기 가능 권한을 변경하지 않습니다. 읽기 전용 파일 에 쓰려고 하면 확인 메시지가 나타납니다. 그러나 파일을 소유 한 경우 파일에 대한 권한을 변경 하지 않고 변경 사항 을 작성할 수 있습니다 .
쓰기 권한 추가, 변경 쓰기, 쓰기 권한 제거의 여러 단계를 거치지 않고 파일을 빠르게 변경하려는 경우 매우 편리합니다. 마지막 단계는 잊어 버리고 나중에 실수로 변경 될 수 있도록 잠재적으로 중요한 파일을 열어 둡니다.
'file'과 'buffer'를 혼동하지 마십시오. C-x C-q
( toggle-read-only
)를 사용 하여 버퍼를 읽기 전용으로 설정하고 다시 되돌릴 수 있습니다 . 파일을 읽을 수는 있지만 쓸 수는 없지만 파일을 방문 할 때 얻게되는 버퍼 ( C-x C-f
또는 find-file
)는 자동으로 읽기 전용 모드로 설정됩니다. 파일 시스템의 파일에 대한 권한을 변경하려면 파일 dired
이 포함 된 디렉토리에서 시작 하십시오. dired에 대한 설명서는 info에서 찾을 수 있습니다. C-h i (emacs)dired RET
.
inc
. 남자에게 물고기를 가르쳐 ...
내가 찾은 것은 M-x set-file-modes filename mode
내 Windows Vista 상자에서 작동했습니다. 예를 들면 다음과 같습니다.M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666
(set-file-modes FILE 438)
(438는 10과 동등한 2#0110110110
또는 666
)
파일이 아닌 버퍼 만 읽기 전용 인 경우 toggle-read-only
일반적으로에 바인딩 된을 사용할 수 있습니다 C-x C-q
.
그러나 파일 자체가 읽기 전용 인 경우 다음 기능이 유용 할 수 있습니다.
(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)))))
이 함수에 의존 unix-output
하고 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))
에 기능을 배치 ~/.emacs.el
하고 평가하거나 emacs를 다시 시작하십시오. 그런 다음을 사용하여 현재 버퍼의 파일을 쓸 수있게 만들 수 있습니다 M-x set-buffer-file-writable
.
set-buffer
외부 를 넣도록 수정되었습니다 save-excursion
.
파일 디렉토리 (디렉토리)를보고있는 경우 파일 Shift + M
이름을 modespec
사용하고 chmod
명령에 사용 된 것과 동일한 속성을 입력 할 수 있습니다 .
M modespec <RET>
http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html 의 디렉토리 목록에서 파일에 대한 다른 유용한 명령을 참조하십시오.
나는 Vebjorn Ljosa의 솔루션을 시험해 보았고 적어도 내 Emacs (22.3.1)에는 chmod 출력의 끝에 쓸모없는 줄 바꿈을 제거하는 데 사용되는 'trim-right'와 같은 기능이 없다는 것이 밝혀졌습니다.
'trim-right'에 대한 호출을 제거하면 도움이되었지만 추가 줄 바꿈으로 인해 상태 행이 "반송"되었습니다.
C-x C-q
쓸모가 없습니다. 또한 파일을 저장할 수있는 권한이 필요하기 때문입니다.
Spacemacs를 사용 합니다 . 이 질문을 해결하는 편리한 기능을 제공합니다. 코드는 다음과 같습니다.
(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))))
나는 전화 spacemacs/sudo-edit
emacs에서 파일을 열고 비밀번호를 입력하기 위해 하면 읽기 전용 모드없이 파일을 변경할 수 있습니다.
와 같은 새로운 함수를 작성할 수 있습니다 spacemacs/sudo-edit
.
toggle-read-only
파일이 아닌 버퍼의 읽기 전용 상태 만 토글됩니다. 파일 모드를 변경하려면 파일 에서 쉘 명령으로 사용dired
하거나 실행chmod +w
하십시오.