当只列出一个缓冲区时,vim:`:q`而不是`:bdelete`

时间:2011-04-06 20:06:52

标签: vim

我想使用我不需要的快捷方式(,q)到删除缓冲区,但我想使用相同的快捷方式退出vim 当前缓冲区是列出的唯一缓冲区

我目前正在使用此功能:

function! MyClose()
    " :q if at most one buffer is loaded
    " :bdelete otherwise
    let bufcount = len(filter(range(1,bufnr('$')), 'buflisted(v:val)==1'))
    if bufcount < 2
        exe ":q"
    else
        exe ":bdelete"
    endif
endfunction

然后

nnoremap <leader>q :call MyClose()<cr>

但我觉得我做得不对。

  • 有没有更好的方法来计算列出的缓冲区?
  • 有没有更好的方法来实现此功能?

1 个答案:

答案 0 :(得分:0)

你是对的,你可以使用

:help tabpagebuflist

要获取所有现有缓冲区的列表,请执行

tablist = []
for i in range(tabpagenr('$'))
   call extend(tablist, tabpagebuflist(i + 1))
endfor

在这种情况下,您只需要在当前选项卡上检查缓冲区,因为执行:q将关闭选项卡