I keep diaries on different subjects. When I add a new entry I start by inserting a timestamp at the top of the entry. I used to do it ‘manually’ –by copying the current date and pasting in into Vim–, and yesterday I decided to write a vim function to automate that.

There’s nothing especially hard about that, but it took me a while before I figured out how to insert the timestamp at the current cursor position. It didn’t look like there was any built-in Vim function to do it, and most solution I found online seems overly complicated.

It turns out that all I needed was an execute statetement like this: execute ":normal itext to insert", this will insert the string “text to insert” at the current cursor position.

I this added to my vimrc:

function s:InsertISODate()
    let timestamp = strftime('%Y-%m-%d')
    execute ":normal i" . timestamp
    echo 'New time: ' . timestamp
endfunction

function s:InsertISODatetime()
    let timestamp = strftime('%Y-%m-%d %H:%M:%S')
    execute ":normal i" . timestamp
    echo 'New time: ' . timestamp
endfunction

command Today   call s:InsertISODate()
command Now     call s:InsertISODatetime()