Quali sono le differenze tra: wq <cr>: x <cr> e ZZ all'uscita da vim?


38

Vi e Vim, come tutti sapete, hanno molti sinonimi. Ci sono tre modi che conosco per salvare il file ed uscire da Vim e Vi. Questi sono : wq <cr> , : x <cr> e ZZ . Ho sentito che questi sono diversi in qualche modo.

Ci sono differenze pratiche tra l'uso di:

:x<cr>

:wq<cr>

o

ZZ

salvare il file ed uscire da Vim e Vi?


La semplice risposta: sono uguali.
JJoao,

2
Essi sono non lo stesso. Non conosco esattamente la differenza, ma si tratta di scrivere e non scrivere nel file se non sono state apportate modifiche (ovvero l'aggiornamento del timestamp).
Wildcard il

1
Inoltre, da un punto di vista pratico , ZZ(o ZQ) è più breve e più facile da digitare ...
VanLaser,

:help :wq, :help ZZ, :help :x. È proprio lì nei documenti.
Antony,

Risposte:


40

Dalla documentazione di Vim :xe ZZsono equivalenti; salvano il file solo se è stato modificato, quindi chiudono 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'altra parte scrive il file ed esce da Vim (assumendo le autorizzazioni appropriate).


9

Come Akshay ha sottolineato, la documentazione di Vim spiega, che :xe ZZsono equivalenti e solo salvare un file se il buffer associato è stato modificato. Considerando che :wqsalva il buffer nel file corrispondente, anche se è invariato.

In entrambi i casi, il contenuto del buffer verrà salvato su disco. Ovviamente il risultato è lo stesso, quindi perché preoccuparsi, giusto? Ma aspetta ... C'è una differenza sottile, ma non irrilevante.

Se si esce da Vim via :xe non è stata apportata alcuna modifica al buffer, non verranno apportate modifiche al tempo di modifica di quel file. D'altra parte, se si esce da :wq, il tempo di modifica cambierà, poiché il file viene tecnicamente riscritto (salvato di nuovo).

Ciò può avere un certo impatto in determinate situazioni. Ad esempio, un processo di backup che dipende dal tempo di modifica, potrebbe archiviare questo file (e potenzialmente inviarlo sulla rete) anche se non sono state incluse informazioni aggiuntive. O qualche processo di monitoraggio potrebbe suonare un allarme se rileva che (per esso) il file è stato modificato ...

Modifica: ho dimenticato di menzionare, per lasciare un buffer / file modificato senza cambiare il tempo di modifica, funzionerà anche un :q(senza w).


2
Inoltre, alcuni autocomandi verranno eseguiti solo quando il file viene scritto. Non funzioneranno se il file non è cambiato e Vim viene chiuso con ZZ o: x.
Spidey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.