Vim でファイルが存在しないバッファの削除

例えば、vimshell や unite.vim などといったファイルが存在しないバッファの削除を行います。

[ソース]

function! s:delete_no_file_buffer()
    let list = filter(range(1, bufnr("$")),
\        'bufexists(v:val) && !filereadable(expand("#".v:val.":p"))'
\    )
    for v in list
        execute "bw ".v
    endfor
endfunction

command! -bar DeleteNoFileBuffer :call s:delete_no_file_buffer()

expand でバッファ番号からパスを取得して、filereadable でファイルが存在するかのチェックを行っています。