¿Cuál es el propósito de los archivos de intercambio?

74

Cuando edito archivos, Vim tiende a crear archivos con nombre , lo que me resulta molesto. Desde , veo que la opción suprime la creación de archivos de intercambio..filename.swpvim -h-n

¿Existe una directiva vimrc que pueda usar para deshabilitar los archivos de intercambio de forma predeterminada?

¿Cuál es el propósito de los archivos de intercambio y qué funcionalidad me perdería al suprimirlos?

200_success
fuente
FWIW, también encuentro molestos los archivos de intercambio, y por un tiempo intenté usar noswapfilecomo se sugiere a continuación. Sin embargo, finalmente cedí y apagué eso, porque aparentemente los beneficios superan las molestias, pero en realidad no recuerdo qué me convenció para restaurar el uso del archivo de intercambio. Probablemente mi computadora se bloqueó y no pude restaurar algunos archivos que había perdido, lo que habría sido trivial con los archivos de intercambio activados.
Kyle Strand

Respuestas:

89

Razones para intercambiar archivos

Los archivos de intercambio almacenan los cambios que ha realizado en el búfer. Si Vim o su computadora se bloquean, le permiten recuperar esos cambios.

Los archivos de intercambio también proporcionan una manera de evitar que varias instancias de Vim editen el mismo archivo. Esto puede ser útil en sistemas multiusuario o simplemente para saber si tiene otro Vim que ya está editando un archivo.

Deshabilitar archivos de intercambio

Si desea deshabilitar la creación de archivos de intercambio por completo (que no recomendaría), puede agregarlos set noswapfilea su .vimrc. Esto establece el valor global de la opción. Luego puede anular eso para buffers específicos usando :setlocal swapfilemientras ejecuta Vim.

Organizar archivos de intercambio

Si su problema es más sobre los archivos adicionales distribuidos alrededor de su sistema de archivos, entonces podría agregar todos los archivos de intercambio en un solo lugar. Por ejemplo, cree un ~/.vim/tmpdirectorio y luego agregue

set directory^=$HOME/.vim/tmp//

a tu .vimrc. La 'directory'opción contiene una lista de directorios que Vim usará para intentar almacenar el archivo de intercambio.

La ^=sintaxis de :setantecede el nombre del directorio al encabezado de la lista, por lo que Vim verificará primero ese directorio.

Al //final del nombre del directorio le dice a Vim que use la ruta absoluta al archivo para crear el archivo de intercambio para que no haya colisiones entre archivos del mismo nombre de diferentes directorios.

Tenga en cuenta que esto evitará que Vim se dé cuenta cuando haya varios usuarios intentando editar el mismo archivo. Dado que el archivo de intercambio no está en el mismo directorio que el archivo original, Vim del otro usuario no sabrá sobre el archivo de intercambio y no les advertirá que ya está siendo editado.

jamessan
fuente
44
¿Cuál es el beneficio de intercambiar archivos sobre deshacer persistente ahora que ha estado en vim por un tiempo?
alpha_989
Yo uso vim-auto-save. ¿Esto no desprecia la necesidad de intercambiar archivos?
Kevin
@ Kevin Depende. Si el complemento está causando un ahorro en cada escenario en el que Vim escribiría el archivo de intercambio, entonces probablemente. De lo contrario, todavía habrá períodos en los que el búfer no se guardará y un archivo de intercambio puede ayudar.
jamessan
@ alpha_989 Son complementarios. Un archivo de intercambio le permite recuperar cambios no guardados. El archivo de deshacer persistente le permite recorrer el historial de deshacer en las sesiones de Vim, pero el archivo solo se escribe cuando guarda.
jamessan
¿Algún método para configurar vim no swap solo para una instancia? por ejemplo vim temp.txt --some-command-that-disable-swap? Mi caso de uso es que algún observador seguirá observando cualquier cambio en el directorio, por lo que solo para entonces desearía deshabilitar el intercambio para evitar una colisión.
Ng Sek Long