В Vim, когда я записываю копию текущего буфера в новый файл, используя :w [filename]
, создается впечатление, что Vim использует права доступа к файлу по умолчанию (то есть, установленные с помощью umask или чего-либо еще) для нового файла. Если текущий буфер был загружен из существующего файла, то не должно ли "правильное" поведение дублировать разрешения для этого файла? Например, если я редактирую исполняемый файл и пишу новую копию файла, почему Vim не пишет новый исполняемый файл? Есть ли способ заставить Вима вести себя так, как я описываю, кроме как делать что-то подобное ! chmod --reference % [newfilename]
после записи нового файла?
8
2 ответа
3
Вы могли бы сделать что-то вроде этого. Сначала запишите имя исходного файла.
au BufRead * let b:oldfile = expand("<afile>")
Затем при сохранении нового файла измените его разрешения так же, как и у исходного файла.
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
Просто поместите обе эти автокоманды в ваш ~/.vimrc.
0
Убедитесь, что в файле нет несохраненных изменений, а затем используйте cp
чтобы сделать копию. Это приведет к копии с теми же разрешениями, что и оригинал.