Without further ado and in no particular order.
First things first. You need some kind of plugin manager and the amazing Vim-plug is the most simple and the most powerful around there. It allows you to least the plugins in the vimrc file and simply call
:PlugInstall to easily install all of them. Then you can run
:PlugUpdateto update them in one go.
OK, this one I guess the most old in this list. But this is because there are still not many comparable plugins around there. NERDTree just works. Here are some of the useful settings:
let NERDTreeShowHidden=1 " Always show dot files let NERDTreeQuitOnOpen=1 map <Leader>n :NERDTreeFind<CR>
NERDTree is a good option if you need to look around. But most often you simply need to open a specific file by name, even if you might not remember exactly how it's called. This is where FZF plugin comes in handy. It is written in Go and is blazingly fast. If you install it in your system as a stand-alone thing, it will save you so much time not only in VIM but basically anywhere. Just take a look at the examples.
Since version 8 VIM has become asynchronous. That means that it will no longer freeze when you run an external bash command. ALE is an asynchronous linting tool with support for any linter/fixer you can only think of. Since it works in the background it is very pleasant then alternatives like Syntastic. It is also quite customizable. You can set the linters you's like to use for particular file types, set the symbols for warning and errors (hint: you can use emojis!), and so on.
Of cause it's hard to imagin a modern development workflow without an auto-completing engine. Deoplete is fantastic asynchronous plugin initially developed for NeoVim currently is compatible with Vim8+. It is compatible with Ultisnips and honza/vim-snippets and I highly recommend installing them as well.
That's pretty much it for now. If you know other must-have Vim plugins that you can't imagine your life without, please add to the comments!