One of the most important things to being a developer is your development environment. Being productive depends a lot on what tools are available to you and how much are you familiar with them. As a coder, what software you use to write code will be one of your most important tools.
I strongly believe productivity is tied to comfort. And for me, being comfortable is being able to do more with less. I always tried to learn the keyboard shortcuts of every software I use as it's often the fastest and simplest way to do something. When I learned about the keyboard-driven nature of vim, it seemed perfect for me. It fitted with a goal I had at that time which was to lessen my usage of a mouse (I had a pretty bad trackpad so I had to use an external mouse).
Another thing I believe is a tool should be adapted to your needs, not the other way around. My expectations were shaped by my experience with the Jetbrains' products. Things that were essential for me were auto-completion (mostly for variables' names), linting code (a real time saver when fixing syntax errors), project management (mostly for launching commands inside a directory, git (for basic stuff like viewing diffs and committing) and snippets (that came later).
For auto-completion, I started with youcompleteme inside of Vim. It was overly complex for me to install, so most of the time, I did not even bother and just use the default completion engine inside Vim. But after learning about deoplete, I made the switch to Neovim (it was easier to install in Neovim). Now, I'm using COC which is even easier to install and configure. The default completion engine would suffice, but using COC make it simpler for me.
There's nothing that can speed up your coding like linting. Being able to correct syntax errors as well as correctly formatting your files help greatly during the development process. At first, I didn't know about Vim's
make system. I used Syntastic, then I switched to Ale when I moved to Neovim. Now, I know about the
make system and understand the edit-compile-fix process, but it is easier for me to use Ale.
I don't need project management as the IDEs do. What I needed was switching between files quickly and launching commands in the context of the directory I opened the editor in. For the first one, I started with CtrlP. But, as soon as I heard about FZF, I switched to it. As for file explorer, I started by using the default one, Netrw, then nothing for a long time (FZF was enough). A few months back, I tried to used Denite and [The NERD Tree)(https://vimawesome.com/plugin/nerdtree-red), but I could not feel comfortable with them so I moved back to FZF and Netrw.
My needs for git within the editor are the basic ones. I only need to be able to see which files were modified, to select which ones I'd stage and to quickly write the commit message. Since starting, I've used fugitive. It fits perfectly within my process. I've added a couple of mappings to the most used commands.
I don't use snippets that much. But I've installed UltiSnips and I've added a couple of snippets. It's very powerful and fast.
And that's it. Neovim does everything I want from a text editor. I also analyze my coding process from time to time to see what I could improve in it. You can find my config here init.vim.