2011-07-14 13 views
9

El sistema de copia de seguridad de archivos de Vim acaba de guardar mi proverbial @ $$ pero tengo una pregunta.Restore Vim Backups

que tienen copias de seguridad de ahorro de vim a ~/.vim/backups

Para recuperar estos Fui al directorio y (ordenadas por fecha) copió los archivos que necesitaba volver a los directorios necesarios en mi carpeta del proyecto. Fácilmente, solo había 5 archivos. Sin embargo, me sorprende que no haya una manera obvia de encontrar de qué directorio procede cada archivo. Intenté usar vim -r path/to/file pero parece que usa el intercambio y no el archivo de respaldo. Como en mi caso vim no se colgó (simplemente sobrescribí los archivos por error) no hay intercambio para estos archivos.

Así que la pregunta principal es: ¿Cuál es la mejor manera de restaurar vim archivos de copia de seguridad?

Pregunta secundaria: ¿Qué sucede en el directorio .vim/backup/cuando tengo dos archivos del mismo nombre de diferentes rutas (por ejemplo, /path/one/file.html y /path/two/file.html)?

+0

En realidad, parece que la pregunta secundaria ha vuelto para morderme. Una de las copias de seguridad sobrescribió la otra y no tengo ningún registro de /path/two/file.html ... suspiro. – Tron

+0

puede encontrar algo leyendo el archivo ~/.viminfo para ver el historial de edición. – taro

Respuesta

2

Por lo que puedo decir, Vim no guarda ninguna información sobre la ubicación original del archivo.

Guardar una copia de seguridad de dos archivos del mismo nombre podría sobrescribir la copia de seguridad existente o usar un nombre diferente, dependiendo de lo que esté configurado en su .vimrc. La opción 'copia de seguridad' sobrescribirá un archivo de copia de seguridad existente, pero 'writebackup' cambiará el nombre de una nueva copia de seguridad para evitar una sobrescritura.

Salida documentación de Vim para obtener más información -: copia de seguridad ayuda

7

Para responder a la pregunta acerca de la restauración, Vim no sabe nada acerca de las copias de seguridad. Su sistema de respaldo es muy simple: escriba un archivo. Para restaurar, tienes que hacerlo manualmente.

Sin embargo, puede agregar más información a sus copias de seguridad para que sea más fácil de restaurar.

Idealmente, el backupdir honraría detrás // para obligarlo a ampliar la ruta del archivo y reemplazar / con %. p.ej. /tmp/foo.rb se convertiría en el archivo de respaldo `tmp% foo.rb '.

Ver :help undodir y :help directory para la configuración undo y *.swp directorio que hacen tomar //.

¡Pero podemos falsificar esto!

" Prevent backups from overwriting each other. The naming is weird, 
" since I'm using the 'backupext' variable to append the path. 
" So the file '/home/docwhat/.vimrc' becomes '.vimrc%home%docwhat~' 
au BufWritePre * let &backupext ='@'.substitute(substitute(substitute(expand('%:p:h'), '/', '%', 'g'), '\', '%', 'g'), ':', '', 'g').'~' 

Los archivos de copia de seguridad leen el nombre del archivo-entonces-directorio pero funciona y debe ser lo suficientemente único.

Ejemplo: .vimrc%home%docwhat~ es como copia de seguridad de /home/docwhat/.vimrc

Si quería minutos por las copias de seguridad por minuto, lo que desata menos trabajo, puede añadir una marca de tiempo al nombre del archivo:

au BufWritePre * let &backupext = substitute(expand('%:p:h'), '/', '%', 'g') . '%' . strftime('%FT%T') . '~' 

Pero' Te recomiendo que configures un trabajo cron para limpiar este directorio regularmente. Si editas tantos archivos míos, este archivo se volverá enorme rápidamente.

Como alternativa, podría hacer algo inteligente y cambiar el backupdir antes de escribir (con el gancho BufWritePre), pero ese nivel de astucia con vim me supera (por el momento).

Ciao!

Cuestiones relacionadas