Vim/Neovim - The path to migrate without stress.

This post will show steps to help you transition to vim/neovim without losing productivity.

I consider that you already know vim/neovim and are looking for a change. My intention here is not to prove or argue why it is a fantastic text editor. We already have thousands of posts on and videos about it.

When I started looking to transition from VsCode to Vim/Neovim, I worried about not reducing my productivity, and I will describe in this post how I did that step by step.

Why do you lose productivity when you start using Vim/Neovim?

  • Vim uses specific commands and shortcuts that keep your hands on the keyboard, and it necessary some time to memorize them.
  • Vim workflow is different compared with VsCode.
  • You must configure your Vim environment according to your necessities.

Thinking about the reasons why we lost productivity during this transition, I decided to solve these points one by one, creating a path from VsCode user to full Neovim user.

Transition path from VsCode to Neovim.

  1. Learn Vim commands without losing productivity on my job.
  2. Make your Neovim have the same features as your VsCode.
  3. Create your Neovim config.

Learn Vim commands without losing productivity on my job.

It was the most important step and what made me not give up.

I started this path using one VsCode plugin called vscodevim. It is a Vim emulator for Visual Studio Code.

Using this plugin is possible you use Vim in a Vscode environment. This worked well for me because, in the beginning, when I was working on my projects. At this time, I used to keep the Vim emulator on insert mode and did everything on the VsCode way. I could continue using the VsCode way to do things.

When coding projects with more relaxed deadlines, I used to code more in Vim way.

Another thing that helped me at this time was the project Vim Cheat Sheet. I did print the cheat sheet, and it is on my desk until nowadays.

After some time using Vscode in this way, it starts to be impossible to use it without the Vim emulator.

Make your Neovim have the same features that your VsCode.

I highly recommend that you make your Vim setup have the main VsCode features for a smooth transition without losing productivity.

To do this, I used one amazing project called LunarVim.

“LunarVim is an opinionated, extensible, and fast IDE layer for Neovim”.

For me, the best characteristic of this project is that the IDE layer added to LunarVim does not affect my Neovim config. To use LunarVim, I type “lvim” on my terminal, so if I type “nvim“, it will open my default Neovim configuration.

Create your Neovim config.

At the moment, I'm executing all my jobs using LunarVim. It's time to set up your own neovim config. It is important to tell that at this point, we were using Vim based on the VsCode or IDE way.

On the internet, you can find a lot of tutorials to make your Vim/Neovim looks and works like one IDE/VsCode. But I don't believe that it is the way to you have all vim benefits.

My reference to a good way to use Vim is a Youtube channel called Dev As Life. This guy does a fantastic job that inspires me a lot as a web developer; his setup is awesome. Take a look:

Today I use Neovim for 100% of my job, and I consider my productivity the same level them when I was using VsCode, but code using Vim, in my opinion, makes me more conscious about my code. It is difficult to explain, but from my point of view, it is like a drive a mechanic gear car without all features that the new high-tech cars have, with lots of sensors and automatic adjustments. Those who like to drive may enjoy the mechanic gear car and the pure drive feeling.


To start the transition from one IDE to Vim, you can use these steps:

  1. Use one Vim emulator in your IDE. This will help you memorize the commands.
  2. Print Vim Cheat Sheet and keep it on your desk.
  3. When you migrate to Vim, try using one project, LunarVim, to make your transition smooth.
  4. Create your own Neovim config.

Thank you for reading.

Click here to see my Neovim config.