Apenas um nome de arquivo permitido erro

6

Às vezes, esqueço de sudo vim e abro arquivos para os quais não tenho permissão de gravação. Eu vi esta postagem e foi muito útil.

Quando eu fiz :w !sudo tee % , ele me pediu uma senha e, em seguida, as opções (O)K e (L)OAD . Isso funcionou bem. Mas quando eu fiz :wq !sudo tee % , vim me deu um erro -

E172: Only one file name allowed

Por que não me deixou ir ao prompt depois de wq . Eu não entendo esse erro.

    
por Hussain Tamboli 11.10.2012 / 15:09

1 resposta

7

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} .

    
por 11.10.2012 / 16:26

Tags