[英]Make a backup of an open file with the most recent changes
如何备份已打开且已主动写入的文件,此外,如何备份该文件并对其进行最新更改?
很长一段时间,我认为每当我写入文件时,创建的 .swp 文件基本上是仍在交换内存中的最新文件,这样如果我写入文件,然后备份 .swp文件,我将拥有包含最新内容的文件。
我之前试过这个,但它似乎不起作用。 所以它要么不像我想象的那样工作,要么在打开的文件中写入一些东西之间有一个时间间隔,这种变化使它成为交换文件的方式。 这些假设中的任何一个是正确的吗?
主动写入文件中的更改是否存在于内存中的其他位置?
我想要做的是制作一个脚本,该脚本将对我正在积极写入的文件进行新的备份,并在我写入文件时进行所有更改,以防我的电脑崩溃或其他原因。
编辑:我尝试打开文件,向其中写入一些内容,然后在尝试 .swp 文件之前等待 1 分钟,它确实有更改。
h undofile
从我的 vimrc:
" 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
(我在 unix 上的 .bashrc 上设置了$v
-> ~/.vim
)
" 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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.