Com base na resposta de Sato, descobri o seguinte:
let s:quitting = 0
autocmd BufWritePost *
\ if ! s:quitting |
\ Neomake |
\ elseif tabpagenr('$') > 1 || winnr('$') > 1 |
\ let s:quitting = 0 |
\ endif
autocmd QuitPre * let s:quitting = 1
-
s:quitting
precisa ser redefinido após fechar uma janela, caso contrário, Neomake
não será executado no próximo :w
em qualquer lugar.
- Não consigo verificar o número da janela em
QuitPre
, pois pode ser qualquer coisa se eu :wqa
- também eu realmente não quero correr
Neomake
se eu fechar uma janela, pois eu posso fechar todas as janelas posteriores logo depois (antes que Neomake
termine) e então Neovim ainda irá travar
Atualização 1
O NeoVim também fornece v:exiting
, mas ainda não está definido no momento em que BufWritePost
é acionado.
Atualização 2
O Neomake agora fornece um comando NeomakeCancelJobs
para que o problema original seja resolvido com o cancelamento forçado de todos os trabalhos em execução em VimLeave
:
augroup LucNeoMake
autocmd!
autocmd BufWritePost * Neomake
autocmd VimLeave * NeomakeCancelJobs
augroup END
(Esta é uma solução para o meu problema original, mas não a questão.)