O autocommand do Vim no BufDelete impede a abertura da janela de ajuda

0

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()
    
por Kyle Strand 08.11.2013 / 18:27

1 resposta

0

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.

    
por 08.11.2013 / 21:39

Tags