vim — дата изменения файла

2008-09-08 11:07; Tags: ,

Так случилось, что мне необходимо в некоторых файлах записывать дату их изменения (вот как здесь, например). До недавних пор использовал:

nmap <Leader>Id i<C-R>=strftime("%d.%m.%Y %H:%M")<CR><ESC>
nmap <Leader>id a<C-R>=strftime("%d.%m.%Y %H:%M")<CR><ESC>
vmap <Leader>id di<C-R>=strftime("%d.%m.%Y %H:%M")<CR><ESC>

Я находил старую дату — обычно где-то в самом начале файла — удалял ее и вставлял новую.
Делал так достаточно долго, хоть это было и не очень удобно. Пока не надоело:

function! LastChangeUpdate(...)
    if a:0 > 0
        let prefix = a:1
    else
        let prefix = ""
    endif
    let linenr = 1
    while linenr <= 10
        if getline(linenr)=~ "Last Change"
            call setline(linenr, prefix.'Last Change: '.strftime("%d.%m.%Y %H:%M"))
            break
        endif
        let linenr += 1
    endwhile
endfunction
"" Before _vimrc is saved, update 'Last Change' time if it is exists.
autocmd! bufwritepre $MYVIMRC call LastChangeUpdate('" ')
autocmd bufwritepre *.vim call LastChangeUpdate('" ')

Функция LastChangeUpdate тупо смотрит на первые 10 строк файла. Если находит ту, в которой есть Last Change, то заменяет ее на нужное нам — Last Change: текущая дата и время. Если в параметрах функции задана строка, то она подставляется перед Last Change, чтобы оформить как комментарий, например.
Ну и автокоманды — для vimrc и для всех vim-файлов перед записью вызывается наша функция и делает описанное выше.

Leave a Reply

Powered by WordPress