LmCast :: Stay tuned in

I set all 376 Vim options and I'm still a fool

Recorded: Jan. 20, 2026, 10:03 a.m.

Original Summarized

I set all 376 Vim options and I'm still a foolI set all 376 Vim options and I'm still a foolby Evan Hahn,
posted
Jan 16, 2026I set all of Vim’s configuration options. I still feel far from mastery.First impressions of Vim: wowI first saw someone use Vim during an internship in 2012.I had been coding for many years and I fancied myself pretty good at shortcuts, but I was quickly humbled. I watched in awe as experienced users zipped around the code. A single keystroke could move the cursor halfway across the file to exactly the right spot. Code was ripped apart and reshaped like putty.“Wow,” I thought to myself, and probably said out loud.13 years later, still clumsyI vowed to master this editor but I was slow. When I wasn’t accidentally opening some unknown menu, I was taking an uneconomical path through the code. I pressed j twenty times instead of running 20j, or manually deleted code inside parenthesis instead of running di(. Sometimes I’d open another text editor to give my mind a break from all the key bindings!Fast-forward to 2025. After tons of practice, I felt much more capable. Code did feel more like putty. I was working closer to the speed of thought. I could get code where I wanted much more quickly. 13 years of practice paid off!But Vim still felt clumsy. I was still accidentally opening menus I didn’t recognize. I would do silly things like converting the whole file to lowercase, or trigger some scary error message. “Surely I shouldn’t be making these mistakes,” I thought. What could be done to finally master this editor?My goal: set every Vim optionThat desire for expertise led me on a quest to set all of Vim’s options. I would make an informed decision about all 376 of Vim’s settings and drop them in my .vimrc. In other words, I wanted to 100% Vim.Surely, setting every Vim option would make me the fluent expert I wanted to be…right?I pored over every single Vim option and made a decision. What did the option do, and what did I want it to be set to? My goal was to be thorough; leave no stone unturned. I only set the option after I understood it.Eventually, after countless hours, I had done it. I had set every single Vim option.I learned a lot…This exercise taught me plenty about day-to-day usage and the editor’s inner workings. I spent a lot of time with the documentation, Vim’s source code, and online forums.Here’s a grab bag of things I learned:How to use external commands. I didn’t realize I could send text from a Vim buffer to an external command, and vice-versa. Now I can write regular programs that operate on stdin. For example, I now frequently use a program to remove “smart quotes”, which I call without leaving the editor. See :help filter and :help write_c for details.Vim’s docs are mixed. I frequently ran the :help command for something, read the docs, and came away clueless. Thanks to the great people of the internet for so many great explanations! One of the flags stumped me so much that I had to ask my own question on Vi Stack Exchange because nobody had really documented it before.How Vim writes files. When you run :w, it’s just saving the file—how hard could it be? Turns out, it’s complicated! If you’re overwriting a file, Vim (by default) creates a backup of the old version, then overwrites it with the new version. This can help avoid data loss in some situations. But there’s a lot of complexity here: in the fate of that backup file after a successful write, in how the backup switcharoo happens, and where the backup is saved. This is probably irrelevant for most people, but I had to understand the details in order to set every option.The command-line window—which I’d always open by accident—is super useful. The cedit option taught me about the command-line window. I frequently opened this by running q: instead of :q, and didn’t know what I had done. Now I know: a useful way to search and edit the history of previous commands and searches. For example, if I run some long command and make a typo, I can open the command-line window and fix the error using regular Vim keybindings.Digraphs are an obscure feature for typing obscure characters. For example, you can enter “½” in Insert mode with CTRL-K 1 2. There’s a big list in :digraphs. I don’t use this much, except for typing fractions, but I use this more than I thought I would.How to set options conditionally. I knew about regular if conditionals with things like if has('nvim'). But I didn’t know that you could set a Vim option only if it’s supported with code like if exists('+option').Vim and Neovim have more differences than I thought. Among the many changes, I was pleased to learn that pasting is smoother in Neovim, that Q repeats the last recorded macro, it makes running arbitrary code safer, and has a much nicer default color scheme.Vim used to have a different name. Today, “Vim” stands for “Vi IMproved”, an old Unix editor from the 1970s. But it was originally called Vi IMitation!This is just a sample of my many discoveries. For more, see my heavily-annotated init.vim.…but I’m still not fluentAs of this writing, my configuration file is nearly 2900 lines long.This exercise was fun. It also taught me a lot about the editor I use every day. I definitely feel more skilled!Yet the feeling of awkwardness remains. Even after ~14 years, I still accidentally open the command-line window all the time. I mess up filtering commands, or get lost in the jumplist. I still sometimes press k ten times instead of running 10k.I discovered one thing about myself. The feeling of true Vim fluency—one where every keystroke is exact, I never make mistakes, and I’m exploiting every obscure feature—is a fantasy, at least for me. That’s a comforting constant in this topsy-turvy life: I’ll always have more to learn about Vim.Click here to see the finished product.About meContactProjectsGuidesBlogRSSNewsletterMastodonUnless noted otherwise, content is licensed under the Creative Commons Attribution-NonCommercial License and code under the Unlicense.
Logo by Lulu Tang.
Profile photo by Ali Boschert-Downs.

Evan Hahn’s article “I set all 376 Vim options and I’m still a fool” chronicles his decade-long struggle to master the Vim text editor, culminating in an exhaustive effort to configure every one of its 376 settings. Hahn recounts his initial encounter with Vim during an internship in 2012, where he was overwhelmed by the fluidity of experienced users who manipulated code with precision using minimal keystrokes. Despite years of practice, he admits to lingering clumsiness—pressing keys inefficiently or accidentally triggering unintended behaviors like opening unfamiliar menus. By 2025, he had made significant progress, feeling closer to “working at the speed of thought,” yet still faced frustrations such as accidental command-line window openings or errors from obscure settings. This prompted a resolve to configure all Vim options, believing that comprehensive control over the editor’s parameters would finally grant him mastery.

Hahn’s project involved meticulously reviewing each of Vim’s 376 options, understanding their functions, and setting them according to his preferences. This process revealed insights into Vim’s inner workings that he had previously overlooked. For instance, he discovered how to integrate external commands with Vim buffers, enabling tasks like removing “smart quotes” without leaving the editor. He also encountered challenges with Vim’s documentation, which often left him confused despite extensive research. One particularly perplexing flag required him to seek clarification on Vi Stack Exchange, highlighting gaps in community resources. Additionally, he learned about the complexity of Vim’s file-saving mechanism, which creates backups by default—a feature that, while useful for data safety, involves intricate processes like backup file management and temporary swaps.

The exercise also uncovered lesser-known features, such as the command-line window (activated via `q:` instead of `:q`), which Hahn initially used accidentally but later recognized as a powerful tool for editing and searching command history. He explored digraphs, an obscure method for typing special characters like “½” using `Ctrl-K` followed by a numeric sequence, and discovered conditional option settings that allowed him to tailor configurations based on environment support. His analysis of Vim versus Neovim revealed notable differences, including smoother pasting in Neovim and enhanced macro repetition with the `Q` key. Hahn also noted Vim’s historical evolution, recalling that it was originally called “Vi IMitation” before being rebranded as “Vi Improved.”

Despite these revelations, Hahn’s configuration file grew to nearly 2,900 lines, reflecting the depth of his efforts. Yet, even after this exhaustive work, he remained self-aware of persistent inefficiencies: he still struggled with command-line window navigation, filtering commands, and avoiding repetitive key presses. This led him to a humbling realization: the ideal of “Vim fluency”—where every keystroke is deliberate and mistakes are nonexistent—was an unattainable fantasy. Instead, he embraced the idea that mastery is a continuous process rather than a fixed destination. The article concludes with his acceptance of this truth, acknowledging that the pursuit of expertise in Vim would always involve learning new nuances and adapting to its evolving complexity.

Hahn’s narrative underscores the paradox of technical mastery: while deep engagement with a tool can yield profound insights, it also exposes the limits of human control over intricate systems. His journey highlights the value of curiosity and persistence, even when the goal of absolute proficiency remains elusive. By documenting his experiences, Hahn not only shares practical knowledge about Vim’s configuration but also reflects on the broader human experience of striving for competence in a world filled with ever-expanding complexity. The article serves as both a technical guide and a philosophical meditation on the nature of skill acquisition, emphasizing that growth often lies in the process rather than the destination.