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.
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
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.
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]
[ ← ] [ ↑ ] [ ↓ ] [ → ]
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 [[A
s 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.
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
- Doesn’t allow me to go outside the root directory.
- Whenever I open a file outside the project root, it doesn’t react to the new path.
- I’m heavily accustomed to my previous plugin’s keybindings.
- Spell Checker Issues
- Everyone online recommended using Neovim’s built-in spell checker, but it
highlights words like
fetchUsers
andMAX_COUNT
as incorrect. - It doesn’t offer quick fixes for misspelled words in variable or function names with different naming conventions.
- Snippets Issues
- I'm very used to using UltiSnips with coc-snippets.
- Most people now use LuaSnip, which requires defining snippets in Lua. To me, it felt unnecessarily complex for what I needed at the time.
- 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.
Top comments (0)