#vim
#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:
Вы правы, вы могли бы использовать
:справка tabpagebuflist
Чтобы получить список всех существующих буферов, выполните
tablist = []
for i in range(tabpagenr('$'))
call extend(tablist, tabpagebuflist(i 1))
endfor
В этом случае вам нужно будет проверить наличие буферов только на текущей вкладке, потому что выполнение :q просто закроет вкладку