¿Cuáles son las diferencias entre: wq <cr>: x <cr> y ZZ al salir de vim?


38

Vi y Vim, como todos saben, tienen muchos sinónimos. Hay tres formas que conozco para guardar el archivo y salir de Vim y Vi. Estos son : WQ <cr> , : x <cr> y ZZ . He oído que estos son diferentes de alguna manera.

¿Hay alguna diferencia práctica entre usar:

:x<cr>

:wq<cr>

o

ZZ

guardar el archivo y salir de Vim y Vi?


La respuesta simple: son lo mismo.
JJoao

2
No son lo mismo. No sé exactamente la diferencia, pero se trata de escribir frente a no escribir en el archivo si no se han realizado cambios (es decir, actualizar la marca de tiempo).
Comodín el

1
Además, desde un punto de vista práctico , ZZ(o ZQ) es más corto y más fácil de escribir ...
VanLaser

:help :wq, :help ZZ, :help :x. Está justo ahí en los documentos.
Antony

Respuestas:


40

De la documentación de Vim, :xy ZZson equivalentes; solo guardan el archivo si se ha modificado, luego salen de 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 otro lado escribe el archivo y sale de Vim (asumiendo los permisos adecuados).


9

Como Akshay señaló, la documentación de Vim explica, que :xy ZZson equivalentes y sólo guardar un archivo si el buffer asociado se ha cambiado. Mientras que :wqguarda el búfer en el archivo correspondiente, incluso si no ha cambiado.

En ambos casos, el contenido del búfer se guardará en el disco. Obviamente el resultado es el mismo, entonces, ¿por qué molestarse, verdad? Pero espera ... Hay una diferencia sutil, pero no irrelevante.

Si sale de Vim vía :xy no ha habido cambios en el búfer, no habrá cambios en la hora de modificación de ese archivo. Por otro lado, si sale a través de :wq, el tiempo de modificación cambiará, ya que el archivo se reescribe técnicamente (se guarda nuevamente).

Esto puede tener algún impacto en ciertas situaciones. Por ejemplo, un proceso de copia de seguridad que depende del tiempo de modificación, podría almacenar este archivo (y potencialmente enviarlo a través de la red) incluso si no se ha incluido información adicional. O algún proceso de monitoreo podría hacer sonar una alarma si detecta que (para ello) el archivo ha cambiado ...

Editar: Olvidé mencionar que para dejar un búfer / archivo modificado sin cambiar el tiempo de modificación, a :q(sin el w) también funcionará.


2
Además, algunos comandos automáticos se ejecutarán solo cuando se escriba el archivo. No se ejecutarán si el archivo no ha cambiado y Vim se cierra con ZZ o: x.
Spidey
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.