Quais são as diferenças entre: wq <cr>: x <cr> e ZZ ao sair do vim?


38

Vi e Vim, como todos sabem, têm muitos sinônimos. Existem três maneiras que eu conheço de salvar o arquivo e sair do Vim e Vi. Estes são : wq <cr> , : x <cr> e ZZ . Ouvi dizer que estes são diferentes de alguma forma.

Existem diferenças práticas entre o uso de:

:x<cr>

:wq<cr>

ou

ZZ

salvar o arquivo e sair do Vim e Vi?


A resposta simples: eles são os mesmos.
precisa saber é

2
Eles não são os mesmos. Eu não sei exatamente a diferença, mas é algo sobre escrever vs. não gravar no arquivo se nenhuma alteração tiver sido feita (ou seja, atualizar o carimbo de data / hora).
Wildcard

1
Além disso, a partir de uma prática ponto de vista, ZZ(ou ZQ) é mais curto e mais fácil de escrever ...
VanLaser

:help :wq, :help ZZ, :help :x. Está aí nos documentos.
Antony

Respostas:


40

Da documentação do Vim, :xe ZZsão equivalentes; eles salvam o arquivo apenas se ele tiver sido modificado e feche o Vim:

Write current file, if modified, and quit (same as ":x").  
(Note: If there are several windows for the
current file, the file is written if it was modified and the window is closed).

:wq por outro lado, grava o arquivo e sai do Vim (assumindo permissões apropriadas).


9

Como akshay apontou, a documentação do Vim explica isso :xe ZZé equivalente e salva apenas um arquivo se o buffer associado tiver sido alterado. Considerando que :wqsalva o buffer no arquivo correspondente, mesmo que ele seja inalterado.

Nos dois casos, o conteúdo do buffer será salvo no disco. Obviamente, o resultado é o mesmo, então por que se preocupar, certo? Mas espere ... Há uma diferença sutil, mas não irrelevante.

Se você sair do Vim via :xe não houver alterações no buffer, não haverá alterações no horário de modificação desse arquivo. Por outro lado, se você sair via :wq, o tempo de modificação será alterado, pois o arquivo é tecnicamente reescrito (salvo novamente).

Isso pode ter algum impacto em determinadas situações. Por exemplo, um processo de backup que depende da hora da modificação pode armazenar esse arquivo (e potencialmente enviá-lo pela rede), mesmo que nenhuma informação adicional tenha sido incluída. Ou algum processo de monitoramento pode tocar um alarme se detectar que (para ele) o arquivo foi alterado ...

Edit: esqueci de mencionar, para deixar um buffer / arquivo modificado sem alterar o tempo de modificação, um :q(sem o w) também funcionará.


2
Além disso, alguns comandos automáticos serão executados somente quando o arquivo for gravado. Eles não serão executados se o arquivo não tiver sido alterado e o Vim for encerrado com ZZ ou: x.
Spidey
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.