Escrever arquivo vim como superusuário?


10

Este é um problema de usabilidade que costuma acontecer comigo:

Abro um arquivo de sistema somente leitura com o vim, até mesmo editando-o, porque não estou atento o suficiente ou porque o vim no sistema está mal configurado. Depois que minhas alterações são feitas, eu fico presa em escrevê-las em um arquivo temporário ou perdê-las, porque: w! não vai funcionar.

Existe um comando vim (: W !!!) que permite escrever o buffer atual como superusuário? (O Vim solicita seu sudo ou senha su naturalmente)



1
O SO é definitivamente um tolo, no entanto, as duas perguntas da SU abordam um problema separado resolvido com o sudoeditcomando. Esta questão está mais focada em esquecer de digitá-la em primeiro lugar e em elevar depois de iniciar o editor.
heavyd

Respostas:


15
:w !sudo tee % >/dev/null`

Explicação: Com !, você pode executar programas. Ao prefixá-lo com: w, o conteúdo do arquivo (o material que você possui no vim, não o arquivo original, mais precisamente: o buffer) será fornecido ao comando na entrada padrão. %é substituído pelo nome do arquivo e >/dev/nullevita que o conteúdo seja impresso novamente na tela (que é o comportamento usual de tee).

Eu encontrei uma maneira ainda mais curta. ddnão imprime no stdout para que você possa salvar a coisa nula.

:w !sudo dd of=%

O mesmo é para :r, que insere a saída do comando fornecido, para que você possa, por exemplo, inserir a data atual no seu arquivo usando:r !date


Muito obrigado, você fez minha vida muito melhor! (Brian too)
zimbatm

Acabei de adicionar um segundo método.
Marian

Isso é realmente legal!
Anthony Giorgio

não funciona com undofiles
Christian Brabandt

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.