Сделайте резервную копию открытого файла с самыми последними изменениями - PullRequest
0 голосов
/ 16 февраля 2020

Как сделать резервную копию файла, который открыт и активно записывается, кроме того, как я могу сделать резервную копию указанного файла с последними внесенными в него изменениями?

В течение длительного времени я подумал, что всякий раз, когда я записываю в файл, созданный файл .swp - это, по сути, обновленный файл, который все еще находится в памяти подкачки, так что если я записываю в файл, а затем делаю резервную копию файла .swp, у меня будет файл с актуальным содержимым.

Я пробовал это раньше, и это не похоже на работу. Так что это либо не работает так, как я думал, либо существует временной интервал между записью чего-либо в открытом файле и этим изменением, вносящим свой вклад в файл подкачки. Являются ли какие-либо из этих предположений правильными?

Являются ли изменения, которые активно записываются в файл, присутствующими где-то в памяти?

Что я хочу сделать, это создать скрипт, который будет делать новую резервную копию в файл, в который я активно пишу, когда пишу в него, со всеми изменениями до этого момента, в случае сбоя моего p c или чего-то еще.

РЕДАКТИРОВАТЬ: я пытался открыть файл, записав что-то к нему, а затем ждать около 1 минуты, прежде чем пытаться .swp файл, и он действительно имеет изменения.

1 Ответ

0 голосов
/ 16 февраля 2020

h undofile

Из моего vimr c:

" Backup
set nobackup
set noswapfile
set nowritebackup
set undolevels=10000
set history=10000

if has('persistent_undo')
  set undodir=$v/undo
  set undofile
endif

И сценарий для сопоставления <leader>b для записи файла в ~ / .vim / undo, который является моим undodir (я установил $v -> ~/.vim на моем .bashr c на unix)

" b -> Backup file
function! Backup(s)
  " Backup path
  let bck_file = expand('$v/undo/bck_') . strftime('%y-%m-%d-%H-%M-%S')
  " File path
  let bck_file .= '--' . substitute(expand('%:p:r'), '/', '_', 'g')
  " Extension
  let bck_file .= '-' . a:s . '.' . expand('%:e')
  silent execute a:s . 'write! ' . bck_file
  echom 'Backup lines ' . a:s . ' of file: $bck_file = ' . bck_file
endfunction
command! -range=% Backup call Backup('<line1>,<line2>')
" :BackView to feed backup path of the day in command line
command! -range=% BackupView call feedkeys(':e '
            \ . expand('$v/undo/bck_') . strftime('%y-%m-%d'))
nnoremap <leader>b :Backup<CR>
vnoremap <leader>b :Backup<CR>
...