2011-04-06 39 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將關閉選項卡