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

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

#1 楼

我找到了解决方案。设置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


评论


您可以通过执行以下操作使其更短:let&modifiable =!&readonly

–马丁·图尔诺伊(Martin Tournoij)
2015年5月29日在9:10

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

–ZeroKelvinKeyboard
2015年5月29日15:11

这样,在打开一个只读文件然后创建一个新缓冲区后,新缓冲区最终将无法修改。

–普莱克斯
15年7月24日在5:13

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

–ZeroKelvinKeyboard
15年7月24日在7:22

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

– s4y
16年11月11日在22:16



#2 楼

将此添加到您的.vimrc中:

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


评论


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

– s4y
16年11月11日在21:58



#3 楼

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

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

评论


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

–ZeroKelvinKeyboard
2015年6月1日13:52

知道了我的想法是,您希望将此作为故障保护。然后无视我的回答:)

– mikky
2015年6月1日18:34

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

–硫蛋白
16 Dec 27'9:44