Se você abrir um arquivo no qual você não tem permissão para gravar no vim, e decidir que precisa alterá-lo, poderá gravar suas alterações sem sair do vim, :w !sudo tee %
não entendo como isso pode funcionar. Você pode dissecar isso?
Eu entendo a :w
parte, ele grava o buffer atual no disco, assumindo que já existe um nome de arquivo associado a ele, certo?
Eu também entendo o !
que executa o sudo tee
comando e %
representa o conteúdo atual do buffer, certo?
Mas ainda não entendo como isso funciona.
:!command
é um filtro (cf.:h !
), enquanto:w !command
não é, apenas é executadocommand
com o arquivo atual comostdin
(cf.:h :w_c
). Ou seja::w !sed /./d
não altera o conteúdo do buffer atual. Mas a receita é realmente não muito bem por outra razão,%
precisa ser escapado::exec 'w !sudo tee ' . shellescape(expand('%', 1))
. O comando original não funciona com, por exemplo, nomes de arquivos com espaços.