Neovim: your terminal IDE

Neovim: your terminal IDE

Even with the terminal, tmux, and an AI agent ready to go, one piece is still missing: the editor itself. AI generates plenty of code, but you still need a fast, keyboard-driven place to read and navigate it. For me that place is Neovim.

It's tempting to think that in an era where AI agents write most of the code and developers mostly review pull requests, a powerful editor matters less than it used to. I don't buy it. Being able to jump into a codebase by hand - chase a definition, grep for a pattern, sketch a quick experiment, fix something small without spinning up a whole agent loop - is a skill that won't go away. It matters even more when you're working on a remote machine over SSH, where a GUI IDE is awkward but a terminal editor feels native.

There are other terminal editors out there, but out of all the alternatives Neovim is the one that feels mature and powerful enough for full-time software development. It also runs equally well on a beefy workstation and on a phone over SSH, which matters a lot in the workflow described in earlier articles.

Custom config, not a distribution

There are pre-packed Neovim distributions out there that ship with everything already wired up - colorscheme, LSP, fuzzy finder, file tree, the works. They get you to a polished IDE in minutes, and that's a perfectly fine starting point.

In my case I preferred to configure everything on my own. It takes more time upfront, but in return I get more control and customization, a leaner setup, and noticeably better performance - at the cost of having fewer features than a fully loaded distribution. Whatever is in my config is there because I put it there, which makes it much easier to reason about (and easier for AI to reason about, when I ask it to help).

One thing worth being honest about: I don't really use the things Vim and Neovim are famous for - macros, advanced motions, the whole modal-editing deep end. I use Neovim in a way that's pretty close to how I'd use a GUI editor like Visual Studio Code: open a file, jump around with a fuzzy finder, edit, save. The terminal-native nature and the plugin ecosystem are what I'm really after.

If you want to see the full configuration, it lives in my env-setup repository: nvim-init.lua. Below I only highlight the plugins that turn Neovim into something close to a full IDE.

The plugins that matter

I only list the ones I consider most important here. There are a few smaller helpers in my config that I won't cover - if you're curious, they're all visible in the init.lua linked above.

Language intelligence

  • coc.nvim - LSP client with a rich extension ecosystem (TypeScript, Deno, Lua, Terraform, Docker, YAML, ESLint, Prettier...). This is what gives me go-to-definition, rename, diagnostics, and code actions.
  • nvim-treesitter - proper syntax highlighting and indentation across 40+ languages.

Navigation and search

  • telescope.nvim - fuzzy finder for files, live grep, references, jumplist, and more. The single plugin I'd miss the most.
  • nvim-tree.lua - the file explorer sidebar.
  • bookmarks.nvim - persistent bookmarks across sessions, very handy in larger codebases.

Looks

Neovim

Once everything is configured - Neovim is a great tool for navigating a codebase with focus.

Wrapping up the terminal walkthrough

That closes the loop on the terminal-based setup: emulator and font, tmux for layout and persistence, AI agents living next to your shell, and Neovim as the IDE that ties it all together. None of the pieces are exotic on their own - what makes the workflow powerful is how well they compose. Once your hands stop leaving the keyboard, going back to a mouse-driven IDE feels like a downgrade.

Comments