在最近安装的 fedora 25 系统上(uname -a
→ Linux [host] 4.10.6-200.fc25.x86_64 #1 SMP Mon Mar 27 14:06:23 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
;GNU Emacs 25.1.1 (x86_64-redhat-linux-gnu, GTK+ Version 3.22.4) of 2016-12-15
按照 emacs 自己的打开页面使用),我无法在 emacs 中覆盖我自己的文件的写保护。
事情是这样的:
(a)我打开写保护的文件(ls -l
→ -r--------. 1 me me 92996 Apr 10 20:44 myfile
),
(b)我禁用写保护,这样我就可以编辑(C-x C-q)
(c)我编辑文件
(d)我想保存(C-x C-s)
(e)系统提示我“文件myfile
已写保护;是否仍尝试保存?(是或否)”
(f)我回答“是”,输入
(g)出现消息:“打开输出文件:权限被拒绝,[完整路径]/myfile”
该目录没有写保护。
我已经能够在其他系统(最近几年是 openSUSE)上永久编辑和保存我的写保护文件。
在系统上禁用 selinux 模式没有帮助。请参阅评论中的更多信息。
我不知道哪里出了问题。
答案1
C-x C-q
禁用只读缓冲,不适用于其文件。
目的C-x C-q
是防止自己意外改变缓冲区的内容(无论它是否是文件缓冲区)。
更改权限文件,请使用下列方法之一:
- 命令
chmod
- Dired,使用
M
(命令dired-do-chmod
)
使用C-h f
查看每个命令的文档:
chmod
set-file-modes
是in的别名subr.el
。
(chmod FILENAME MODE)
将文件名为 的模式位设置
FILENAME
为(一个整数)。仅使用 的MODE
低 12 位。MODE
交互地,模式位由 读取
read-file-modes
,它接受符号表示法,就像chmod
来自 GNU Coreutils 的命令一样。
dired-do-chmod
是 中的一个交互式自动加载的已编译 Lisp 函数dired-aux.el
。它必然
M
,<menu-bar> <operate> <chmod>
。
(dired-do-chmod &optional ARG)
更改标记的(或下一个)文件的模式。允许使用
ARG
符号模式,例如。键入以将指向的文件的文件属性拉入迷你缓冲区。g+w
M-n
答案2
谢谢大家的关注。
昨天这个问题变得无声了,因为我放弃了这个问题,最终安装了另一个 Linux 发行版,其中 emacs(即 emacs v24)运行正常。
虽然我原来的问题还没有解决,但我仍然怀疑其原因如下:
怀疑 1:我遇到问题的 emacs 25 版本在这方面的行为可能与其前身不同。一般来说,不同的行为的一个提示是,例如,它不接受版本 24 的配置文件 .emacs
嫌疑人2:某些文件系统或发行版的特定设置。
这两项怀疑均未得到跟进、证实或驳斥。
对上一个答案的回应(关于 chmod 等):感谢您的意见,但恐怕您误解了我的问题(也许我一开始就说得不够清楚)。我的问题不是 emacs 如何更改文件的权限,而是:为什么在我的情况下,即使用户请求了这样的操作,它也会拒绝覆盖受保护的文件?(事实上,Cx Cq 只会改变缓冲区的可编辑性,这种可编辑性在权限和/或打开的文件类型之后默认为可编辑性——我错误地使用了错误的术语来描述此按键组合的效果。)