Vim: Making Auto-Completion Smarter

VimAutocomplete

Vim Problem Overview


I use ctags, taglist, etc., to have auto completion in Vim. However, it is very limited compared to Visual Studio intellisense or Eclipse auto-completion. I am wondering whether it is possible to tune Vim to:

  1. Show auto-completion whenever . or -> are typed. But only after some text that might be a variable (e.g. avoid showing auto completion after a number).

  2. Show function parameters when ( is typed.

  3. Stop removing the auto completion list when some delete all characters after . or ->: When I enter a variable name, then press . or -> to search for a certain member, I frequently have to delete all the characters I type after the . or ->, but this makes Vim hide the auto completion list. I would like to keep it visible unless I press Esc.

  4. Showing related auto completion: When I type a variable and press ^X ^O, it usually shows me all the tags in the ctags file. I would like to have it showing only the tags related to the variable.

Thanks for the help.

EDIT: Some people are voting for this question, but no body seems to know the answer. So just wanted to mention that you don't have to provide a complete answer; partial answers to any of the mentioned points would be good also.

Vim Solutions


Solution 1 - Vim

AutoComplPop is what you need.

Solution 2 - Vim

For (1) when working with C++ or C clang complete is a really nice option

Solution 3 - Vim

To make vim trigger a certain behavior when a key is pressed you need to map the key to a function.

For instance to map the key . to call some type of completion when in INSERT mode you would need to do:

:inoremap <expr> <buffer> . MyFunction()

and then the function would need to evaluate the context where it was called and present an appropriate answer to the user.

Edit: This is the basis of how clang complete mentioned by @honk works.

I'm not sure if you can customize the behavior of omnifunc to meet your needs but on my experience, I never went too far. As @Mikhail said, you would need to keep track of things which in practice means interpreting or even running the code to some extent.

Solution 4 - Vim

I use vim every day, and I'm not aware of any existing script that may do this. This action would require understanding of classes and keeping track of variables. someObject-> means that VIM would know what class the variable someObject is, and then be able to search methods/variables within that class.

Writing scripts for vim is relatively easy, though like you've commented - no one has answered this yet. Up vote from me.

Solution 5 - Vim

I would love to have that same functionality that you are looking for and just came across a promising plugin:

https://github.com/Shougo/neocomplcache looks like it could be the new autocomplpop, and seems to work quite well during my initial trials... now to configure the omni completion to work with scala~

Solution 6 - Vim

I've recently discovered YouCompleteMe, it behaves similarly to the Visual Studio autocomplete tool. A demonstration can be seen here:

https://www.youtube.com/watch?v=YuMyHAHF0xs

Solution 7 - Vim

In any case, I recommend YouCompleteMe (YCM). It provides (fuzzy) matching of identifiers of your current file, as well as path-completion, integration with external completion engines,...

ad 1)
If you like the semantic completion of eclipse, use eclim to integrate vim with eclipse. (alernatively use another semantic engine for YCM)

ad 2)
These 2 play nicely together btw.,: YCM can even provide the function definition (= parameter list) of the recently completed function!

ad 3)
that's what YCM does anyways

ad 4)
not quite sure, what you mean by that one. never used ctags!

P.S.: I strongly recommend using UltiSnips and Tagbar (and if you like UndoTree) additionally, what makes vim a perfect IDE for me.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRafidView Question on Stackoverflow
Solution 1 - VimromainlView Answer on Stackoverflow
Solution 2 - VimBenjamin BannierView Answer on Stackoverflow
Solution 3 - VimunodeView Answer on Stackoverflow
Solution 4 - VimMikhailView Answer on Stackoverflow
Solution 5 - VimneildaemondView Answer on Stackoverflow
Solution 6 - VimwarsongView Answer on Stackoverflow
Solution 7 - VimFlorianView Answer on Stackoverflow