I was an original die-hard fan for Vim and has been using it for many years. I remember getting carpal tunnel when I was in college after hitting too many ctrl/alt/shift chords with Emacs. Vim was the only editor that I could use without pain in my wrist.
A couple of years ago I had the opportunity to pick up Typescript on top with heavy Python/C++ development at the same time. I really had a hard time trying to get all the language servers to work. Eventually I tried to be more sane and changed all my setup to VSCode. Well, I didn’t drop it completely as I really couldn’t really live without the great Vim mode integration there.
For the most part VSCode was doing like 90% of what I really wanted to do. Things I really like:
- Extension system has been stable most of the time. The core Python/Typescript LSP has been supported by a great team and overall it works very well.
- The configuration system was much more simple really you have to deal with a single json (well, locally and remotely too). However, for the most part json is static and does not involve any coding.
- The remote capability is really, really great. It solved so many issues that I had with Vim + Tmux + terminal where copy/paste was really a pain to get to work properly with xclip etc.
Recently though, I really want to try out Neovim again to see what it can do after so many years. It had been quite a trip trying to convert my 10+ years of configurations with Vimscript into Lua and I really have to say it makes a world of difference.
The learning curve was steep but worth it. I think it’s steeper than when I first learn Vim as it’s hard to break old muscle memory and set up everything to be productive again. Most of the challenge was basically learning a new language and navigate the plugin system. I have to say LazyVim has helped immensely. However, the configuring the 30+ plugins that came along with LazyVim in additional to what I had to install along the way does not make it easy.
Overall, the learning curve is steep, but it’s well worth it. I can get 70% there with LazyVim defaults but many of those settings/behavior that I’m used to for so many years need a lot of work to tune it to do exactly want I want to do. I do think with the standard LSP/DAP it is much easier to get an IDE-like behavior comparing to like 5+ years ago. To get from 90% to 99% there was definitely a challenge as it required extra code to do exactly what you want.
I really feel like though I can switch back to Neovim without really compromising anything that I gained in VSCode. Well, may be one thing is that the Jupyter Notebook integration was really, really great in VSCode that so fare I can’t find a replacement yet in Neovim.
If you’re starting up this is what I’d recommend:
- Do yourself a favor and install LazyVim/LunaVim/etc. Most of the time it’s basically trusting somebody to curate a list of plugins for you that is useful. I think for the most part it’s worth it.
- Learn Lua, there’s really no way around getting the editor to do what you really want to do.
- Learn how the plugin system work. I think the LazyVim is somewhat under documented as there are so many different ways to configure a plugin. Lazy loading also doesn’t make things easier to get started as well.
- Derive some form of organization to manage your configuration. Use git/stow to manage them properly.
- For the most part, you don’t have to learn everything to be productive. However, many plugins are designed to fit experts instead of beginners and the compromised were made according. So you just have to learn to be patient.
Some plugins that I think works very well:
- Mason (LSP/DAP configuration)
- neo-tree.nvim (replace the tree browser)
- project.nvim (can somewhat replace workspace that way)
- trouble.nvim
Have fun!