Vim の の挙動を変える

バッファを終了する際に を使っているんですが、これだとバッファが削除されるわけではないので、どんどんバッファが溜まっていってしまいます。
という事で、終了するバッファが他のタブ(ウィンドウ)で開いていないならバッファを削除するという挙動にしてみました。

[ソース]

function! s:flatten(seq)
    let result = []
    for n in a:seq
        if(type(n) == type([]))
            let result = result + s:flatten(n)
        else
            let result = result + [n]
        endif
        unlet n
    endfor
    return result
endfunction

function! s:delete_window()
    let tabpagelist = s:flatten(map(range(tabpagenr("$")), "tabpagebuflist(v:val+1)"))
    if count(tabpagelist, winbufnr("%")) == 1
        :bdelete
    else
        :quit
    endif
endfunction


" マッピングを潰したくないなら他のキーにでも
" nnoremap <silent> <C-w><C-q> :call <SID>delete_window()<CR>


今回は Vim script でガシガシ書いてみたけど、他にいいやり方があるかしら?