Я использую это в течение некоторого времени:
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>
Это позволяет вам обычно использовать клавишу табуляции, когда курсор находится в начале строки или не находится на слове, в противном случае он выполняет клавишу завершения control-p - вы можете изменить ее на <cn> для вашего использования, хотя я нахожу < cp> более полезно.
[Хотя я изменил его, первоначальная идея, вероятно, пришла из списка рассылки Vim Users, но я не сохранил никаких записей о том, где я его получил.]