Uso de! no VIM

6

Vi que às vezes :q funciona, mas às vezes precisamos usar :q! . Este é o caso de muitos comandos. Eu queria saber qual é o uso geral de ! em vim e quando usá-lo. Eu tentei google isso, mas parece que a pesquisa está omitindo o ponto de exclamação.

    
por user2179293 26.08.2013 / 18:33

2 respostas

20

Quando você não fizer alterações no conteúdo real do arquivo, poderá simplesmente sair com :q . No entanto, se você fizer edições, o vim não permitirá uma simples saída porque você pode não querer abandonar essas mudanças (especialmente se você estiver no vim por muito tempo editando e usar :q por acidente). O :q! neste caso é uma força a operação de saída (substituir o aviso). Você pode emitir uma parada forçada para todas as janelas abertas (como aquelas abertas com Ctrl w n ) com :qa! .

Você pode gravar as alterações e sair com :wq (ou :x ), e isso às vezes falhará (o arquivo foi aberto como somente leitura ( -R na linha de comando ou o vim foi chamado com a view command), nesse caso, você pode forçar a operação de gravação com :wq! .

Como um aparte, você também pode usar ZQ para fazer a mesma operação como :q! e ZZ para fazer o mesmo que :wq , o que pode ser mais fácil para digitação:)

O Vim também tem uma ajuda interna que você pode acessar via :help ; A saída tem sua própria página de tópico rápida: :help Q_wq .

    
por 26.08.2013 / 18:42
2

Não há "uso geral" de ! , é apenas um modificador. Cada comando escolhe o que um ! extra fará com ele.

Em muitos casos , os comandos são programados para que ! os force. Exemplos incluem q que você mencionou, mas também save : save! sobrescreverá o arquivo se ele já existir, enquanto save retornará um erro e sugerirá usar save! se tiver certeza do que você ' está fazendo.

Finalmente ! usado por si só é usado para comandos do shell, por exemplo, :!ls ou :!mkdir foo .

No caso de read (do seu comentário), o comando read! <something> é interpretado pelo Vim como "execute <something> e read (significando, no Vim, escreva para buffer) sua saída" . Portanto, aqui é como se o ! se comportasse não como um modificador do comando read , mas como o comando independente ! . Pode ser que o comando read não declare uma variante com ! , então o Vim apenas interpreta o resto de forma independente (portanto, lê um " ! usado sozinho" após read ) ou que read declara um variante com ! que tem esse comportamento específico ( "executar o resto como shell" ) que acontece para imitar o que " ! usado sozinho" faz.

Eu acho que o take-away é: não há regra, cada comando define o que ! fará, e enquanto há uma tentativa de ter algum tipo de consistência no efeito de modificadores, não tendo regras super-estritas (como " ! will always seja para forçar" ) permite ter mais comportamentos úteis com menos pressionamentos de teclas, o que também é uma vantagem.

    
por 15.11.2017 / 09:47

Tags