Como salvar um arquivo somente leitura no Vim para Windows?

8

Eu já procurei muito por isso e todas as respostas são sobre o Vim no Linux. Existe uma maneira de salvar um arquivo somente leitura diretamente do Vim no Windows?

Durga Swaroop
fonte

Respostas:

11

Como em outras versões do vi / vim, você pode usar :w!para forçar a gravação, desde que tenha permissões para substituir a propriedade somente leitura.

Por exemplo, se você definiu o arquivo como somente leitura, o procedimento acima funcionará. Se o próprio Windows ou um administrador o definiu como somente leitura, você precisará de outra opção.

Como o @ dash-tom-bang comentou, um bom exemplo está em Arquivos de Programas, onde os arquivos são protegidos por padrão. Este artigo da base de conhecimento da Microsoft explica como isso funciona na prática.

rolinger
fonte
Minha conta está definida como Admin, mas :w!não está funcionando. Ele diz que não pode abrir o arquivo para leitura. Embora eu possa fazer exatamente a mesma coisa fora do vim.
Durga Swaroop
1
@DurgaSwaroop: Você já tentou abrir gvimcomo Run as Administrator? Talvez fosse resolver o seu propósito ... ou de outra forma, pode ser possível que o arquivo está sendo bloqueado por outra aplicação ...
cyliano sempre
1
@DurgaSwaroop: O processo pai deve ser run as administratorpara concluir seu subprocesso envolvendo tarefas administrativas a serem executadas ... Consulte windows.microsoft.com/en-in/windows/… .... caso contrário, desabilite as UACconfigurações ... .
cyliano sempre
1
A edição de arquivos dentro da hierarquia de Arquivos de Programas, por exemplo, :w!não voa e você deve executar o gVim como administrador ou o Vim em um prompt de comando que foi executado como administrador.
dash-tom-bang
1
Obrigado @ dash-tom-bang, adicionei referência a esse bom exemplo na minha resposta.
rolinger
2

Você pode usar o meu plugin SudoEdit .

Christian Brabandt
fonte
Isso funciona corretamente no Windows? No arquivo Leiame, ele diz que provavelmente não o fará.
Durga Swaroop
Dos meus testes deveria. No entanto, não uso o Windows frequentemente e nunca recebi nenhum feedback sobre isso. Essa é a razão do leia-me. Também depende do método que você usa.
Christian Brabandt
2

Há outra possibilidade que não foi abordada nas outras respostas: o vim se recusará a salvar um arquivo se ele estiver aberto e bloqueado por outro aplicativo do Windows. Muitos aplicativos comuns do Windows (Office, por exemplo) bloqueiam os arquivos que eles abrem. Se este for o problema, não é necessário mexer nas permissões ou: w! Ajudará você. Você simplesmente precisa fechar o arquivo no outro aplicativo e poderá salvá-lo do vim. É lamentável que o vim não sinalize claramente essa situação para o usuário.

JKna
fonte
0

Para win7: Iniciar> Executar> Cmd (como Admin) e execute estes comandos para tornar a árvore de diretórios gravável por admin:

cd parent/folder

:: /f file, /a admin,  /r recurse, /d y = nopromt
takeown /F . /A /R /D Y > nul:

:: /t /q /c .. traverse quiet continue
icacls . /t /q /c /reset
icacls . /t /q /c /grant    :r Everyone:F
icacls . /t /q /c /setowner Administrators 
mosh
fonte
0

Execute o gVim como administrador, por exemplo, clicando com o botão direito do mouse ou usando o atalho do teclado Shift+ F10no atalho do gVim no menu Iniciar e escolhendo Executar como administrador .

Abra o arquivo que você deseja editar e salve as alterações usando :wnormalmente.

Kenny Evitt
fonte
0

Eu uso o gvim para editar C:\Windows\System32\drivers\etc\hostsdepois de definir suas permissões para "controle total", o truque envolveu definir "herdar permissões" para "não" primeiro. Então começou a trabalhar sem o "!". Eu também corri, attribmas isso não foi eficaz.

Joe Bonds
fonte
Doest :sudoeditfunciona no Windows? Desculpe, não posso verificar.
Biggybi
-1

Digite :f "newfilename"no modo de comando e, ao sair, :wsalve com o novo nome de arquivo.

user2866244
fonte