Jak zmienić tryb odczytu/zapisu dla pliku za pomocą Emacsa?
Jeśli plik jest ustawiony na tryb Tylko do odczytu, jak zmienić go na tryb zapisu i odwrotnie z poziomu Emacsa?
9 answers
M-x Przełącznik-tylko do odczytu
Lub w nowszych wersjach Emacsa
M - x Read-only-mode
W moim oknie Windows, To oznacza Alt-x, aby wywołać meta prompt i wpisując "toggle-read-only", aby wywołać poprawną funkcję elisp.
Jeśli używasz domyślnych wiązań klawiatury,
C-x C-q
(które czytasz na głos jako "Control-X Control-Q") będzie miało ten sam efekt. Pamiętaj jednak, że emacs jest zasadniczo nieskończenie konfigurowalny przebieg może się różnić.
kontynuując komentarz: Należy zauważyć, że zapisywalny status bufora nie zmienia uprawnień zapisu pliku. Jeśli spróbujesz zapisać plik Tylko do odczytu , zobaczysz komunikat z potwierdzeniem. Jeśli jednak posiadasz plik, możesz zapisać swoje zmiany bez zmieniania uprawnień w pliku.
Jest to bardzo wygodne, jeśli chcesz dokonaj szybkiej zmiany pliku bez konieczności przechodzenia przez wiele kroków dodawania uprawnień do zapisu, zapisywania zmian, usuwania uprawnień do zapisu. Zazwyczaj zapominam o tym ostatnim kroku, pozostawiając potencjalnie krytyczne pliki otwarte na przypadkowe zmiany później.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-02 08:42:40
Upewnij się, że nie pomyliłeś pliku z buforem. Można ustawić bufory tylko do odczytu i z powrotem z C-x C-q
(toggle-read-only
). Jeśli masz uprawnienia do odczytu, ale nie zapisu pliku, bufor uzyskany podczas odwiedzania pliku (C-x C-f
lub find-file
) zostanie automatycznie umieszczony w trybie tylko do odczytu. Jeśli chcesz zmienić uprawnienia do pliku w systemie plików, zacznij od dired
w katalogu, który zawiera plik. Dokumentacja dired znajduje się w info; C-h i (emacs)dired RET
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 15:52:31
To co znalazłem to M-x set-file-modes filename mode
To działało w moim Windows Vista box.
Na przykład: M-x set-file-modes <RET> ReadOnlyFile.txt <RET> 0666
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-09 10:19:30
Jeśli tylko bufor (a nie Plik) jest tylko do odczytu, możesz użyć toggle-read-only
, który jest zwykle związany z C-x C-q
.
Jeśli jednak sam plik jest tylko do odczytu, może okazać się przydatna następująca funkcja:
(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)))))
Funkcja zależy od unix-output
i 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))
Umieść funkcje w swoim ~/.emacs.el
, oceń je (lub uruchom ponownie Emacsa). Następnie plik w bieżącym buforze można zapisać za pomocą M-x set-buffer-file-writable
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-06 19:03:36
Jak wspomniał ktoś inny: m-x toggle-read-only zadziałałoby.
Jest to jednak obecnie przestarzałe i m-x read-only-mode jest bieżącym sposobem, aby to zrobić, że jest ustawiony na C-x C-q przypisywanie klawiszy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-05 13:45:26
CTRL + X + CTRL + Q
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-09 07:34:29
Jeśli patrzysz na katalog plików (dired), możesz użyć Shift + M
Na nazwie pliku i wprowadzić modespec
, te same atrybuty używane w poleceniu chmod
.M modespec <RET>
Zobacz inne przydatne polecenia na plikach w katalogu na http://www.gnu.org/s/libtool/manual/emacs/Operating-on-Files.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-05 08:02:40
Wypróbowałem rozwiązanie Vebjorna Ljosa i okazało się, że przynajmniej w moim Emacsie (22.3.1) nie ma takiej funkcji jak 'Trim-right', która służy do usuwania bezużytecznego znaku nowego wiersza na końcu wyjścia chmod.
Usunięcie wywołania 'trim-right' pomogło, ale sprawiło, że wiersz statusu "bounce" z powodu dodatkowej nowej linii.
C-x C-q
jest bezużyteczny. Ponieważ potrzebujesz również uprawnienia do zapisania pliku.
Używam Spacemacs . Daje mi wygodną funkcję do rozwiązania tego pytania. Kod jest następujący.
(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))))
Wywołuję spacemacs/sudo-edit
aby otworzyć plik w Emacsie i wprowadzić hasło, mogę zmienić plik bez trybu tylko do odczytu.
Możesz napisać nową funkcję jak spacemacs/sudo-edit
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-09 07:32:27