Tente mudar
if buflisted(nr) && ! empty(bufname(nr))
para
if buflisted(nr) && ! empty(bufname(nr)) || getbufvar(nr, '&buftype') ==# 'help'
para que os buffers de ajuda não acionem a lógica para sair.
Eu tenho o autocommand descrito aqui no meu .vimrc
: link
EDIT: copiado no corpo da pergunta por conveniência:
function CountListedBuffers()
let cnt = 0
for nr in range(1,bufnr("$"))
if buflisted(nr) && ! empty(bufname(nr))
let cnt += 1
endif
endfor
return cnt
endfunction
function QuitIfLastBuffer()
if CountListedBuffers() == 1
:q
endif
endfunction
autocmd BufDelete * :call QuitIfLastBuffer()
Estranhamente, porém, parece que se eu tiver exatamente um buffer listado e eu tentar usar o comando :help
, a janela de ajuda não abrir (ou talvez abrir e será imediatamente fechada). Se eu comentar essa linha de autocommand no meu .vimrc
, esse comportamento não ocorrerá mais.
Por que isso está acontecendo e como posso corrigi-lo? Por que :h
acionaria o evento BufDelete
?
EDIT: definindo verbosidade para o nível 12, eu posso ver que o evento BufDelete está realmente ocorrendo. Aqui está a parte da saída que parece relevante para mim:
Executing BufAdd Auto commands for "*"
autocommand call <SID>BMAdd()
calling function <SNR>6_BMAdd
calling function <SNR>6_BMAdd..<SNR>6_BMFilename
calling function <SNR>6_BMAdd..<SNR>6_BMFilename..<SNR>6_BMMunge
calling function <SNR>6_BMAdd..<SNR>6_BMFilename..<SNR>6_BMMunge..<SNR>6_BMTruncName
function <SNR>6_BMAdd..<SNR>6_BMFilename..<SNR>6_BMMunge..<SNR>6_BMTruncName returning '/usr/local/share/vim/vim74/doc'
continuing in function <SNR>6_BMAdd..<SNR>6_BMFilename..<SNR>6_BMMunge
function <SNR>6_BMAdd..<SNR>6_BMFilename..<SNR>6_BMMunge returning 'help\.txt\ (4)\^I/usr/local/share/vim/vim74/doc'
continuing in function <SNR>6_BMAdd..<SNR>6_BMFilename
calling function <SNR>6_BMAdd..<SNR>6_BMFilename..<SNR>6_BMHash
function <SNR>6_BMAdd..<SNR>6_BMFilename..<SNR>6_BMHash returning #340582286
continuing in function <SNR>6_BMAdd..<SNR>6_BMFilename
function <SNR>6_BMAdd..<SNR>6_BMFilename returning #0
continuing in function <SNR>6_BMAdd
function <SNR>6_BMAdd returning #0
continuing in BufAdd Auto commands for "*"
Executing BufDelete Auto commands for "*"
autocommand :call QuitIfLastBuffer()
Tags vim