Go back

The Loneliness of the Mid-Level Vimmer

I use NeoVim. It's the professional programmer’s text editor of choice—excepting those people who write languages that weirdly only be written with a special, sometimes expensive, text editor.

Using NeoVim is cool because it's incredibly powerful and flexible. You can edit text much faster than in any other environment, you never have to touch a mouse, and if you're willing to learn LUA, you can program it to do pretty much anything you want. If you don't want to learn LUA, there's probably someone out there who's already made a plugin that does whatever you want anyway. Finally, using NeoVim makes you look cool.

But there is a downside to Vimming. It's a weird fringe interest, even amongst software developers who are already a weird fringe group. Most people who know what Vim is don't know how to use it, are scared of it, and are happy to keep it that way. People don’t want to engage with it on any level—see all the “jokes” about exiting vim—and a lot of this is because all the people who do use Vim are completely insufferable. Using Vim drives a wedge between you and everyone else you might work with.


Pair Woegramming

Once you start using Vim, if you try and pair program with someone who isn't familiar with it, then they won't be able to take control of the keyboard and participate. And when you've been Vimming for a while and have developed bizarre muscle memory, and hyper-abstract ways of navigating a codebase1, it becomes difficult to work even with other people who use Vim. They’ll have their own ways of doing things, which won’t overlap with yours. The more interested you become in a topic, the tighter and less populated of a niche you sink into—until eventually, you are the only person in the world who can operate your text editor.

At the same time, when you sit down with someone who uses a normal text editor and try to work with them, you'll be utterly confused. Friction will be added where you don’t expect it. In VSCode, I feel a huge disconnect between how I expect to navigate a codebase and what is actually possible, and I spend half of my brainpower trying to prevent myself from hitting the capslock key after every line I type.

So by using Vim, I have, I think, increased my own productivity at the cost of alienating myself from everyone else. And while I'd still encourage you to use Vim2, this is a genuine problem that you will run into.

What to do about it

I have no idea. I used to think that everyone around me would see that NeoVim was “the right way,” and that they would gradually converge on using it. I hoped that I could go through life not changing my own behavior, and that the world would change to suit me. Unfortunately, this has not turned out to be true.

So I would like to be able to pair program with people effectively, but I want to keep using NeoVim. Maybe I need to set aside one day a week where I will only code using a very plain, boring, mouse-driven text editor. To keep my skills sharp.

1 I mostly don't look at a file tree view. I move around by hitting a shortcut, typing the first few letters of the file I want and then having it open. Or else I jump to definitions and references once again by hitting keyboard shortcuts. To someone who doesn't do these things, it looks like the open file is just changing at random while I tape. Baffling!

2 If you do want to learn Vim, email me! Or maybe watch the Primgean’s Primagean’s Primeagen’s Vim course - I haven’t watched it but it’s probably good.


harsha - January 10, 2024

> I mostly don't look at a file tree view. I move around by hitting a shortcut, typing the first few letters of the file I want and then having it open.

Can you provide more info on this. I want to know how you do it. I find myself using telescope's find files and grep in directory too much to navigate.

jwhles - January 11, 2024

So I mostly use the :GFiles command from junegun/fzf.vim - which I think is probably similar to using telescopes find files. I have it bound leader leader which makes it very quick to open, and I know the projects I work in well enough that I generally know the name of the file I want.

Besides that I use ThePrimeagen/harpoon to quickly change between files I’m actively working on. I used to use the `,,` shortcut a lot, but I now prefer harpoon. Finally, I rely on using LSP’s jump to definition / jump to reference a lot. Hope this helps!

rufevean - January 9, 2024

any good resource to learn vim other than primeagen's course? i cant afford that at the moment.

Jwhiles - January 9, 2024

There’s a lot of good stuff out there, and what’s best is going to be heavily dependant on how you like to learn.

I suggest that you first find a Vim cheatsheet that explains the basic commands. Then install the Vim mode plugin for whatever editor you already use. Try it for a few days and see if you like it. If you hate it, stop.

If you don't hate it, try and find someone you like who already knows Vim and is willing to spend some time teaching you. Then they can probably offer you more specific advice. :)

karimi - January 27, 2024

Have you tried vimtutor? I found this to be very useful when I was learning vim. You just open your terminal and type vimtutor.

Jeremy - December 29, 2023

I can commensurate. I value bespoke efficient solutions. The more of these quirks someone has the further it alienates them. For example, I use the Dvorak with Intl dead keys layout in Linux. My computer is more useful as a paperweight for most people. That being said, I enjoy the few tools out there for collaboration.

Hopefully some more collaborative editing tools and techniques are developed in the future. As for the adoption of vim & emacs; currently, I don't think it looks good. Our industry has been growing fast, and has a lot of inexperienced developers. No offence intended to them. When all they know is Win/Mac and GUI software, we're asking a lot of them to learn about this stuff we take for granted.

Clay - December 21, 2023

Some editors like JetBrains IntelliJ IDEA and its brethren have vim plugins. This could help bridge the gap.

Jwhiles - December 22, 2023

Yeah, that‘s true and is actually how I got into Vim in the first place. However I found that at some point the emulations become a bit frustrating because they’re working inside a system that still requires you to use the mouse for so many things - and also because running Vim mode in a modern editor always seems to come with a lot of latency.

Ryan - December 21, 2023

This is perhaps the most relatable piece of writing on the internet.

Juraj - December 21, 2023

You forgot to mention all this emacs "join us use evilmode" proselytizing.

Jwhiles - December 22, 2023

I did try emacs / evilmode for a few months. But it was too much for me, some of the features were really cool - but I could’t keep them all straight in my head. I did use some big Emacs distribution that had a lot of things setup for you, which was maybe a mistake.

Add your comment

Or, discuss on Hacker News