Isso parece funcionar.
function! CustomComplete(type)
set iskeyword+=-
return a:type
endfunction
inoremap <expr> <C-B> CustomComplete("<C-N>")
autocmd CompleteDone * set iskeyword-=-
Usamos um mapeamento de expressão para executar a função que define iskeyword
toda vez que é executada (não parece ser um problema. Eu também não encontrei um autocmd antes da conclusão.) O valor de retorno de a função é então usada como substituta do mapeamento. Nesse caso, você queria o comportamento <C-N>
. Em seguida, para remover o conjunto -
do conjunto iskeyword, usamos o CompleteDone
autocomand, o que acontece após a conclusão da conclusão.
Também experimentei os dois mapeamentos. O primeiro deles não funciona como esperado, uma vez que também possui <C-O>
, o que mata a janela de conclusão.