¿Vim guarda automáticamente?

13

De :help swap-file:

Actualizando el archivo de intercambio

El archivo de intercambio se actualiza después de escribir 200 caracteres o cuando no ha escrito nada durante cuatro segundos. Esto solo sucede si se cambió el búfer, no cuando solo te moviste. La razón por la que no se mantiene actualizado todo el tiempo es que esto ralentizaría demasiado el trabajo normal. Puede cambiar el recuento de 200 caracteres con la opción 'updatecount'. Puede configurar la hora con la opción 'updatetime'. El tiempo se da en milisegundos. Después de escribir en el archivo de intercambio, Vim sincroniza el archivo en el disco. Esto lleva algo de tiempo, especialmente en sistemas Unix ocupados. Si no desea esto, puede configurar la opción 'swapsync' en una cadena vacía. Sin embargo, el riesgo de perder el trabajo aumenta. En algunos sistemas que no son Unix (MS-DOS, Amiga), el archivo de intercambio no se escribirá en absoluto.

De esto tengo algunas preguntas:

  1. ¿Esto significa que Vim guarda automáticamente su trabajo de vez en cuando?

  2. "Después de escribir en el archivo de intercambio, Vim sincroniza el archivo en el disco". ¿Qué significa esto? ¿Esto se refiere al archivo que se está escribiendo primero en la memoria y luego en el disco o es algo más?

  3. Digamos que estoy tomando apuntes de clase: escribo rápido y tengo poca necesidad de dejar el modo Insertar. Pero muchas veces cambio a Normal solo para guardar mi trabajo. ¿Debo hacer esto o Vim se asegura de que la mayor parte de mi trabajo se guarde aunque no salga del modo Insertar?

Gonçalo Ribeiro
fuente

Respuestas:

9
  1. Sí, se guarda para intercambiar archivos.

Puede hacer una prueba rápida para tener una idea de esto. Ve a un directorio. Di vim notest.txty escribe un texto. Ni siquiera tiene que guardar el archivo.

Si enumera archivos en el directorio de trabajo, encontrará un archivo de intercambio. Cópielo en un directorio diferente (donde no tiene el archivo "notes.txt", como se dice) vim notest.txt.

Recibirá una nota sobre el intercambio existente, su modificación y las opciones de abrir como solo lectura, recuperación, etc. ¡Elija recuperar y listo! Una "copia" de su archivo.

  1. Sí, el intercambio se lleva a cabo en la memoria.

Cuando Vim lee un archivo, lo agrega a la RAM. Eso es tanto para los existentes como para los nuevos (archivos aún no guardados). A medida que se guarda el intercambio, se vacía en el disco. El disco duro. De la RAM.

  1. Si y no.

Con la configuración predeterminada, se guarda la mayor parte de su trabajo. Eso es por cada 200 caracteres ingresados, o cuando tiene una pausa de 4 segundos. Aunque confío en que se guardará el archivo de intercambio, me gusta guardar mi trabajo cuando sé que estoy en un sistema inestable. Pero, dicho eso, uno está bastante seguro de mantener el trabajo a menos que uno sea muy desafortunado y el sistema de alojamiento entre en pánico justo después de escribir una oración muy importante.

En resumen, es suficiente para ahorrar cuando termina la conferencia. Si el sistema se detiene por cualquier razón en medio de una clase, el trabajo es hasta allí en el intercambio.

Por supuesto: si tiene mala suerte, se puede producir un bloqueo mientras se escribe el archivo de intercambio. Como resultado, el archivo de intercambio podría estar dañado. Nunca he experimentado esto, y no estoy seguro de qué partes del archivo pueden estar en mal estado, pero vale la pena pensarlo. Como el archivo de intercambio es binario (a falta de una palabra mejor), parece ser que es más frágil que un archivo de texto sin formato.


Como nota al margen. Al menos cuando se usa el directorio de trabajo para el intercambio, el archivo de intercambio es independiente de la ubicación cuando se trata de recuperación. Como tal, puede copiar el archivo de intercambio en una nueva ubicación y recuperar el archivo como un nuevo archivo. Solo tenga en cuenta que el nombre del archivo está codificado en el intercambio. Como tal no puedes decir:

cp .foo.txt.swp .bar.txt.swp

y

vim bar.txt

y esperar el archivo de intercambio de foo.txt.

Si está muy interesado, puede hacer (en * nix):

xxd -s 108 -l 800 -ps .foo.txt.swp | xxd -r -p

para obtener la ruta (con algunas peculiaridades) del archivo original. Como verá, se agrega la ruta completa, por ejemplo:

~user/blah/blah/notes.txt

pero solo se usa el nombre base en la verificación de intercambio.

En ese sentido, también puede consultar la vim -ropción, que enumera los archivos de intercambio en los directorios actuales y anteriores. Ver :h crash-recoverycon subtemas.

Runium
fuente
0

Para mí está bien guardar el búfer cada vez que se cambia el texto:

autocmd TextChanged,TextChangedI <buffer> silent write

Lo encontré aquí . Esto funciona para mi.

simhumileco
fuente