Personally i really enjoy Gary Berndhart’s InsertTabWrapper() method →
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>
inoremap <s-tab> <c-n>
I’d very much like to hear yours!