¿Por qué Vim guarda archivos con una extensión ~?

180

Descubrí que mientras usa Vim en Windows, Vim guarda el archivo, un .ext.swparchivo que se elimina al cerrar la ventana de Vim y un .ext~archivo.

Supongo que el .ext.swparchivo es una copia de seguridad de la sesión en caso de que Vim se bloquee. .ext~Sin embargo, ¿ cuál es el propósito del archivo? ¿Es este un archivo de copia de seguridad permanente? Es molesto ya que me gustaría copiar todos los archivos en los que estoy trabajando en mi host, sin estos duplicados. ¿Cómo puedo desactivar esto o , si está allí por una buena razón, ocultar los archivos ?

Ross
fuente
¿Tiene algún archivo abierto simultáneamente en más de un lugar, crearán un .ext.swp.
Dirkgently
2
dirkgently: No, aquí puedo abrir un archivo en la única ventana vim y creará el archivo .swp. No estoy demasiado preocupado por eso, ya que se elimina cuando guardo / cierro la ventana.
Ross

Respuestas:

221

El *.ext~archivo es un archivo de respaldo que contiene el archivo tal como estaba antes de editarlo.

El *.ext.swparchivo es el archivo de intercambio, que sirve como archivo de bloqueo y contiene el historial de deshacer / rehacer, así como cualquier otra información interna que Vim necesite. En caso de bloqueo, puede volver a abrir su archivo y Vim restaurará su estado anterior desde el archivo de intercambio (lo cual me parece útil, por lo que no lo apago).

Para desactivar la creación automática de archivos de respaldo, use (en su vimrc):

set nobackup
set nowritebackup

Donde nowritebackupcambia el comportamiento predeterminado "guardar" de Vim, que es:

  1. escribir buffer en el nuevo archivo
  2. eliminar el archivo original
  3. renombrar el nuevo archivo

y hace que Vim escriba el búfer en el archivo original (lo que conlleva el riesgo de destruirlo en caso de un error de E / S). Pero evita que "salten archivos" en el escritorio de Windows con él, que es la razón principal para tenerlo nowritebackupen su lugar.

Tomalak
fuente
77
+1 para you prevent "jumping files" on the Windows desktop. Busqué en Google y encontré esta respuesta
Merlyn Morgan-Graham
1
En realidad, ¿tengo que tener ambos nobackupy nowritebackup? ¿Hay alguna manera de escribir una copia del archivo como copia de seguridad, pero no escribir esto / borrar / renombrar cosas?
Merlyn Morgan-Graham
@Merlyn: Si tiene backup(en lugar de nobackup), Vim creará una copia de seguridad (el *.ext~archivo). Esto no tiene nada que ver nowritebackup.
Tomalak
66
Hay una tabla que describe el comportamiento diferente entre combinación de estos interruptores: help backup-table. Resulta que el ajuste no es nobackupni tampoco nowritebackup, pero en cambio el ajuste backupcopy=yestambién resuelve el problema del "salto". Sin embargo, esto puede dañar el rendimiento, así que para cada uno lo suyo
Merlyn Morgan-Graham
27
En lugar de apagar, set backupdir=~/.vim/backuphaga una copia de seguridad en un directorio en .vimrc o _vimrc en Windows
tsukimi
224

Creo que la mejor solución es colocar estas líneas en su archivo vimrc

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

La primera línea es para archivos de respaldo, la segunda línea para archivos de intercambio. La doble barra al final asegura que no haya conflicto en el caso de que dos archivos tengan el mismo nombre, vea los comentarios (en el momento de esta edición, esta opción solo se acepta para los archivos de intercambio, aún no para los archivos de respaldo ). La ,.permiten vimutilizar el directorio actual si el primero no existe.

Debe crear un directorio en su directorio de inicio llamado vimtmp para que esto funcione. Además, verifique que las copias de seguridad estén habilitadas en su configuración (agregue set backupsi no).

De esa forma, obtienes el beneficio de ambos mundos, no tienes que ver los archivos, pero si algo no funciona, puedes obtener tu archivo de respaldo de vimtmp. No olvides limpiar el directorio de vez en cuando.

usuario183135
fuente
22
+1 Realmente tengo el mío configurado en ~ / .vim / tmp, pero de cualquier manera, esto me ha salvado el culo en más de una ocasión.
JC Yamokoski
11
Por qué lo necesitas ,. al final de cada línea?
shin
9
@shin Vim usará el primer directorio disponible, por lo que en este caso si ~ / vimtmp no existe, usará el directorio de trabajo actual
xixixao
3
@SalmanPK En un mundo ideal, no debería estar editando archivos de configuración directamente en servidores de acceso público
Score_Under
12
Usa dos barras al final del camino. Por ejemplo, establezca backupdir = ~ / .vim / .backup // - el "//" al final del directorio significa que los nombres de archivo se construirán desde la ruta completa al archivo con todos los separadores de ruta sustituidos al porcentaje "% " firmar. Esto asegurará la unicidad del nombre de archivo en el directorio de preservación.
Hacknightly
25

Para desactivar esos archivos, simplemente agregue estas líneas a .vimrc (archivo de configuración vim en un sistema operativo basado en Unix):

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files
rogeriopvl
fuente
12
:set nobackup 

desactivará las copias de seguridad. También puede establecer una dirección de respaldo si aún desea esos archivos de respaldo pero en una carpeta central. De esta manera, su directorio de trabajo no está lleno de archivos ~.

Encontrará más información sobre las copias de seguridad en : copia de seguridad .

f3lix
fuente
12

Y también puede configurar una extensión de copia de seguridad diferente y dónde guardar esas copias de seguridad (prefiero ~/.vimbackupsen Linux). Solía ​​usar copias de seguridad "versionadas" a través de:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

Esto establece una extensión de copia de seguridad dinámica ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).

Zsolt Botykai
fuente
3
es posible que desee incluir cómo configurar el directorio de respaldo, es decir, poner set backupdir=~/.vimbackupssu ~ / .vimrc
rampion el
1
La ayuda de vim describe completamente esta técnica. Ver:help backupext
netjeff
8

Pon esta línea en tu vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


En ese sería el:

C:\Program Files (x86)\vim\_vimrc

archivo para la configuración vim de todo el sistema para todos los usuarios.

Establecer el último noundofilees importante en Windows para evitar la creación de *~archivos tilda después de la edición.


Desearía que Vim tuviera esa línea incluida por defecto. A nadie le gustan los directorios feos.

Deje que el usuario elija si desea habilitar primero las funciones avanzadas de copia de seguridad / deshacer archivos.

Esta es la parte más molesta de Vim.

El siguiente paso podría ser la configuración:

set noeb vb t_vb= " errorbells visualbell

para desactivar el pitido en también :-)


fuente
muchas gracias por esto! "noundofile" fue la opción que finalmente eliminó esa basura espantosa. (¡Y estoy 100% de acuerdo con todo lo demás que has escrito en tu publicación!)
pwmusic el
6

Tienes razón que el .swp vim usa archivo para bloquear y como un archivo de recuperación.

Intente poner set nobackupsu vimrc si no desea estos archivos. Consulte los documentos de Vim para obtener varias opciones relacionadas con la copia de seguridad si desea toda la primicia, o si desea tener archivos .bak en su lugar ...

dwc
fuente
+1 por mencionar el propósito como un archivo de bloqueo. No pensé en eso.
Tomalak
5

La única opción que funcionó para mí fue poner esta línea en mi archivo ~ / .vimrc

establecer noundofile

Las otras opciones que se refieren a los archivos de respaldo no impidieron la creación de los archivos temporales que terminaban en ~ (tilde)

Logan
fuente
Esto finalmente funcionó para mí. ¿Por qué no se menciona esto en otras respuestas? Esto elimina los .<filename>.un~archivos : mientras que las otras opciones solo eliminan los <filename>~archivos.
JLT
0

Tuve que agregar set noundofilea ~ _gvimrc

El directorio "~" se puede identificar cambiando el directorio con el cd ~comando

Josh
fuente