Use Tab to complete a word (with omnifunc if available, otherwise with <c-n>) or to move down when the completion pop-up menu is active. Use Shift-Tab to move up when in pop-up menu. Define b:tab_complete to override the default mapping for completion in a buffer (e.g., in SQL buffers you may want to let b:tab_complete = "\<c-c>a").
imap <expr><silent> <tab> pumvisible()
\ ? "\<c-n>"
\ : (col('.')>1 && (matchstr(getline('.'), '\%' . (col('.')-1) . 'c.') =~ '\S')
\ ? get(b:, 'tab_complete', &omnifunc != '' ? "\<c-x>\<c-o>" : "\<c-n>")
\ : "\<tab>"
\ )
inoremap <expr><silent> <s-tab> pumvisible() ? "\<c-p>" : "\<s-tab>"
Lifepillar 8 years ago
Type <c-v><tab> to insert a literal tab. See also: :h i_ctrl-v.
Durga Swaroop Perla 9 years ago
This is good. But is there a way to have the functionality of the regular tab as well? Perhaps a switch that turns this off or on.