vim: `: q` вместо`: bdelete`, когда указан только один буфер - PullRequest
3 голосов
/ 07 апреля 2011

Я хочу использовать ярлык (,q) для удаления буферов , который мне не нужен, но я хочу использовать тот же ярлык для quit 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 голосов
/ 07 апреля 2011

Вы правы, вы могли бы использовать

: справка tabpagebuflist

Чтобы получить список всех существующих буферов, выполните

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

В этом случае вам нужно только проверить буферы на текущей вкладке, потому что выполнение: q просто закроет вкладку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...