Kyl*_*and 8 unix vim file-permissions
在 Vim 中,当我使用 将当前缓冲区的副本写入新文件时:w [filename],似乎 Vim 使用新文件的默认文件权限(即由 umask 或其他设置)。但是,如果当前缓冲区是从现有文件加载的,那么“正确”的行为不应该是从该文件复制权限吗?例如,如果我正在编辑一个可执行文件,并且我编写了该文件的一个新副本,为什么 Vim 不编写一个新的可执行文件?除了! chmod --reference % [newfilename]在编写新文件后做一些类似的事情之外,有什么方法可以强制 Vim 按照我描述的方式行事?
你可以做这样的事情。首先,捕获原始文件的名称。
au BufRead * let b:oldfile = expand("<afile>")
Run Code Online (Sandbox Code Playgroud)
然后,当您保存新文件时,将其权限更改为与原始文件相同。
au BufWritePost * if exists("b:oldfile") | let b:newfile = expand("<afile>") | if b:newfile != b:oldfile | echo system("chmod --reference=".b:oldfile." ".b:newfile) | endif |endif
Run Code Online (Sandbox Code Playgroud)
只需将这两个自动命令放入 ~/.vimrc 中即可。