Vim has built-in support for completions in insert or replace modes.
By default, Vim uses separate Emacs style key bindings (
for different kinds of completions.
There are two plugins to use a single
Tab key for completions:
There is also AutoComplPop to automatically pop up completions.
Count source lines of code (VimScript comments start with
; cat supertab.vim | egrep -v '^("|([[:blank:]]*$))' | wc -l 923 ; cat VimCompletesMe.vim | egrep -v '^("|([[:blank:]]*$))' | wc -l 82
Without any configuration, the Tab key will, depending on the context, offer:
you can set the Tab key to use the following type of completions:
If any of above types of completions fails to return any results, hitting Tab again will switch back to Vim's local keyword completion.
You can set the b:vcm_tab_complete variable interactively, or in
autocmd FileType text,markdown let b:vcm_tab_complete = 'dict'
Enter to commit completion.
Use arrow keys (
Up|Down) to select completions.
It works well for certain file types, while distracting on other types such as text.
YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine. It has several completion engines:
YCM also provides semantic IDE-like features in a number of languages:
Tho downside is it consumes a lot of RAM.
neocomplete maintains a cache of keywords in the current buffer. It requires Vim 7.3.885+ with Lua enabled. It sometimes be slower than YCM, but requires much less RAM.
You can configure it to use Tab key to complete, and/or automatically pops up completion menu.