¿Cómo evitar que vim cree (y deje) archivos temporales?


163

¿Por qué vim crea <filename>~archivos? ¿Hay alguna manera de desactivar eso?

Si es para una copia de seguridad (o algo así), uso git para eso.

Además, estos .<filename.with.path.hints>.swparchivos también.

¿Cómo le digo a vim que no los cree, o al menos que limpie después de sí mismo?

EDITAR

whoops, duplicar:

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

Adopté respuesta de rogeriopvl desde allí.

copia literal:

set nobackup       "no backup files
set nowritebackup  "only in case you don't want a backup file while editing
set noswapfile     "no swap files

12
Git nunca lo ayudará a recuperar el trabajo después de un bloqueo del sistema. Git también puede ignorar sus archivos * .swp. = D
vmassuchetto



jajaja, ¿alguien en serio marcó esta pregunta como duplicada después de seis años de publicarla?
Hasen

Respuestas:


78

Recomiendo seguir trabajando con archivos de intercambio (en caso de que Vim se bloquee).

Puede configurar el directorio donde se almacenan los archivos de intercambio, para que no desordenen sus directorios normales:

set swapfile
set dir=~/tmp

Ver también

:help swap-file

44
bueno, nunca los necesité con notepad ++, a menos que digas que vim se bloqueará con demasiada frecuencia.
hasen

8
no, no estaba insinuando que vim se bloquea con demasiada frecuencia (aunque lo he visto bloquearse). Pero para mi entorno de trabajo, la conexión de red a algún host en el que estoy trabajando es bastante inestable, por lo que se produce una edición interrumpida. Los archivos de intercambio ayudan allí.
user55400

9
@ user55400 ¿Has oído hablar de GNU / Screen? (o tmux, o esta alternativa japonesa)
Elazar Leibovich

Agregué esto a mi archivo _vimrc en Windows, y todavía recibo archivos ~ archivos. ¿No estoy haciendo algo correctamente?
FilBot3

2
@noircc Aconsejaría contra el uso de / tmp. En caso de que todo el sistema falle y necesite reiniciar, sus archivos de intercambio desaparecerán.

56

Ponga esto en su archivo de configuración .vimrc.

set nobackup

55
Lo hemos hecho en Windows 8.1 con Vim. Los archivos de intercambio todavía están presentes.
Shaun Luttin

1
Shaun, es posible que también necesite agregar "set noswapfile" a su .vimrc para evitar que se creen nuevos archivos de intercambio, como se menciona en la edición de la pregunta original.
Earl Zedd

¿Qué pasa con la :sesión como prefijo antes de la setpalabra clave? ¿Se requiere? No parece un comentario ..
Stephane

@Stephane, un :prefijo significa que se hace en modo comando, pero no necesita uno :al escribir su vimrc
TankorSmash

Esa no es realmente una buena idea. Lo anterior de dejar que estos archivos se sientan en la carpeta temporal / ya es mucho mejor.
MonsieurMan

36

; Para que los usuarios de Windows regresen al directorio temporal

set backup
set backupdir=C:\WINDOWS\Temp
set backupskip=C:\WINDOWS\Temp\*
set directory=C:\WINDOWS\Temp
set writebackup

66
Tuve que agregar set undodir = C: \ WINDOWS \ Temp

Esto no funcionó para mí, tuve que usar set dir = $ TEMP en su lugar
Frank Schmitt

10

Creé un complemento llamado "noswapsuck" que solo habilita el archivo de intercambio cuando el búfer contiene cambios no guardados. Una vez que se han guardado los cambios, se borra el archivo de intercambio. Por lo tanto, se eliminarán los archivos de intercambio que contengan el mismo contenido que el archivo en el disco.

Consiguelo aqui: noswapsuck.vim

Me ha funcionado bien, pero nunca lo había publicado antes, por lo que agradecería cualquier comentario.

Ventajas:

  • ¡Los únicos archivos de intercambio que permanecen en su disco serán archivos de intercambio importantes que realmente difieren del archivo!

Desventajas

  • Si el búfer tiene un archivo de intercambio, no se detectará cuando se abra el archivo por primera vez. Solo se detectará cuando swapfileesté habilitado, que es cuando comience a editar el búfer. Eso es molestamente tarde y te interrumpirá. (Resuelto: ahora buscamos un archivo de intercambio preexistente cuando se abre un búfer, activando temporalmente la swapfileopción nuevamente).

  • Si está trabajando en un entorno en el que desea minimizar las escrituras en disco (p. Ej., Baja potencia o archivos montados en una red, o editar un archivo enorme), entonces no es ideal seguir eliminando y volviendo a crear el archivo de intercambio en cada guardar y editar En tales situaciones, puede hacer:

    :let g:NoSwapSuck_CloseSwapfileOnWrite = 0
    

    que mantendrá el archivo de intercambio después de una escritura, pero aún lo eliminará cuando el búfer pierda el foco.

Por cierto, tengo otro pequeño complemento :DiffAgainstFileOnDiskque puede ser bastante útil después de presionar (r)ecover, para verificar si el búfer que recuperó es más nuevo o más antiguo que el archivo existente, o es idéntico a él.


8

En Windows agregue las siguientes líneas a _vimrc

" store backup, undo, and swap files in temp directory
set directory=$HOME/temp//
set backupdir=$HOME/temp//
set undodir=$HOME/temp//

5

Esta respuesta se aplica al uso de gVim en Windows 10. No puedo garantizar los mismos resultados para otros sistemas operativos.

Añadir:

set nobackup
set noswapfile
set noundofile

A su archivo _vimrc.

Nota: Esta es la respuesta directa a la pregunta (para Windows 10) y probablemente no sea lo más seguro (lea las otras respuestas), pero esta es la solución más rápida en mi caso.


0

Tengo esta configuración en mi Ubuntu .vimrc. No veo ningún archivo de intercambio en mis archivos de proyecto.

set undofile
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

set backup                        " enable backups
set swapfile                      " enable swaps
set undodir=$HOME/.vim/tmp/undo     " undo files
set backupdir=$HOME/.vim/tmp/backup " backups
set directory=$HOME/.vim/tmp/swap   " swap files

" Make those folders automatically if they don't already exist.
if !isdirectory(expand(&undodir))
    call mkdir(expand(&undodir), "p")
endif
if !isdirectory(expand(&backupdir))
    call mkdir(expand(&backupdir), "p")
endif
if !isdirectory(expand(&directory))
    call mkdir(expand(&directory), "p")
endif
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.