vim script to backup current file

需求

在编辑时,为了能随时回退旧版本,用 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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注