2010-06-22 20 views
13

Ho capito che in gvim Control+S come il comando :update. Io risparmio sempre usando Ctrl+S, quindi presumo che lo :update sia un altro modo per dire "aggiorna le modifiche". :update è praticamente lo stesso di :w? Avrò problemi se sostituisco :update per :w!?Qual è la differenza tra: update e: w in Vim?

edit: ho voluto cambiare :update-:w! becauase Ho un file che dice "pronto solo per favore aggiungere !". E ho pensato che questo era l'unica soluzione

+0

È possibile utilizzare bang ('!') Con il comando di aggiornamento. – ZyX

risposta

4

Dalla aiuto:

:[range]up[date][!] [++opt] [>>] [file] 
         Like ":write", but only write when the buffer has been 
         modified. {not in Vi} 
2

:help :update dice:

Come ": scrivere", ma scrivere solo quando il buffer è stato modificato.

15

:help :update è abbastanza chiaro su questo:

Like ":write", but only write when the buffer has been modified. 

Quindi il file verrà scritto solo se il contenuto del buffer sono stati effettivamente modificati. Quindi se usi :update (o premi Ctrl + S in GVim) e non ci sono cambiamenti non salvati nel buffer, non farà nulla.

+0

Continuo a dimenticare di usare ': help' e finire su StackOverflow. Sottolineando in questa risposta è stato utile. –

9

Ecco un altro modo per spiegare la differenza tra :write (scorciatoia :w) e :update (scorciatoia :up):

Ogni volta che si digita :w, Vim letteralmente scrivere il buffer per il file, non importa il buffer è vuoto o no. Il numero MEAN aggiornerà la data timestamp del file all'ora :w digitata, anche se il contenuto del file NON è stato effettivamente modificato.

Mentre con :up, proprio come il vim aiuto manuale dice, il VIM sarà solo aggiornare il timestamp quando il file è stato modificato.


Per esempio, quando ho aprire un file solo per la lettura, ma può accidentalmente (o, abitualmente) tipo :w o :wq, e se lo faccio a cuore i timestamp del file (cioè il tempo modificato ultimo) , quindi non si può tornare indietro.Gli esempi che seguono (in shell BASH) mostrano gli effetti:

$ touch test.txt 
$ 
$ stat test.txt 
     File: `test.txt' 
    Size: 0   Blocks: 0   IO Block: 4096 regular empty file 
Device: 811h/2065d Inode: 98828498 Links: 1 
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank) 
Access: 2014-03-15 22:30:52.159258193 +0800 
Modify: 2014-03-15 22:30:52.159258193 +0800 
Change: 2014-03-15 22:30:52.159258193 +0800 

ora diamo vim il file e cercare :up e :w comando rispettivamente:

$ vim test.txt 

Non modifica, è sufficiente digitare :up e quindi :q

$ stat test.txt 
    File: `test.txt' 
    Size: 0   Blocks: 0   IO Block: 4096 regular empty file 
Device: 811h/2065d Inode: 98828498 Links: 1 
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank) 
Access: 2014-03-15 22:33:10.002269244 +0800 <--- Different! 
Modify: 2014-03-15 22:30:52.159258193 +0800 <--- Didn't Change! 
Change: 2014-03-15 22:30:52.159258193 +0800 <--- Didn't Change! 

Come potete vedere, solo il tempo di accesso è cambiato, questo perché leggiamo (Access) i dati nel file. Ma il tempo di modifica del tempo di modifica & è sempre lo stesso.


vim di Ora diamo di nuovo e utilizzare il comando :w.

$ vim test.txt 

Non modifica, ma questa volta di tipo :w e poi :q

$ stat test.txt 
    File: `test.txt' 
    Size: 0   Blocks: 0   IO Block: 4096 regular empty file 
Device: 811h/2065d Inode: 98828538 Links: 1 
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank) 
Access: 2014-03-15 22:40:26.728239153 +0800 <--- Different Again! 
Modify: 2014-03-15 22:40:26.728239153 +0800 <--- Changed! 
Change: 2014-03-15 22:40:26.728239153 +0800 <--- Changed! 

Ora possiamo vedere la differenza tra :up e :w! I dati del file sono Modificati e anche lo stato del file è Modificato, sebbene non ci sia nulla di nel modificato nel file.


Quindi, per evitare questo, si può assegnare il comando :w al comando :up utilizzando :map :w :up.

Problemi correlati