2011-04-06 37 views
3

我想用一个快捷方式(,q)到删除缓存,我不需要,但我想使用相同的快捷方式退出vim当前缓冲区是列出的唯一缓冲区VIM:`:中q`代替`:bdelete`当只有一个缓冲上市

我目前使用此功能:

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> 

但我觉得我不这样做是正确的。

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

回答

0

你是对的,你可以使用

:帮助tabpagebuflist

要获得所有现有缓冲区的列表,这样做

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

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