回答:
Mxトグル読み取り専用
またはEmacsの最新バージョン
MX読み取り専用モード
私のWindowsボックスでは、これはAlt-xに相当し、メタプロンプトを表示し、「toggle-read-only」と入力して正しいelisp関数を呼び出します。
デフォルトのキーボード割り当てを使用している場合、
Cx Cq
(「Control-X Control-Q」と読み上げる)同じ効果があります。ただし、emacsは基本的に無限に再構成可能であることを考えると、走行距離は異なる場合があります。
コメントからのフォローアップ:バッファーの書き込み可能ステータスは、ファイルの書き込み許可を変更しないことに注意してください。読み取り専用ファイルに書き出そうとすると、確認メッセージが表示されます。ただし、ファイルを所有している場合は、ファイルの権限を変更せずに変更を書き出すことができます。
これは、書き込みアクセス許可の追加、変更の書き込み、書き込みアクセス許可の削除という複数のステップを実行せずに、ファイルをすばやく変更する場合に非常に便利です。私はその最後のステップを忘れがちであり、後で重要なファイルが偶発的な変更のために開かれたままにしておきます。
「ファイル」と「バッファ」を混同しないように注意してください。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
orに相当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
。
ファイルのディレクトリ(dired)を表示している場合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
します。