12

Is there an autocompletion plugin for vim? What are my options here?

At the moment I'm using AutoComplPop, but it has bad integration with snipMate that I use and dead slow on Ruby files (even < 100 lines).

I've seen a couple of other plugins, but they are dead since at least more than a year. So, any ideas?

1
  • 1
    ACP works very very well here and I have no problem with SnipMate. There's a settings (let g:acp_behaviorSnipmateLength=-1 see :help autocomplpop) you are supposed to add to your .vimrc, did you add it?
    – romainl
    Oct 6, 2011 at 5:16

6 Answers 6

18

This is an old question, but I keep coming back to it every now and then with a glimmer of fading hope, thinking that one day I'll find the right combination of plugins to give me perfect autocompletion in Vim. The search continues, but this is all the research I've done over the course of several years.

First of all, you must understand Vim is a text editor, not a code editor. Code editors, IDES, are tools like Jetbrains suite of tools, Visual Studio Code, Eclipse, etc.

Vim fundamentally can't "autocomplete" code accurately. Autocompletion requires introspecting your source code and analyzing the AST. Consider that Vim couldn't do asynchronous operations until Vim 8 was released in 2016, so trying to run any sort of code introspection software in a Vim plugin would be a nightmare. It's baked into the history of the Vim ecosystem not to do this. And all of the ones that try to do this, like Tern For Vim, are indeed nightmares to use.

The best a text editor can do is snippets and completing same words/lines/etc it knows about. If you're looking to autocomplete code, you should use a code editor, not a text editor.

These are your options, of which I've tried all:

  • Two useful keyboard shortcuts are Ctrl-n, which will auto-complete a word based only on the current buffers you have open (no code introspection), and Ctrl-xCtrl-l which will autocomplete a full line of code if you want to duplicate one. You probably know Ctrl-xCtrl-f, which will auto-complete a file name including path, relative to the current :pwd. The pattern-complete plugin can be mildly useful if you don't search with /\v.

  • Built in Vim "Omnicompletion" triggered by Ctrl-x,Ctrl-o (that's what Vim authors want you to type every time) along with a bunch of language specific plugins, if they exist. You can :echo &omnifunc in a file to see if you already have Omnicompletion set up by Vim in your file of choice.

  • AutoComplPop for automatically opening the above Omnicompletion menu on typing.

  • SuperTab which lets you press Tab to trigger Vim's built in completion.

  • NeoComplCache which is keyword completion (how it's different from Vim's built in completion is not specified), a complex .vimrc setup, and NeoSnippet for snippet completion.

  • A monster combination of exuberant-ctags and DoctorJS (a Mozilla project that has been dead for a year), TagBar and a home-grown thingy to extract completion from the tag files.

  • SnipMate, a basic tag completion plugin, along with snippets, and figure out on your own how to add snippets, as it's a bit tricky.

  • UltiSnips along with UltiSnips-Snippets which are different than the above snippets.

  • Tern for Vim, a promising library that does actual code introspection to get correct autocomplete. However it is buggy, very slow, has memory leaks that will crash Vim, and possibly is abandonware.

  • YouCompleteMe, a fuzzy as-you-type completion that runs a server in the background, along with a home-grown function for snippet completion.

  • Eclim - a noble attempt to run an Eclipse server in the background and tell Vim the autocompletions it introspects on the fly. It works about as well as Tern.

  • Finally, Closetag or delimitMate or autoclose or a home-grown bananagram for auto closing of tags and parenthesis automatically on typing.

Almost every plugin in this list will conflict with almost every other plugin in this list.

YouCompleteMe seems to be the leader of the pack, but I've never been able to get it to work properly with tag completion, and its code-introspection-completion has yet to prove powerful.

My personal opinion is that the current state of the Vim autocompletion world is in bad shape. For small projects you might be fine using one of the above solutions. If you're dealing with a simple API you can keep mostly in your head, non-code-introspection completion will probably be ok. If you are dealing with a large project, or need the benefit of type safety while programming, a full fledged IDE (Eclipse, Visual Studio, WebStorm) is going to suit you much better than Vim will.

The downside of an IDE, of course, is that you will not have the power of Vim at your hands anymore. I haven't used a single IDE that has an acceptable Vim mode.

Vim has a moderate language bias towards untyped C-like languages, and otherwise has the expectation that any language specific features will be added by users as plugins. Unfortunately, this has lead to a splintered autocompletion ecosystem. Some options are decent, but nothing is perfect, and there rarely is a majority leader / best practice.

1
  • for anyone who's got this far... some source clarification for AutoComplPop for modern vim package managers. The link points to a vim.org script, which is arguably outdated for GitHub focused vim package managers. Plugin authors would usually also have a GitHub for this purpose, the original author does not, their BitBucket is dead. The 'biggest' source on GitHub is 'vim-scripts/AutoComplPop' but user 'vim-scripts' is abandoned/unmaintained. The next best source othree/vim-autocomplpop, which also has updates since the original.
    – hozza
    Jun 9, 2020 at 11:26
6

Here's a nice one: YouCompleteMe

YouCompleteMe that makes the dropdown menu appear automatically as you type, and it supports fuzzy selection, so if you have an identifier called partition_finder and you type something like ptf while editing a C++ file, the dropdown suggestion list will include both printf and partition_finder because they contain the same letters in the same order. If you have a variable called myBrain, you can type brn and it will suggest that. YouCompleteMe also prioritizes the suggestions based on previous usage frequency.

2

I use neocomplcache with the snipmate + snipmate snippets

let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'

you can see my vimrc

2

I am trying out necomplecache with neosnippet I am guessing it will have better integration as both are authored by the same person

1

I believe vim has one built-in called OmniComplete. In insert mode use ctrl+x,ctrl+o.

Otherwise you can do keyword completion from insert mode with ctrl+n. When you invoke it it will give you a dropdown displaying possible matches of words found in the file you're editing, as well as found from other files you have open. Keep hitting ctrl+n to cycle through the options. When you come to the word you want, just continue typing like normal.

If you can't find the word you want, ctrl+n will eventually cycle off the list and you can keep typing, or you can hit ESC and then bcw to go back to the start of the offending word and change the word to the one you wanted.

3
  • Vim's built-in one seems to suck. Whenever I press <c-x><c-o> it just says "Pattern not found". However, if I press <c-n>, completions appear in a dropdown right below the word being typed. Is that the same thing? Is there a way to make the autocomplete drop down appear automatically, without having to press a shortcut?
    – trusktr
    Apr 9, 2013 at 1:11
  • I'm not aware of a plugin that makes autocomplete pop up without interaction, sorry :(. <c-x><c-o> only works for things that vim has been explicitly told how to support. By default I think it can only do a couple of minor things, and stuff like CSS completion, but if you want something like Eclipse there are a couple of vim plugins that try to provide that for you. Apr 9, 2013 at 15:59
  • 1
    I found a plugin for vim called YouCompleteMe that makes the dropdown menu appear automatically as you type, and it supports fuzzy selection, so if I have an identifier called partition_finder and I type something like ptf while editing a C++ file, the dropdown menu will suggest both printf and partition_finder because they contain the same letters in the same order. If I have a variable called myBrain, I can type brn and it will appear. YouCompleteMe also prioritizes the suggestions based on previous usage frequency. Check it out here: valloric.github.io/YouCompleteMe
    – trusktr
    Apr 13, 2013 at 6:04
1

I've forked a new plugin SimpleAutoComplPop from the original AutoComplPop. Though, I'm not familiar with ruby or snipMate, you may have a try and I'm glad to get some feedbacks :)

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .