阻止更改为只读文件


14

当使用Vim编辑一个只读文件时,它只会在第一次编辑时提供一个警告,但允许进行任何更改。我可以理解,这种行为对打算以其他名称保存文件的人可能有用。但是有时我会打开我没有写权限的文件,然后忘记进行更改。

是否可以进入一种模式,在这种模式下,Vim将允许查看文件但阻止进行更改的任何选项?

Answers:


13

我找到了解决方案。设置nomodifiable可防止文件被编辑(在帮助窗口中使用)。我创建了一个简单的函数来设置或取消设置(modifiable取决于是否readonly设置),并将其附加到autocmd。

" Don't allow editing of read only files
autocmd BufRead * call RONoEdit()

function! RONoEdit()
  if &readonly == 1
    set nomodifiable
  else
    set modifiable
  endif
endfunction

4
您可以通过以下操作将其缩短:let &modifiable = !&readonly
马丁·图诺伊

@Carpetsmoker更好,一个衬板,谢谢!但是,仍然必须是: autocmd BufRead * let &modifiable = !&readonly
ZeroKelvinKeyboard

这样,在打开readonly文件然后创建新缓冲区后,新缓冲区结束nomodifiable
Praxeolitic 2015年

感谢您指出这一点,我没有注意到。我不确定如何测试新的缓冲区。
ZeroKelvinKeyboard 2015年

1
@Praxeolitic:我刚刚发布了一个答案,应该解决这个问题,让我知道它是否有效。
s4y

7

将此添加到您的.vimrc中:

autocmd BufRead * let &l:modifiable = !&readonly

这建立在@ZeroKelvinKeyboard的答案上,仅影响当前缓冲区。
s4y

0

尽管以上答案正确无误,但还有另一件事要考虑:只要文件是“只读”文件,就不能更改文件内容,除非您是文件的所有者或有权使该文件可写。即使这样,除非您用“:w!”显式覆盖“只读”状态,否则vim不会将更改写入文件。

如果实际上您可以编辑应该是只读的文件,则可能要重新检查权限,则可能存在安全性配置错误。如果仅使vim无法编辑文件,则其他编辑方式仍然有效,因此,如果不更改文件,则应正确设置权限。在Windows中,可以通过明确拒绝所有人的更改权限来强制文件为只读;在Linux中,可以使用“不可变”扩展属性(chattr + i)。


2
对不起,如果我不太清楚。这个问题与意外更改只读文件无关;我想阻止自己编辑我没有写访问权的文件的缓冲区。有时,我不小心以常规用户而不是以root用户身份打开系统配置文件。在这种情况下,我没有对该文件的写访问权,因此该缓冲区显示为只读,但Vim仍然允许我编辑该缓冲区。当我尝试保存时,因为没有写访问权限,所以无法。在这种情况下,我希望Vim阻止对缓冲区的更改。
ZeroKelvinKeyboard 2015年

知道了 我的想法是,您希望将此作为故障保护。那就无视我的回答了:)
mikky 2015年

OP意味着当一个人在OS中打开一个非只读文件,但他/她当前不希望(或认为适当)进行更改,并且希望限制自己不要这样做时。我的想法完全一样,因此从Google出发!
Violapterin
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.