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 :wparte, 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 teecomando e %representa o conteúdo atual do buffer, certo?
Mas ainda não entendo como isso funciona.
:!commandé um filtro (cf.:h !), enquanto:w !commandnão é, apenas é executadocommandcom o arquivo atual comostdin(cf.:h :w_c). Ou seja::w !sed /./dnã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.