Deshabilitar la creación de archivos de intercambio en vim

216

¿Hay alguna manera de deshabilitar la .swpcreación de archivos en vim? o al menos crearlos todos en un solo lugar para que pueda encontrarlos y eliminarlos fácilmente.

Los encuentro especialmente molestos cuando copio el directorio principal mientras edito al mismo tiempo. Por supuesto, sé que puedo usar find -exec para buscarlos y eliminarlos. Pero quiero una solución más práctica.

Nadia Alramli
fuente

Respuestas:

255

Para deshabilitar los archivos de intercambio desde vim, escriba

:set noswapfile

Para deshabilitar los archivos de intercambio permanentemente, agregue lo siguiente a su ~/.vimrcarchivo

set noswapfile

Para obtener más detalles, consulte los documentos de Vim en el archivo de intercambio

dwc
fuente
66
Sin embargo, los archivos de intercambio son buenos si su editor falla (corte de energía, etc.), solo tenga en cuenta.
koonse
1
Otra opción es usar el archivo de intercambio, pero dejarlo en la memoria, para que no siga escribiendo en el disco duro. Esto no puede evitar que pierda el archivo durante una interrupción, pero si abre el mismo archivo en otro vim, se lo informará de inmediato. El comando es: set directory = / dev / shm
webbertiger
La respuesta de trusktr le permite mantener las ventajas de los archivos de intercambio al tiempo que aborda la preocupación del OP.
jpaugh
Desde el interior de vim también puede deshabilitar el archivo de intercambio al abrir un archivo::noswapfile edit /path/to/file
Torkel Bjørnson-Langen
Mi filosofía personal sobre la pérdida de datos es DBAB y guardar a menudo ...
Samy Bencherif
156

Establezca las siguientes variables en .vimrc o / etc / vimrc para que vim coloque los archivos de intercambio, copia de seguridad y deshacer en una ubicación especial en lugar del directorio de trabajo del archivo que se está editando:

set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//

El uso de barras diagonales dobles en la ruta le dice a vim que habilite una función donde evita las colisiones de nombres. Por ejemplo, si edita un archivo en una ubicación y otro archivo en otra ubicación y ambos archivos tienen el mismo nombre, no desea que se produzca una colisión de nombres en ~ / .vim / swap /. Si especifica ~ / .vim / swap // con dos barras diagonales finales, vim creará archivos de intercambio utilizando la ruta completa de los archivos que se están editando para evitar colisiones (las barras en la ruta del archivo se reemplazarán por el símbolo de porcentaje%).

Por ejemplo, si edita /path/one/foobar.txt y /path/two/foobar.txt, verá dos archivos de intercambio en ~ / .vim / swap / que se denominan% path% one% foobar.txt y% path% two% foobar.txt, respectivamente.

trusktr
fuente
También podría agregar que en algún momento los archivos de copia de seguridad guardados podrían guardar una máscara de desarrollo
Bartek Skwira
Comentario: (no crítica), eso parece bueno principalmente para el desarrollo porque para la lectura de archivos y pequeñas ediciones o el mantenimiento de notas sin importancia, que es una gran parte del uso de vim para muchas personas, parece que es mejor dejar de lado un trabajo adicional de bookeeping. Personalmente prefiero que todos los trabajos simplemente no tengan intercambios u otras copias de seguridad automáticas. Si realmente necesito desarrollar algo, prefiero tener un marco de más alto nivel para protegerme, preferiblemente con control de versión de código, etc.
j riv
@LelaDax Cierto, la mayoría de las veces estos archivos son en su mayoría inútiles porque uso git para todo mi código fuente. Sin embargo, en raras ocasiones (como un accidente) han sido útiles. Pero en realidad, el historial de deshacer que uso mucho. Es mucho más fácil navegar tan rápido que consultar git commits para ver el historial anterior. gundo hace que sea agradable y fácil navegar el árbol de deshacer. Sin embargo, podría vivir sin los archivos de intercambio y copia de seguridad.
trusktr
26
Solo para tu información, para las personas que son nuevas (como yo, jaja ...), tienes que ir a ~ / .vim / y hacer los directorios tú mismo. No los creará automáticamente por ti.
agosto
1
También podría escribir un código en su vimrc para crear automáticamente las carpetas por usted, que es lo que hice en la mía. Entonces, en los sistemas nuevos, solo obtengo mi vimrc, y se encarga del resto.
trusktr
42

Encontré la respuesta aquí :

vim -n <file>

abre el archivo sin swapfile.

Adicionalmente:

set dir=/tmp

in .vimrccrea los archivos de intercambio en /tmp.

markus_b
fuente
¿Qué pasa con los *.ext~archivos de copia de seguridad? ¿Existe alguna opción de línea de comando para deshabilitarlos también?
Salman von Abbas
¡Eso es muy útil para esos archivos enormes únicos! Gracias.
Felipe Alvarez
28

Aquí están mis ajustes personales de copia de seguridad ~ / .vimrc

" backup to ~/.tmp 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set backupskip=/tmp/*,/private/tmp/* 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set writebackup
cpjolicoeur
fuente
13

Estoy de acuerdo con aquellos que se preguntan por qué vim necesita todas estas cosas de 'recuperación ante desastres' cuando ningún otro editor de texto se molesta en hacerlo. No quiero que vim cree NINGÚN archivo adicional en el directorio del archivo editado cuando lo estoy editando, muchas gracias. Con ese fin, tengo esto en mi _vimrcpara deshabilitar los archivos de intercambio y mover los irritantes archivos de 'copia de seguridad' al directorio Temp:

" Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
"set nobackup

" Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
set backupdir=C:\Windows\Temp

" Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
set noswapfile
Jez
fuente
99
Creo que el hecho de que otros editores no se molesten con él se refleja mal en los otros editores más de lo que se refleja mal en vi (m). La elección de hacer que el mismo directorio sea el lugar predeterminado para colocar estos archivos es un poco desafortunado, aunque al menos marginalmente defendible. (p. ej., en un entorno multiservidor y altamente cruzado, puede que no sea obvio dónde encontrar un archivo de recuperación en el momento en que lo necesita con mayor urgencia)
Domingo Ignacio
3
El manejo de archivos de intercambio de Vim es simplemente horrible. Lo he usado para recuperar datos perdidos tal vez 5 veces. Pero me han molestado para recuperar un archivo de intercambio unas 9,000 veces, que de todos modos es invariablemente idéntico al archivo, o peor aún, una versión desactualizada. Puede ser una buena característica si el proceso de recuperación no es tan malo. recover.vim ayuda un poco, pero sigue siendo demasiado interactivo.
joeytwiddle
3
Sublime Text tiene disaster recovery. ¡Me encanta! Ni siquiera tengo que guardar un archivo, cuando reanudo los cambios que hice, guardado o no, vuelvo a subir.
leetNightshade
Tengo un autocomando simple que escribe todos los cambios tan pronto como se realizan, lo que hace que los archivos de intercambio y las copias de seguridad sean inútiles.
tbodt
2
@ TorkelBjørnson-Langen Probablemente sea mi culpa reiniciar mi máquina sin cerrar todas mis sesiones de Vim, y luego estar paranoico sobre qué archivos de recuperación son realmente válidos. De todos modos, intenté obtener lo mejor de ambos mundos, escribiendo un complemento que solo mantiene un archivo de intercambio
awesome.vim
7

Puede configurar backupdir y directorio en nulo para deshabilitar completamente sus archivos de intercambio, pero generalmente se recomienda simplemente colocarlos en un directorio centralizado. Vim se encarga de asegurarse de que no haya colisiones de nombres ni nada de eso; Entonces, esta es una alternativa completamente segura:

set backupdir=~/.vim/backup/
set directory=~/.vim/backup/
monokrome
fuente
3
Debe agregar una barra doble //al final de las rutas para poder modificar dos archivos con el mismo nombre al mismo tiempo.
Samuel O'Malley
Gracias, @ SamuelO'Malley. ¿Qué hace el //?
monokrome
Echa un vistazo :help directorysi quieres leer los documentos para esto. La barra doble le dice a vim que codifique la ruta completa del archivo en el nombre del archivo de intercambio, por ejemplo %home%sam%dotfiles%.gitignore.swp, en lugar de solo .gitignore.swp.
Samuel O'Malley
3

Si coloca set directory=""su archivo exrc, desactivará el archivo de intercambio. Sin embargo, hacerlo deshabilitará la recuperación.

Más información aquí .

Brian Rasmussen
fuente
3

Si está utilizando git, puede agregar *.swpa .gitignore.

Evan Hu
fuente
¡Creo que eso es lo que la mayoría de los usuarios necesitan! Desactivar los archivos de intercambio es una mala práctica.
DenisKolodin
2

no cree un archivo de intercambio vim solo para un archivo en particular

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile
zzapper
fuente
1
O para todos los archivos en un directorio particular, lo siguiente parece funcionar (solo pruebas breves):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty
1

Para cualquiera que intente configurar esto para proyectos de Rails, agregue

set directory=tmp,/tmp

en tu

~/.vimrc

Por lo tanto, los archivos .swp estarán en su ubicación natural: el directorio tmp (por proyecto).

valk
fuente