8

В Vim, когда я записываю копию текущего буфера в новый файл, используя :w [filename] , создается впечатление, что Vim использует права доступа к файлу по умолчанию (то есть, установленные с помощью umask или чего-либо еще) для нового файла. Если текущий буфер был загружен из существующего файла, то не должно ли "правильное" поведение дублировать разрешения для этого файла? Например, если я редактирую исполняемый файл и пишу новую копию файла, почему Vim не пишет новый исполняемый файл? Есть ли способ заставить Вима вести себя так, как я описываю, кроме как делать что-то подобное ! chmod --reference % [newfilename] после записи нового файла?

2 ответа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 чтобы сделать копию. Это приведет к копии с теми же разрешениями, что и оригинал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .