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)

zimbatm
fonte
perguntas relacionadas (duplicatas não exatamente exatas): superuser.com/questions/23428/vim-sudo-vim-bad-idea .. superuser.com/questions/106865/… .. e no SO, stackoverflow.com/questions/1005 /…
quack quixote
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

Marian
fonte
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
5

Experimentar:

:w !sudo tee % >/dev/null
Brian
fonte