Programmatically Inserting Text and Variables with Vimscript

There are certain file types that when I create an empty file I'd like some text auto-inserted into the file. For example, in both Bash and Python scripts I want a comment at the head of the file about when the file was first created and the file's purpose. It occurred to me recently that I could do this with Vim, at least for anything not Bash (Bash, or anything without a file extension, is difficult because Vim can't identify the filetype until after you've started editing the file). But it occurred to me that it should be relatively easy to pre-fill a reStructuredText file for this blog. So this is my current ~/.vim/ftplugin/rst.vim:

noremap <buffer> <silent> k gk
noremap <buffer> <silent> j gj

let curFileSize = getfsize(@%)
" getfsize(...) returns -1 for "file not found":
if (curFileSize==0) || (curFileSize==-1)
    let intro  = [":title: Your Title Here"]
    " Use rst's preferred format for the time:
    call add (intro, ":date: " . strftime("%Y-%m-%d %H:%M"))
    call add (intro, ":tags: comma, separated, list")
    call add (intro, ":category: unknown")
    call add (intro, ":slug: generated-file-title")
    call add (intro, ":author: Giles Orr")
    call add (intro, ":status: draft")
    call add (intro, ":summary: short summary of page contents")
    call add (intro, ".. (inserted from ~/.vim/ftplugin/rst.vim, 'u' deletes)")
    call add (intro, "")
    call add (intro, "Content of the page in reStructuredText.")
    let failed = append(0, intro)
    if (failed)
        " Don't know when this would happen:
        echo "Unable to prep file!"
    else
        " vim doesn't seem to notice file changes applied by a script:
        let &modified = 1
    endif
endif

For files in the ftplugin/ folder to work, you'll need a "filetype plugin indent on" line (or at least "filetype plugin on") in your ~/.vimrc. The first two lines above have nothing to do with the pre-fill, but are great with rst files with their massively long and multi-wrapped lines. getfsize(@%) gets us the size of the current file: if it's "0" (empty) or "-1" (because the file doesn't exist), pre-fill the file with the included text. "intro" is a Vimscript list, which I'm populating one element at a time for easier editing. To get today's date and time I use strftime("%Y-%m-%d %H:%M") - this is the same time format as Unix strftime, so "man strftime" is your friend. The call to append(0, intro) tries to insert each element of the "intro" list as a line at position "0". Finally, because vim doesn't seem to recognize programmatic insertion of code as a modification of the file, we let &modified = 1.

See also the update to this post.