Создание «умных» резервных копий редактируемых файлов
VIM*
Резервные копии отредактированных файлов не раз помогали мне восстановить удалённые строки кода, но механизм создания backup'ов в VIM по-умолчанию достаточно неудобен — кому нужны *~-файлы, засоряющие каталог рабочего проекта?
Предлагаю вам красивое решение, которое, надеюсь, спасёт в трудную минуту и вас, или по крайней мере сэкономит драгоценное время, которое пользователи VIM так любят ценить ;-)
Раз уж мы решили не хранить файлы backup'ов в каталоге с оригинальными файлами, то придумаем для этих целей отдельный каталог. Я посчитал удобным хранить копии в ~/.vim/backup/.
Чтобы не запутаться в файлах с одинаковыми именами из разных каталогов, будем создавать в нашем копию дерева подкаталогов файловой системы, где находился оригинальный файл. Например, если редактируемый файл располагается в каталоге /etc/lighttpd/, файл с резервной копией будет помещён в ~/.vim/backup/etc/lighttpd/. Кроме того, во избежании лишнего ветвления, для файлов из домашнего каталога будем принудительно сворачивать локальный путь в привычную ~.
Дополнительно будем добавлять к имени файла резервной копии дату создания, что позволит хранить ежедневные (при необходимости ежемесячные или ежечасные) копии файлов. Например такие: ~/.vim/backup/etc/lighttpd/lighttpd.conf~2009-08-11~.
Реализация заняла 10 минут обеденного перерыва, добавляем в локальный ~/.vimrc следующий код:
К сожалению, не имею возможности проверить и поправить код для работы в Windows.
Комментарии и критика приветствуется!
P.S.: чуть было не забыл, мой .vimrc в догонку :-)
Предлагаю вам красивое решение, которое, надеюсь, спасёт в трудную минуту и вас, или по крайней мере сэкономит драгоценное время, которое пользователи VIM так любят ценить ;-)
Раз уж мы решили не хранить файлы backup'ов в каталоге с оригинальными файлами, то придумаем для этих целей отдельный каталог. Я посчитал удобным хранить копии в ~/.vim/backup/.
Чтобы не запутаться в файлах с одинаковыми именами из разных каталогов, будем создавать в нашем копию дерева подкаталогов файловой системы, где находился оригинальный файл. Например, если редактируемый файл располагается в каталоге /etc/lighttpd/, файл с резервной копией будет помещён в ~/.vim/backup/etc/lighttpd/. Кроме того, во избежании лишнего ветвления, для файлов из домашнего каталога будем принудительно сворачивать локальный путь в привычную ~.
Дополнительно будем добавлять к имени файла резервной копии дату создания, что позволит хранить ежедневные (при необходимости ежемесячные или ежечасные) копии файлов. Например такие: ~/.vim/backup/etc/lighttpd/lighttpd.conf~2009-08-11~.
Реализация заняла 10 минут обеденного перерыва, добавляем в локальный ~/.vimrc следующий код:
" включить сохранение резервных копий
set backup
" сохранять умные резервные копии ежедневно
function! BackupDir()
" определим каталог для сохранения резервной копии
let l:backupdir=$HOME.'/.vim/backup/'.
\substitute(expand('%:p:h'), '^'.$HOME, '~', '')
" если каталог не существует, создадим его рекурсивно
if !isdirectory(l:backupdir)
call mkdir(l:backupdir, 'p', 0700)
endif
" переопределим каталог для резервных копий
let &backupdir=l:backupdir
" переопределим расширение файла резервной копии
let &backupext=strftime('~%Y-%m-%d~')
endfunction
" выполним перед записью буффера на диск
autocmd! bufwritepre * call BackupDir()К сожалению, не имею возможности проверить и поправить код для работы в Windows.
Комментарии и критика приветствуется!
P.S.: чуть было не забыл, мой .vimrc в догонку :-)

комментарии (14)