Porque :w
e :wq
são dois comandos diferentes com opções diferentes.
Aqui está a descrição do comando :w
com a opção !{cmd}
:
:[range]w[rite] [++opt] !{cmd}
Execute {cmd} with [range] lines as standard input
(note the space in front of the '!'). {cmd} is
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.
Observe que :w!
e :w !{cmd}
são duas coisas completamente diferentes; no primeiro, o ponto de exclamação significa "forçar gravação", no segundo é uma espécie de sinal de pipe para passar todo o intervalo de texto para o comando subseqüente (no seu caso, para tee
executar como superusuário, que retorna o arquivo para vi e salva-o no nome do arquivo representado pelo curinga %
).
Infelizmente, não existe essa opção para o comando :wq
. As únicas outras formas disponíveis deste comando são :wq!
(aqui o ponto de exclamação não é para canalizar para outro comando, mas para force quit, muito parecido com :w!
) e :w[!] {file}
.