Quelles sont les différences entre: wq <cr>: x <cr> et ZZ lors de la sortie de vim?

39

Vi et Vim, comme vous le savez tous, ont beaucoup de synonymes. Je connais trois méthodes pour enregistrer le fichier et quitter Vim et Vi. Ce sont : wq <cr> , : x <cr> et ZZ . J'ai entendu dire que ceux-ci sont différents d'une certaine manière.

Existe-t-il des différences pratiques entre l'utilisation de:

:x<cr>

:wq<cr>

ou

ZZ

enregistrer le fichier et quitter Vim et Vi?

wefwefa3
la source
La réponse simple: ils sont les mêmes.
JJoao
2
Ils ne sont pas les mêmes. Je ne connais pas exactement la différence, mais il s'agit d'écrire ou non d'écrire dans le fichier si aucune modification n'a été apportée (par exemple, la mise à jour de l'horodatage).
Wildcard
1
Aussi, d'un point de vue pratique , ZZ(ou ZQ) est plus court et plus facile à taper ...
VanLaser
:help :wq, :help ZZ, :help :x. C'est juste là dans la documentation.
Antony

Réponses:

40

D'après la documentation de Vim, :xet ZZsont équivalents; ils ne sauvegardent le fichier que s'il a été modifié, puis quitte 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 d'autre part écrit le fichier et quitte Vim (en supposant que les autorisations appropriées).

akshay
la source
10

Comme Akshay a souligné, la documentation de Vim explique que :xet ZZsont équivalents et VALIDER un fichier si le tampon associé a été modifié. Attend que :wqle tampon est sauvegardé dans le fichier correspondant, même s'il est inchangé.

Dans les deux cas, le contenu du tampon sera sauvegardé sur le disque. Évidemment, le résultat est le même, alors pourquoi se donner la peine, non? Mais attendez… Il y a une différence subtile, mais non dénuée de pertinence.

Si vous quittez Vim via :xet que la mémoire tampon n'a pas été modifiée, l'heure de modification de ce fichier ne sera pas modifiée. Par contre, si vous quittez via :wq, l’heure de modification changera, le fichier étant techniquement réécrit (enregistré à nouveau).

Cela peut avoir un impact dans certaines situations. Par exemple, un processus de sauvegarde dépendant de la date de modification peut stocker ce fichier (et éventuellement l'envoyer sur le réseau) même si aucune information supplémentaire n'a été incluse. Un processus de surveillance peut également déclencher une alarme s’il détecte que le fichier a été modifié (pour ce faire) ...

Edit: j’ai oublié de mentionner, afin de laisser un tampon / fichier modifié sans changer l’heure de modification, un :q(sans le w) fonctionnera également.

m4110c
la source
3
De plus, certaines autocommandes ne s'exécutent que lorsque le fichier est écrit. Ils ne fonctionneront pas si le fichier n'a pas changé et que Vim est arrêté avec ZZ ou: x.
Spidey