Finding the right development environment is a journey of balancing efficiency, customization, and reliability.
Before I continue, I would like to clarify that I do not wish to start an editor “holy war.” I believe that both Neovim and Visual Studio Code (VSCode) are exceptional and powerful editors. The choice of a development tool is highly subjective, and what works for one person might not work for another. I am simply sharing my personal feelings and the journey I took to find the setup that fits my specific needs.
Starting with VSCode#
I began my workflow using VSCode due to its user-friendly interface and extensive plugin ecosystem. However, I soon found the constant reliance on mouse-driven operations to be a bottleneck. My objective was to achieve a completely keyboard-centric workflow to maintain focus and speed. Although VSCode provides a powerful built-in keyboard shortcut system, it requires frequent use of arrow keys and function keys.
I started with VSCodeVim, a popular extension that brings Vim-like keybindings to VSCode.
It almost met my requirements,
but I discovered that it became extremely slow when I worked with large files.
Furthermore, it could not synchronize well with my existing Vim configuration.
I do not like the idea of editing a vimrc and a json configuration file twice for the same functionality.
The Transition to Neovim#
To address these limitaions, I transitioned to Neovim. I initially explored LazyVim, a popular Neovim configuration that offers a comprehensive set of features out of the box. But I quickly realized that the pre-configured framework was too bloated for my requirements. I Preferred a minimalist setup where I understood every line of my code in my configuration. I wanted to use as few plugins as possible to reduce potential breaks and maintenance overhead.
Thanks to mini.nvim, I was able to build a lightweight and efficient Neovim setup with only 10 plugins. During this period, I was highly satisfied with my setup. The editor was exceptionally flexible and and highly customizable. It allowed me to tailor every detail, such as keybindings, UI elements, and editor behaviors, to my specific needs. I truly enjoyed the process of building a bespoke tool that felt like an extension of my thought process. The modular nature of Neovim provided a level of control that VSCode could not match.
Technical Friction and Environment Constraints#
The challenges began when the maintenance overhead started to interfere with my productivity. I used to spend hours troubleshooting breaking changes after Neovim updates or plugin upgrades. Although I enjoyed the process, the time investment was significant. I found that there were even more commits in my dotfiles repository than in my actual code projects. I had a feeling that I was spending more time maintaining my editor than writing code.
The turning point occurred when I attempted to switch nvim-treesitter to the main branch to access the latest features.
The transition required the latest Tree-sitter CLI.
I encountered a critical failure on one of my remote servers because the GLIBC there was too old to support the latest Tree-sitter CLI binary.
I became exhausted and tired of dealing with these constant technical issues. The frustration of being unable to work because of a version mismatch on a remote machine was the final sign that I needed a more stable solution.
A New Discovery: AI as a Productivity Multiplier#
Around that time, I had a chance to use Cursor with a free PRO subscription for one year. Thanks Cursor for the student discount!
I decided to give it a try and I was amazed. Not only the Code Agents but also the Cursor Tab are extremely powerful and boost my productivity significantly.
That’s when I realized something important:
Efficiency is something I care about most, it is not just about fast text editing with comfortable keybindings. It’s about getting work done with the least effort and time.
Re-defining the Core Requirements: Efficiency#
These experiences made me rethink my priorities.
Vim motions are still essential, but they are no longer the whole story. What I truly care about is end-to-end efficiency:
- Moving through code with minimal friction
- Editing precisely and efficiently with keyboard
- Accelerating development with AI assistance
This led me to vscode-neovim. Unlike a standard Vim emulation layer, this extension runs a functional Neovim instance along with VSCode. This allows me to synchronize my Neovim configuration with vscode-neovim and the vanilla Neovim running in the terminal. Although this extension has some small bugs, it provides the exact balance I require. It allows me to use the familiar Vim motions and modal editing along with the powerful language support and AI assistance from the modern editors.
My Current Workflow#
Today, I use a hybrid approach that serves my needs.
I still use Neovim, but I keep it almost completely vanilla—no plugins, and even compatible with classic Vim. It is my go-to tool for quick edits and lightweight file inspection.
For heavy development, I use VSCode (or Cursor) with the vscode-neovim extension. This gives me:
- Vim motions and modal editing
- Powerful language support and AI assistance
This is my story of finding the right development environment, hope it helps you in your own journey!
Last updated: 2026-01-05
