Not directly; the built-in completions feed directly into the popup menu; there's no extension point there. You have to re-implement the built-in completion, and then can add the results from another completion function, e.g. 'omnifunc'
. My CompleteHelper plugin makes this quite simple:
function! BuiltInComplete( findstart, base )
if a:findstart
" Locate the start of the keyword.
let l:startCol = searchpos('\k*\%#', 'bn', line('.'))[1]
if l:startCol == 0
let l:startCol = col('.')
endif
return l:startCol - 1 " Return byte index, not column.
else
" Find matches starting with a:base.
let l:matches = []
call CompleteHelper#FindMatches( l:matches, '\V\<' . escape(a:base, '\') . '\k\+', {'complete': &complete})
" Now add the matches from omni completion.
let l:matches += call(&omnifunc, [0, a:base])
return l:matches
endif
endfunction
General critique
As you can see by the list of completions implemented with the help of my plugin, I favor the opposite: many distinct completions, each triggered by separate keys. At least for me, the overhead of choosing from a long list of completion candidates is much more than the little cognitive processing in choosing the right completion.