I've been using vim keybindings for over five years now, and have used VSCode and JetBrains IDEs for the past several years. Recently, I made the switch to neovim. I found the vim extensions for vscode and Intellij/PyCharm to be lacking in certain areas (macros, some vim extensions, etc...). Also, it just seemed unnecessary to have an UI application on top of a vim extension that I do not use for anything except linting and static code analysis. (Which i can have in neovim as well).
As I was new to neovim, I decided to use a distribution, in my case LazyVim and it is great!
Why vim in the first place?
Vim, or to be precise vim motions, offers a text editing experience that transforms how you interact with code, where thoughts and intentions become immediate keystrokes without interruption. Since I've been using vim keybindings for years, I didn't have to overcome the steep learning curve - the muscle memory was already there, allowing me to maintain development speed while gaining the benefits of a true vim environment. The choice between neovim and vim was simple, learning a language specifically for an editor to configure it was a no-go. So I engaged with neovim and lua over the past year.
The key advantages I see:
- Keyboard-centric workflow - Everything can be done without reaching for the mouse
- Customizability - Every aspect can be tailored to your specific needs
- Efficiency - Commands that would take multiple steps in other editors can be accomplished in a few keystrokes
- Lightweight - Faster startup and lower resource usage compared to Electron-based editors
Missing bits in neovim
Transitioning wasn't seamless. I found myself switching back and forth between VSCode and neovim over the past year. The main challenge wasn't the editor itself, but finding an alternative to RooCode, an AI tool I frequently used in VSCode.
While GitHub Copilot works in neovim (just as it does in VSCode), I was looking for a different AI experience that would work seamlessly with my terminal-based workflow. RooCode for VSCode provides a way of just delegating tasks that are then implemented across the code base instead of just code suggestions. And since Anthropic released Claude Code there is a great alternative to RooCode or similar tools that just runs on the terminal.
Claude Code
As a CLI tool, it integrates perfectly with neovim's terminal-based workflow. I can:
- Open Claude Code in a split terminal window directly within neovim
- Ask questions about my code while keeping my editor context
- Have Claude Code edit files directly, without needing to copy-paste suggestions
- Get AI assistance without leaving my keyboard-focused environment
What makes Claude Code particularly special is that it works directly with my file system. There's no need for special extensions or plugins of your IDE - it's just a terminal tool that can read and modify files on its own. I simply open a terminal window, type "claude", and start working.
This combination gives me the best of both worlds: neovim's editing efficiency and the power of AI assistance. For instance, while developing this website, I could use Claude Code to suggest optimizations, and generate new components, all while staying in my environment.
The Current Setup
This is what my current development environment looks like.
Looking Forward
This setup isn't for everyone. The learning curve for neovim and especially vim motions and modes is steep, and the terminal-based approach might not appeal to developers who prefer GUI applications. However, if you value efficiency and enjoy a keyboard-centric workflow, the combination of neovim and Claude Code is worth exploring.