Manter bits de permissão ao gravar novo arquivo com o VIM

8

No Vim, quando escrevo uma cópia do buffer atual para um novo arquivo usando :w [filename] , parece que o Vim usa as permissões de arquivo padrão (isto é, definido por umask ou qualquer outra) para o novo arquivo. Se o buffer atual foi carregado de um arquivo existente, o comportamento "certo" não deveria ser duplicar as permissões do arquivo que ? Por exemplo, se estou editando um arquivo executável, e escrevo uma nova cópia do arquivo, por que o Vim não escreve um novo executável ? Existe alguma maneira de forçar o Vim a se comportar da maneira que estou descrevendo, além de apenas fazer algo como ! chmod --reference % [newfilename] depois de escrever o novo arquivo?

    
por Kyle Strand 11.10.2013 / 22:04

2 respostas

3

Você poderia fazer algo assim. Primeiro, capture o nome do arquivo original.

au BufRead * let b:oldfile = expand("<afile>")

Em seguida, quando você salvar o novo arquivo, altere suas permissões para que sejam as mesmas do arquivo original.

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

Basta colocar os dois comandos automáticos no seu ~ / .vimrc.

    
por 12.10.2013 / 00:09
0

Verifique se não há alterações não salvas no arquivo e use cp para fazer uma cópia. Isso resultará em uma cópia com as mesmas permissões que o original.

    
por 12.10.2013 / 10:21