2010-06-22 17 views
13

Me di cuenta de que en gvim Control+S como el comando :update. Siempre guardo utilizando Ctrl+S, así que supongo que :update es otra forma de decir "actualizar los cambios". ¿Es :update básicamente lo mismo que escribir :w? ¿Tendré problemas si reemplazo :update por :w!?¿Cuál es la diferencia entre: actualizar y: w en Vim?

edición: Quería cambiar :update a :w! becauase Tengo un archivo que dice "listo sólo por favor añadir !." Y pensé que esta era la única solución

+0

Puede usar bang ('!') Con el comando de actualización. – ZyX

Respuesta

4

De la ayuda:

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

:help :update dice:

Como ": escribir", pero sólo escribir cuando la memoria intermedia se ha modificado.

15

:help :update es bastante claro en que:

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

Así que el archivo sólo será por escrito, si el contenido de la memoria intermedia en realidad han sido cambiados. Entonces, si usa :update (o presiona Ctrl + S en GVim) y no hay cambios no guardados en el búfer, no hará nada.

+0

Me olvido de usar ': help' y termino en StackOverflow. Enfatizarlo en esta respuesta fue útil. –

9

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.

Cuestiones relacionadas