Como funciona o trabalho ': w! sudo tee%'

24

Se você abrir um arquivo para o qual não tem permissão para gravar no vim, então decida que precisa alterá-lo, você pode escrever suas alterações sem sair do vim fazendo :w !sudo tee %
Eu não entendo como isso pode funcionar. Por favor, você pode dissecar isso?
Eu entendo o :w parte, ele grava o buffer atual para o disco, assumindo que já existe um nome de arquivo associado a ele, certo?
Eu também entendo o ! que executa o comando sudo tee e % representa o conteúdo do buffer atual direito?
Mas ainda não entendi como isso funciona.

    
por Ali 04.08.2016 / 13:40

3 respostas

26

A estrutura :w !cmd significa "escreve o buffer atual canalizado através do comando". Então você pode fazer, por exemplo, :w !cat e irá enviar o buffer através de cat .

Agora, % é o nome do arquivo associado ao buffer

Portanto, :w !sudo tee % canalizará o conteúdo do buffer por meio de sudo tee FILENAME . Isso efetivamente grava o conteúdo do buffer no arquivo.

    
por 04.08.2016 / 13:49
7

% representa o nome do arquivo do buffer atual, não seu conteúdo.

então :w !sudo tee % significa canalizar o buffer atual para sudo tee [currentfilename] .

tee está sendo executado como root, portanto, tem acesso de gravação para salvar seu stdin no arquivo.

Veja também link

    
por 04.08.2016 / 13:47
2

Não está certo!

!command executa o comando como um comando filtro , que obtém texto de stdin , do algo e saída para stdout .

Usando w , você enviou o conteúdo do arquivo para stdin de sudo tee % . % é registrador especial no vim, que contém o nome do arquivo atual.

Então você tem sudo tee FILENAME , que enviará tee stdin - conteúdo do arquivo - para o arquivo atual.

    
por 04.08.2016 / 13:52

Tags