Full Circle: My VS Code -> Neovim -> VS Code Journey
In the world of software development, the tools we use can significantly impact our productivity and workflow. As a frontend engineer, I've had my share of experiences with various code editors and IDEs. This post describes my two-year journey from Visual Studio Code (VS Code) to Neovim and back to VS Code, highlighting the motivations, challenges, and conclusions of this adventure.
The Initial Switch to Neovim
After using VS Code as my primary code editor for a long time and seeing creators like ThePrimeagen showcase the power of Neovim, I decided to make the switch and finally learn how to exit Vim. The idea of coding in a highly customizable and efficient editor was too tempting to resist. I started with a pre-configured Neovim distribution called LazyVim, which provided a solid foundation for my coding needs.
The Learning Curve
My first dive into Neovim was not exactly a walk in the park. Watching creators online navigate their codebases in an instant, create quick macros to rename variables, and perform fast grep searches felt like magic. However, I quickly realized that mastering Neovim required a significant investment of time and effort. The modal nature of Vim, the plethora of plugins, and the need to understand Lua for configuration were all hurdles I had to overcome. The first time I opened my project in Neovim was a bit of a shock. There was no linting, no auto-formatting, no Git signs, and not even a basic file tree staring back at me. I had to learn how to set up these features from scratch, which was both frustrating and enlightening.
This is why I started with LazyVim. It provided a pre-configured environment that included many features I was used to in VS Code. LazyVim also included a plugin called which-key.nvim, which displays available keybindings in a popup, making it much easier to learn and remember custom shortcuts.
I used LazyVim for a few months, becoming comfortable with the basics of Neovim and its ecosystem. I learned how to navigate files, edit text, and use plugins effectively. I finally felt like I was not just getting by but actually enjoying the experience. The speed and efficiency of Neovim were undeniable, and I began to understand why so many developers swore by it.
The which-key plugin, besides being incredibly useful for learning keybindings and accessing plugins quickly, highlighted that I was using only a fraction of the available features. This realization sparked my curiosity and led me to explore more advanced configurations and plugins.
The Quest for Customization: Building My Own Config
While LazyVim was a wonderful starting point and offered an easy way to customize it, I felt the urge to create something truly my own. I wanted to build a Neovim configuration that reflected my coding style and preferences. I decided to start building my own configuration, finding the perfect starting point in Kickstart.nvim thanks to TJ DeVries.
Kickstart.nvim provided a solid foundation for my custom configuration, packed with essential keybindings and plugins. From there, I began adding my personal touches, experimenting with different plugins and configurations to create a setup that was uniquely mine.
I spent over a year building and refining my custom Neovim configuration, learning more about Lua, Neovim's API, and the vast ecosystem of plugins available. I experimented with various themes, keybindings, and workflows, trying to find the perfect balance between functionality and aesthetics. I ended up with a configuration I was proud of, one that felt like an extension of myself and my coding style.
However, the Neovim world doesn't stand still. Plugins evolved, new approaches emerged, and I found myself caught in a perpetual cycle of tweaking my config. It felt like chasing a moving target. Sure, I could have left it alone, but the urge to try the latest and greatest was always there.
The Turning Point: Realizing the Limitations
This constant need to update my configuration and the complexity of managing it began to affect my productivity. I found myself spending more time tweaking my setup than actually coding. The very thing that had drawn me to Neovim—the ability to customize and optimize my workflow—was becoming a source of frustration.
I couldn't ignore another factor any longer: the rise of AI tools in the coding world. I saw people sharing their experiences with Cursor, Windsurf, Copilot, and many other AI tools designed to work seamlessly with VS Code. According to the 2024 Stack Overflow Developer Survey results, VS Code was still the most popular IDE among developers, with about 74% of respondents using it as their primary code editor. While I was managing fine without these tools in Neovim, I couldn't shake the feeling—almost a tech FOMO—that I was missing out on AI tools that could genuinely enhance my coding.
Although AI tools were also emerging in the Neovim ecosystem, with more plugins being developed to integrate AI capabilities, I found the experience less polished and seamless than what was available in VS Code. For example, the best I could achieve was some auto-completion and code suggestions, while VS Code offered a more comprehensive AI-powered coding experience with its built-in support for GitHub Copilot, which seemed more reliable and effective, featuring advanced options like multi-line suggestions. The AI tools in Neovim often required additional configuration, and the integration was not as smooth as I had hoped.
The Return to VS Code
After a year of building and refining my custom Neovim configuration, I found myself at a crossroads. I had invested so much time and effort into creating something uniquely mine, but the limitations and frustrations were becoming too much to bear. I realized I missed the simplicity and ease of use that VS Code offered, along with its seamless integration with AI tools and the vast ecosystem of extensions that made coding a breeze. My primary goal remained the same: to be a productive frontend engineer, and I felt that VS Code was the tool that would allow me to achieve that.
I decided to switch back to VS Code, this time with a newfound appreciation for customization and the importance of finding the right tool for the job. I took the lessons learned from my Neovim journey and applied them to my VS Code setup, customizing it to fit my coding style and preferences. I still believe that Vim motions are the best way to navigate code, so I installed the Vim extension for VS Code and configured it to my liking using some of the keybindings I had learned in Neovim. This allowed me to retain the speed and efficiency of modal editing while enjoying the powerful features and integrations that VS Code offered.
Now I feel like I have the best of both worlds: the speed and efficiency of Neovim's modal editing combined with the powerful features and integrations of VS Code. I can use AI tools seamlessly, navigate my codebase with ease, and still enjoy the benefits of a highly customizable editor. When I need to execute into a Kubernetes pod or SSH into a server, I now confidently use Vim mode in the terminal, and I even know how to exit Vim!
Reflecting on the Journey
Looking back on that two-year rollercoaster from VS Code to Neovim and back again, it was a learning experience I wouldn't trade. I gained a deeper understanding of the tools I use every day, learned new skills, and discovered what truly matters to me as a developer. While Neovim offered a unique and powerful coding experience, the limitations and frustrations ultimately led me back to VS Code, where I can be more productive and efficient. Who knows, maybe one day I will return to Neovim, but for now, I am happy with my decision.
In the end, the most important lesson I learned is that there is no one-size-fits-all solution in software development. The best tool for the job is the one that fits your needs and preferences. It's okay to change your mind and adapt as you grow and learn. Whether it's VS Code, Neovim, or any other editor, the key is to find what works best for you and your workflow.
Conclusion
As a frontend engineer, my journey from VS Code to Neovim and back has been a rollercoaster of learning, experimentation, and self-discovery. I hope that by sharing my experiences, I can help others considering a similar switch or struggling with their own coding tools. Remember, the most important thing is to find the right tool for you—one that enhances your productivity and allows you to focus on what you love most: writing code.