Blog Post
The Vim Commands I Actually Kept After vimtutor
I finished vimtutor, used kickstart.nvim for a nicer practice setup, and wrote down the commands that felt useful without becoming a wall of Vim trivia.
I finished vimtutor today.
I did not use a completely bare setup while practicing. I used kickstart.nvim because syntax highlighting, line numbers, and a few sane defaults make the whole thing less painful. There is enough friction in learning Vim already. I do not need the editor to look like a punishment.
While going through the tutorial, I kept a small cheatsheet in Obsidian. Not every command. Just the ones I actually wanted to reach for again.
Vim Is Still Optional
It is not necessary or mandatory to learn Vim in 2026. Most of my work can happen in a modern editor with good defaults, extensions, search, Git integration, and all the other small comforts I happily use every day.
But I still think the skill is relevant.
Sometimes the editor is not the point. Sometimes I am inside a remote terminal, editing a config file on a server, fixing something over SSH, or making a tiny change in an environment where opening a full IDE makes no sense. In those moments, knowing enough Vim to move around, edit text, save, and quit without panic is still useful.
That is the level I care about. Not becoming a Vim maximalist. Just being comfortable when Vim is the tool already there.
Why I Wrote It Down
The official tutorial is good because it makes you type the commands instead of just reading them. That part matters.
But after finishing it, I still wanted a tiny reference. Something smaller than a full Vim manual, and less chaotic than searching the internet every time I forgot how to delete two words.
My rule was simple: if a command felt immediately useful while practicing, it went into the note.
Movement
These are the commands I expect to forget just often enough to be annoying:
0 start of line$ end of linegg top of fileG bottom of fileCtrl+g show cursor position and file statusCtrl+o jump backCtrl+i jump forwardH move to the top of the visible screenL move to the bottom of the visible screenzz center the current line in the windowThe jump list commands were the nicest surprise. Ctrl+o and Ctrl+i make navigation feel less like getting lost and more like having breadcrumbs.
H and L are about the screen, not the file. That makes them useful when I can already see the line I want but do not want to reach for the mouse or count rows.
zz is useful after jumping somewhere. It puts the line I care about back in the middle of the screen, which makes the context easier to read.
Editing Text
The pattern that clicked for me was that many commands are just an action plus a movement:
x delete the character under the cursord3w delete three wordsd$ delete to the end of the linedd delete the current line2dd delete two linesce change to the end of the wordc$ change to the end of the lined [count] motion and c [count] motion are easier to remember than individual shortcuts. Once that idea lands, Vim starts feeling less like a pile of magic spells.
It is still a pile of magic spells. Just a slightly organized one.
Insert, Append, Replace
The basic insert commands are worth keeping close:
i insert before cursora append after cursorA append at end of lineo open a new line belowO open a new line aboveEsc return to normal modeAnd for small fixes:
r{c} replace one character with {c}R replace modeu undoCtrl+r redoA and o already feel like commands I will use constantly. They remove tiny bits of cursor movement, which is basically the whole point.
Copy, Cut, Paste
The part I had to remind myself about is that Vim’s register is not the system clipboard by default.
yy yank the current lineyw yank a worddd cut the current linep paste after the cursorP paste before the cursordd plus p is the first version of moving a line around that felt natural. Not fancy. Useful.
Text Objects
Text objects extend the same [operator] [i/a] [object] pattern. i means inside (excludes delimiters and surrounding whitespace), a means around (includes them).
diw delete inside the current worddaw delete around the current word (takes the space with it)dip delete inside the current paragraphdap delete around the current paragraph
ciw change the current wordci( change inside parenthesesdi( delete inside parentheses
yip yank inside the current paragraphyap yank around the current paragraph
vip visually select inside the current paragraphvap visually select around the current paragraphdaw is the word-sized version of the paragraph idea. It deletes the word under the cursor and takes the nearby space with it, which keeps the sentence from growing an awkward double space.
ci( is useful when I want to replace function arguments or grouped text without touching the parentheses themselves. di( does the same selection but deletes instead of dropping into insert mode.
vip and vap make paragraphs feel like objects I can grab instead of text I have to carefully drag across.
Neovim only:
difanddaf(delete inside/around the current function) follow the same pattern but require a plugin that teaches Vim what a function is. When they work, they feel exactly like the kind of shortcut Vim was built for. Not universal, but worth knowing they exist.
Search And Commands
The search commands are small, but they make practice files much easier to move through:
/{text} search forward?{text} search backwardn next matchN previous match% jump to matching bracket:s/old/new/g replace in current line:%s/old/new/gc replace in the whole file with confirmationAnd the basic command mode survival kit:
:w save:q quit:wq save and quit:q! quit without saving:w file save to a new file:r file insert another file here:!cmd run a shell commandThat is enough for a first pass.
The Useful Size
The best cheatsheet is not the biggest one. It is the one I will actually open.
This note is useful because it stays small. It gives me the core movements, edits, yanks, searches, and file commands without pretending I need to learn every Vim trick on day one.
The goal is simple: keep practicing, keep the reference short, and let the weird commands become muscle memory one tiny inconvenience at a time.