Aquí hay otra manera de explicar la diferencia entre :write
(acceso directo :w
) y :update
(acceso directo :up
):
Siempre que escribimos :w
, VIM, literalmente, va a escribir el búfer en el archivo, sin importar la memoria intermedia está vacía o no. Que MEANs actualizará el timestamp del archivo al tiempo :w
mecanografiado, incluso si el contenido del archivo NO cambió.
Mientras que con :up
, al igual que el manual de ayuda vim dice, el VIM se actualizará sólo la marca de tiempo cuando el archivo ha sido cambiado.
Por ejemplo, cuando abra un archivo sólo para lectura, pero que se puede accidentalmente (o, habitualmente) tipo :w
o :wq
, y si me importa acerca de las marcas de tiempo del archivo (es decir, la última hora de modificación) , entonces no hay vuelta atrás.Los ejemplos siguientes (en shell BASH) muestran los efectos:
$ 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
Ahora vamos a vim el archivo y tratar :up
y :w
comando respectivamente:
$ vim test.txt
No editando, sólo tiene que escribir :up
y luego :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!
Como puede ver, solo se modifica el tiempo de acceso, esto es porque leemos (accedemos) los datos en el archivo. Pero el tiempo de modificación de & sigue siendo el mismo.
Ahora vamos a vim nuevo y utilizar el comando :w
.
$ vim test.txt
No editando, pero esta vez de tipo :w
y luego :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!
Ahora podemos ver la diferencia entre :up
y :w
! Los datos del archivo se modifican y el estado del archivo también se modifica, aunque no hay nada realmente cambiado en el archivo.
Así que para evitar esto, se puede asignar el comando :w
al comando :up
usando :map :w :up
.
Puede usar bang ('!') Con el comando de actualización. – ZyX