Since as of late I’ve been playing about with web browsers that don’t support bookmarklets (at least as far as I can tell; there’s quickmarks - I don’t know what they are about) I revisited my Smile QIF generator and changed it into a Vim Script so I could use it in the same vein as Dave Small’s original Qifinator, i.e. copy and paste in from the Smile web page and “click” to process into Qif format:


"Uses tlib http://www.vim.org/scripts/script.php?script_id=1863
function! SmileQIF()
	"Delete any blank lines
	silent! g/^$/d
	"If previous statement reverse the lines
	if getline(1)=~"BROUGHT FORWARD"
		g/^/m0
	endif
	let linenum = 1
	while linenum <= line("$")
		let curr_line = getline(linenum)
		if curr_line=~"BROUGHT FORWARD" || curr_line=~"LAST STATEMENT"
			execute linenum 'delete _'
			let linenum = linenum - 1
		else
			let parts = split(curr_line, "\t")
			"Date. Need to strip trailing spaces
			let new_line = "D".tlib#string#Strip(parts[0])."\t"
			"Transaction
			if match(parts[2], "£") < 0
				"safer than checking for blanks as sometimes it's odd whitespace
				let new_line = new_line."T-".strpart(tlib#string#Strip(parts[3]),2)."\t"
			else
				let new_line = new_line."T".strpart(tlib#string#Strip(parts[2]),2)."\t"
			endif
			"Payment
			let new_line = new_line."P".tlib#string#Strip(parts[1])."\t\^"
			call setline(linenum, new_line)
		endif
		let linenum = linenum + 1
	endwhile
	"Insert Header
	let header = "!Type:Bank\t".getline(1)
	call setline(1, header)
	"Replace tabs with new lines
	%s/\t/\r/g
endfunction
command! SmileQIF :call SmileQIF()

This is actually better than my bookmarklet (although more verbose) as it also reverses the date order of previous statement pages to match recent items - since patching together statements across pages is often necessary because for some unfathomable reason Smile don’t generate statements on clean date break boundaries (i.e. you’ll find transactions from the same day in both recent items and previous statements).

I’ve just placed the above in my .vimrc and I call with :SmileQIF