繁体   English   中英

使用最近的更改备份打开的文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM