vim — дата изменения файла
Так случилось, что мне необходимо в некоторых файлах записывать дату их изменения (вот как здесь, например). До недавних пор использовал:
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-файлов перед записью вызывается наша функция и делает описанное выше.
