如何修改emacs中当前缓冲区的写权限?


17

是否可以从emacs内部更改文件的写许可权,而无需取消/重新打开缓冲区?

有时我忘了在打开文件之前修改文件的权限。我可以从emacs(M-! chmod u+w filename)内部修改权限,但这不会更新仍受写保护并拒绝修改文件的缓冲区。

有没有一种方法可以更新缓冲区内部的权限?奖励积分,如果我可以将其分配给快捷方式!

Answers:


16

更改文件模式后,在进行任何编辑之前,请运行M-x revert-buffer以重新加载文件。如果文件现在可写,则缓冲区将不再是只读的。

或者,键入C-x C-qread-only-mode)。这使缓冲区不再是只读的。您可以进行编辑甚至保存,但是会出现确认提示,询问您是否要覆盖只读文件。


尽管Cx Cq仍然有效,但从emacs 24.3开始,它现在调用只读模式,而不是切换只读,并且切换只读已被禁用。
Paul Rubel

9

要更改缓冲区的只读状态,请使用C-xC-q(toggle read-only-mode)。要更改文件许可权,您可以dired在文件目录(C-xd)上运行,通过搜索该文件C-s并使用M来更改其模式。


3
显然,您错过了dired-jump(通常绑定到C-x C-j)。它运行dired并跳转到您正在编辑的文件的行。
cjm 2012年

2
@cjm:除非我加载,否则它对我不起作用dired-x
choroba 2012年

抱歉,我忘记了dired-jump大约20年前设置的自动加载功能。我推荐它。
cjm 2012年

烦人的toggle-read-only已被替换为read-only-mode,尽管绑定相同。
查理·马丁

2

如果工作流要求重复更改缓冲区的文件许可权,那么具有自定义功能将有助于以下操作。

这仅适用于Unix机器(执行系统命令“ chmod”

(defun chmod-plus-w ()
  (interactive)
  (shell-command-to-string (concat "chmod +w " (buffer-file-name (current-buffer))))
  (revert-buffer))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.