需求
在编辑时,为了能随时回退旧版本,用 vim 写一个函数来实现太方便了。
脚本
# 先打开备份开关
set backup
# 在写文件前备份文件,文件名为 原文件名.YYYYMMDDmmhh~
autocmd BufWritePre * let &l:backupext = strftime(".%Y%m%d%H%M%S") . '~'
# 文件写入后,调用函数,保留最新的 N 个文件,删除早先的文件
autocmd BufWritePost * call s:KeepBackupsForCurrentFile(9)
function! s:KeepBackupsForCurrentFile(max_keep) abort
let l:filepath = expand('%:p')
if empty(l:filepath) | return | endif
let l:dir = fnamemodify(l:filepath, ':h')
let l:base = escape(fnamemodify(l:filepath, ':t'), '[]?*{}')
let l:glob_pattern = l:dir .. '/' .. l:base .. '.*~'
let l:candidates = glob(l:glob_pattern, 0, 1)
call filter(l:candidates, {_, val -> val =~# '\.\d\{14}\~$'})
if len(l:candidates) <= a:max_keep | return | endif
call sort(l:candidates)
call reverse(l:candidates)
for l:old in l:candidates[a:max_keep :]
silent! call delete(l:old)
endfor
endfunction


