¿Cómo puedo evitar que Vim deje demasiados archivos (como intercambio, copia de seguridad, deshacer)?


13

De manera predeterminada, vimdeja los archivos de intercambio en el directorio de mi proyecto y, en caso de bloqueo, deja los archivos de respaldo.

¿Puedo evitar esto? ¿O necesito actualizar el .VCSignorearchivo de todos mis proyectos ?

Respuestas:


16

Archivos de respaldo

Por defecto, Vim no deja archivos de respaldo. Son simplemente archivos transitorios que existen mientras Vim está guardando el búfer en el disco. Como se describe en :help backup-tableeste comportamiento, puede controlarse mediante las opciones 'backup'y 'writebackup':

'backup' 'writebackup'  action  ~
   off       off    no backup made
   off       on     backup current file, deleted afterwards (default)
   on        off    delete old backup, backup current file
   on        on     delete old backup, backup current file

Intercambiar archivos

En cuanto a los archivos de intercambio, puede ser útil recopilarlos en un directorio dedicado. Esto se puede hacer con la 'directory'opción. Por ejemplo

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

se agregará $HOME/.vim/tmpal encabezado de la lista de directorios que Vim intentará usar al crear un archivo de intercambio. El seguimiento //hace que Vim codifique el nombre completo de la ruta al archivo para que no haya colisiones con archivos con nombres similares de diferentes directorios.

Advertencia : Esto deshabilita efectivamente la capacidad de Vim de notar si varios usuarios están tratando de editar el mismo archivo ya que los archivos de intercambio se almacenan en diferentes ubicaciones.

El fragmento a continuación (adaptado de vimrc de tpope ) también deshabilitará el archivo de intercambio para un búfer cuando no se modifique, de esa manera si Vim / su computadora se bloquea cuando tiene un montón de archivos abiertos, los archivos de intercambio que quedan solo serán para archivos modificados

autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
  \ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif

Advertencia : dado que el archivo de intercambio solo existe cuando se modifica el búfer, esto tiene un efecto similar al de la configuración 'directory'. Si el búfer no se modifica, otro Vim puede comenzar a editarlo sin previo aviso. Si el segundo Vim se guarda antes de que el primero haga más cambios, no se notarán hasta que el usuario intente guardar o algo active a Vim para verificar si el archivo está modificado.


5

Utilizo mi .vimrcen varias máquinas, incluidos los servidores compartidos. No necesariamente quiero que las personas puedan ver los archivos en los que estoy trabajando y me gusta mantener mi directorio de inicio relativamente limpio. Así que esta es mi solución que funcionará bien en Linux y Mac OS X.

" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
  :silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif

set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,

Tenga en cuenta que esto creará un .tmpdirectorio debajo ~/.vimsi aún no existe. Este sería el nuevo hogar de sus archivos de intercambio. Para deshacer archivos, también tengo lo siguiente en mi .vimrc(que es bastante similar):

if exists("+undofile")
  " undofile -- This allows you to use undos after exiting and 
  "             restarting. NOTE: only present in 7.3+
  "             :help undo-persistence
  if isdirectory( $HOME . '/.vim/.undo' ) == 0
    :silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
  endif
  set undodir=~/.vim/.undo
  set undofile
endif

1

Esto es lo que hago en mi vimrc:

fun! MkdirIfNeeded(dir, flags, permissions)
    if !isdirectory(a:dir)
        call mkdir(a:dir, a:flags, a:permissions)
    endif
endfun

" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
    let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
    let tmpdir = 'C:/tmp/vim_' . whoami
else
    let whoami = substitute(system("whoami"), '\n', '', '')
    let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)

let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir

Creará /var/tmp/vim_<username>y usará esto para almacenar todos los archivos relacionados con vim. Mantener limpio el directorio de tu proyecto.

El uso whoamiasegura que puede usar el vimrc globalmente (es decir, para el usuario y el usuario root) mientras usa directorios separados; Si no necesita esto, puede reemplazarlo con un directorio codificado para un inicio más rápido. También podría usar el ~/.vim/directorio, pero me gusta usarlo /var/tmpporque generalmente es un sistema de archivos separado.

Lo uso /var/tmpporque a /tmpmenudo se borra al reiniciar. Probablemente no desee que este directorio se pueda escribir en todo el mundo, ya que las personas podrían colocar archivos allí para hacer cosas potencialmente dañinas cuando abre un archivo.


1
/var/tmpsiempre se puede escribir en el mundo: es un directorio temporal del sistema. (Bueno, puedes cambiarlo para que no lo sea, pero esa es una de esas cosas en las que los sistemas tipo Unix están felices de permitirte conservar las piezas después de romperlas). Si tiene otro usuario en el sistema, él / ella podría crear /var/tmp/vim_«your_username»con los permisos que elija. Y luego llénelo con enlaces simbólicos a sus archivos importantes, que probablemente serán destruidos por archivos temporales vim.
derobert

@derobert Solo si no existe. Si usa este sistema y tiene muchos usuarios, probablemente desee agregar la creación de este directorio addusero lo que sea que esté usando para crear usuarios. En cualquier caso, la mayoría de las personas usan Vim en máquinas de confianza (pero su comentario es bueno, como tal).
Martin Tournoij

Correcto, solo si no existe. Lo cual, al estar en un directorio temporal del sistema, ocurre de manera impredecible en función de cuándo se limpian esos archivos temporales. No estoy seguro de por qué no lo pones en $HOMEalgún lugar.
derobert

@derobert Bueno, /var/es un sistema de archivos diferente. La teoría es, que evitará una gran cantidad de escrituras en /, /usro /home, lo que lleva a una menor fragmentación y el riesgo de corrupción de archivos en caso de un accidente ... Esta es también la razón por buzones y esas cosas están /varpor defecto, y no en el homedir ...
Martin Tournoij
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.