Eu tenho usado isso há algum tempo:
function! InsertTabWrapper()
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k'
return "\<tab>"
else
return "\<c-p>"
endif
endfunction
inoremap <tab> <c-r>=InsertTabWrapper()<cr>
Isso permite usar a tecla tab normalmente quando o cursor está no início de uma linha ou não em uma palavra, caso contrário, ele executa a chave de conclusão do controle-p - você pode alterá-la para < c-n > para seu uso, embora eu ache < c-p > mais útil.
[Embora eu tenha modificado, a idéia original para isso provavelmente veio da lista de discussão dos usuários do Vim, mas eu não mantive nenhuma anotação sobre onde eu a consegui.]