DEV Community

Cover image for How a Keyboard Mod Led Me to Vim (And Why I Never Went Back)
Muhammad Sifat Hossain
Muhammad Sifat Hossain

Posted on

How a Keyboard Mod Led Me to Vim (And Why I Never Went Back)

About four years ago, when I was just starting out with programming and web development, I quickly realized that moving my fingers off the home row to press the arrow keys was super inefficient and annoying.

I thought, “If only I could press the arrow keys with my thumbs, that would be way better.” Around that time, I had also started tinkering with electronics, so I decided to hack my keyboard to bring the arrow keys closer to my thumbs.

Hacking My Keyboard

When I opened up my keyboard, I was greeted with a maze of circuit traces on a membrane sheet.

Keyboard Internals

I thought, “Man, this is too complicated, and I really don’t want to break my keyboard.” I was about to give up when an idea hit me—I took a photo of the membrane sheet and traced the lines connected to the arrow keys in a photo editor. Once I figured out which pins triggered the arrow keys, I tested them with an alligator clip to make sure they worked.

Connecting Wires to the Pins

Inserted ribbons in keyboard pins

As you can see in the image, there’s a metal bar screwed over the pins to keep the membrane circuit connected to the controller board, so soldering wasn’t an option. Luckily, I had some aluminum foil lying around, so I made a few flexible ribbons, attached wires to them, and after some trial and error, I managed to put them on the right pins. I then screwed the metal cover tightly over the membrane sheet and secured everything with hot glue.

Wires secured with hot glue on the keyboard controller

Adding the Arrow Keys

I took four push switches and super-glued them to the side of my keyboard where my thumbs could reach. Then, I grabbed four keycaps from my broken laptop keyboard and super-glued them on top of the switches.

The final mapping looked like this:

[Home] [PgUp] [PgDn] [End]
[ ←  ] [ ↑  ] [ ↓  ] [ → ]
Enter fullscreen mode Exit fullscreen mode

Hacked thumb arrow keys

It took about four and a half hours, but everything worked perfectly. Life was good for a few months 😋.

Replacing My Keyboard and Discovering Vim

A few months later, I had to replace my keyboard because the stiff keys on my old keyboard (which one of my teachers bought in 2010, I believe) were making my fingers ache. Sadly, modding the new one wasn’t an option, and I really missed my thumb arrow keys.

So, I searched (with my then-broken English, which is still the case TBH 🙄):

typing arrow keys while coding is becoming really tiresome

That’s when I stumbled upon a Reddit comment that said something like:

That’s why I install the Vim plugin whenever I install VSCode.

Quick Side Note: The word "Vim" sounded familiar. Two weeks earlier, I had switched from Windows to Ubuntu, and while installing some applications in the terminal (following a guide), it opened a text file with "VIM" written in the terminal title bar. I couldn’t figure out how to close it, so I just closed the whole terminal 😂.

I went straight to YouTube to learn more about Vim, and after watching some videos, I thought, “This is a game-changer! How did I not know about this?” I picked up the basics in 2–3 days, and after that, there was no going back.

Switching to Vim from VSCode

I had convinced myself that I needed Vim to code. If someone had forced me to use anything else, I would have quit programming and become a farmer. I tried the Vim plugin in VSCode, but it just wasn’t as sleek and responsive as Vim. Plus, with Vim, I never had to leave my terminal!

There was just one problem—setting up autocompletion and LSP as a complete beginner was a nightmare. I barely knew JavaScript, let alone Vimscript. Following tutorials left me with a somewhat working setup, but it had a bunch of annoying bugs. I don’t remember all of them, but one was that if I scrolled the mouse wheel in insert mode, it would randomly insert a bunch of [[As or something weird like that.

Trying to fix these bugs by Googling and watching random tutorials became so overwhelming that I almost started crying out to Allah (not kidding!) because I really didn’t want to go back to VSCode.

Finally, I found Ben Awad’s How to Configure Vim like VSCode video, switched to Neovim, and followed the tutorial. That solved a lot of my issues.

Current State

Since then, I’ve tweaked my config a lot, switched from Vimscript to Lua, and made my setup truly mine. I use Vim for work (obviously), taking notes, doing assignments with Markdown and KaTeX, and any quick and dirty text editing.

My Vim screenshot in 2023

I’m still using the old CoC plugin in 2025 and haven’t switched to Lua-based LSPs yet because some plugins I rely on (like coc-spell-check, coc-explorer, and coc-snippets) don’t have perfect alternatives. In early 2023, I spent over a week trying to switch to modern plugins, but I ran into a bunch of issues that weren’t there with CoC:

  • File Explorer Issues
  1. Doesn’t allow me to go outside the root directory.
  2. Whenever I open a file outside the project root, it doesn’t react to the new path.
  3. I’m heavily accustomed to my previous plugin’s keybindings.
  • Spell Checker Issues
  1. Everyone online recommended using Neovim’s built-in spell checker, but it highlights words like fetchUsers and MAX_COUNT as incorrect.
  2. It doesn’t offer quick fixes for misspelled words in variable or function names with different naming conventions.
  • Snippets Issues
  1. I'm very used to using UltiSnips with coc-snippets.
  2. Most people now use LuaSnip, which requires defining snippets in Lua. To me, it felt unnecessarily complex for what I needed at the time.
  3. UltiSnips feels much simpler, as snippets are defined in an easy-to-read syntax and stored in a plain text file.

I know these issues can be fixed, but I just haven’t had the time to switch yet.

Looking back, discovering Vim so early in my programming journey was one of the best things that ever happened. I’m super grateful to the creators of Vi, Vim, and the contributors of Neovim for their amazing work.

Thanks for reading this far—I hope you found it interesting! I'd love to hear your thoughts, so feel free to drop a comment or ask any questions.

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more