# Vim Keyboard Reference Complete QWERTY keyboard reference for Vim commands in Normal mode. This covers movement, editing, searching, and common operations. ## Essential Modes | Key | Action | |-----|--------| | `Esc` | Enter Normal mode (from Insert/Visual) | | `i` | Insert mode (cursor before character) | | `a` | Insert mode (cursor after character) | | `I` | Insert at start of line | | `A` | Insert at end of line | | `o` | Insert new line below | | `O` | Insert new line above | | `v` | Visual mode (character select) | | `V` | Visual mode (line select) | | `Ctrl+v` | Visual mode (block select) | | `:` | Command mode | | `/` | Search forward | | `?` | Search backward | ## Movement - Home Row (HJKL) ``` ↑ k ← h l → j ↓ ``` | Key | Action | |-----|--------| | **`h`** | Move left 1 character | | **`j`** | Move down 1 line | | **`k`** | Move up 1 line | | **`l`** | Move right 1 character | | `0` | Move to start of line | | `
| Move to end of line | | `^` | Move to first non-blank character | | `g_` | Move to last non-blank character | ## Word Movement (Top Row - QWERTY) | Key | Action | |-----|--------| | **`w`** | Jump to start of next word | | **`b`** | Jump to start of previous word | | **`e`** | Jump to end of word | | `W` | Jump to start of next WORD (ignores punctuation) | | `B` | Jump to start of previous WORD | | `E` | Jump to end of WORD | | `ge` | Jump to end of previous word | | `gE` | Jump to end of previous WORD | ## Line Movement (Left Side) | Key | Action | |-----|--------| | `gg` | Jump to start of file | | `G` | Jump to end of file | | `[line]G` | Jump to specific line (e.g., `69G`) | | `Ctrl+g` | Show current line number | | `)` | Jump to next sentence | | `(` | Jump to previous sentence | | `}` | Jump to next paragraph | | `{` | Jump to previous paragraph | ## Scrolling | Key | Action | |-----|--------| | `Ctrl+f` | Scroll forward (page down) | | `Ctrl+b` | Scroll backward (page up) | | `Ctrl+d` | Scroll down (half page) | | `Ctrl+u` | Scroll up (half page) | | `Ctrl+e` | Scroll down 1 line | | `Ctrl+y` | Scroll up 1 line | | `zt` | Center cursor at top of screen | | `zz` | Center cursor in middle of screen | | `zb` | Center cursor at bottom of screen | ## Deletion (D-Row) | Key | Action | |-----|--------| | **`x`** | Delete character under cursor | | **`X`** | Delete character before cursor | | **`dw`** | Delete to end of word | | **`db`** | Delete to start of word | | **`dd`** | Delete entire line | | `d0` | Delete to start of line | | `d
| Delete to end of line | | `dG` | Delete to end of file | | `dgg` | Delete to start of file | | `d[n]j` | Delete n lines down (e.g., `d3j` deletes 3 lines) | | `D` | Delete to end of line (same as `d
) | ## Change (C-Row - Insert After Delete) | Key | Action | |-----|--------| | **`cw`** | Change word (delete + insert mode) | | **`cb`** | Change to start of word | | **`cc`** | Change entire line | | `c0` | Change to start of line | | `c
| Change to end of line | | `C` | Change to end of line (same as `c
) | | `s` | Substitute character (delete + insert mode) | | `S` | Substitute entire line (same as `cc`) | ## Copy/Paste (Y-Row and P-Row) | Key | Action | |-----|--------| | **`yy`** | Copy entire line | | **`yw`** | Copy to end of word | | **`yb`** | Copy to start of word | | `y0` | Copy to start of line | | `y
| Copy to end of line | | `yG` | Copy to end of file | | `ygg` | Copy to start of file | | **`p`** | Paste after cursor | | **`P`** | Paste before cursor | | `]p` | Paste with auto-indent | | `[p` | Paste before with auto-indent | ## Undo/Redo (U-Row) | Key | Action | |-----|--------| | **`u`** | Undo last change | | **`U`** | Undo all changes on line | | **`Ctrl+r`** | Redo | | `g-` | Go to older text state | | `g+` | Go to newer text state | ## Find/Replace (F and R) | Key | Action | |-----|--------| | **`/pattern`** | Search forward | | **`?pattern`** | Search backward | | **`n`** | Next search result | | **`N`** | Previous search result | | `*` | Search word under cursor forward | | `#` | Search word under cursor backward | | `g*` | Search partial word under cursor forward | | `g#` | Search partial word under cursor backward | | `:s/old/new/` | Replace on current line | | `:s/old/new/g` | Replace all on current line | | `:%s/old/new/g` | Replace all in file | | `:%s/old/new/gc` | Replace all with confirmation | ## Selection - Visual Mode (V) | Key | Action | |-----|--------| | **`v`** | Start visual selection (characters) | | **`V`** | Start visual selection (lines) | | **`Ctrl+v`** | Start visual selection (block) | | `o` | Jump to other end of selection | | `aw` | Select word (in visual or operator) | | `ab` | Select block with brackets | | `at` | Select tag block (HTML/XML) | | `iw` | Select inside word | | `ib` | Select inside brackets | | `it` | Select inside tags | ## Operators (Can Be Combined with Motions) **Pattern:** `[operator][motion]` | Operator | Action | |----------|--------| | `d` | Delete | | `c` | Change (delete + insert) | | `y` | Yank (copy) | | `>` | Indent right | | `<` | Indent left | | `=` | Autoindent | | `gU` | Uppercase | | `gu` | Lowercase | | `~` | Toggle case | | `!` | Send to external command | **Examples:** - `d3w` = Delete 3 words - `y2b` = Copy 2 words backward - `gU5j` = Uppercase next 5 lines - `<3j` = Indent left 3 lines - `=ap` = Autoindent paragraph ## Numbers and Repeats | Key | Action | |-----|--------| | `.` | Repeat last command | | `[n]` | Prefix any command with number (e.g., `5j` = down 5 lines) | | `[n]dd` | Delete n lines | | `[n]yy` | Copy n lines | | `[n]p` | Paste n times | | `[n].` | Repeat last command n times | ## Marks and Jumps (M and G) | Key | Action | |-----|--------| | `m[a-z]` | Set mark (e.g., `ma` sets mark 'a') | | `'[a-z]` | Jump to mark (e.g., `'a` jumps to mark 'a') | | `''` | Jump to previous position | | `Ctrl+o` | Jump to previous position (older) | | `Ctrl+i` | Jump to next position (newer) | | `g;` | Jump to previous change | | `g,` | Jump to next change | ## Increment/Decrement (Numbers) | Key | Action | |-----|--------| | `Ctrl+a` | Increment number under cursor | | `Ctrl+x` | Decrement number under cursor | ## Case Operations (G-Row) | Key | Action | |-----|--------| | `~` | Toggle case of character | | `g~w` | Toggle case of word | | `gUw` | Uppercase word | | `guw` | Lowercase word | | `gUU` | Uppercase line | | `guu` | Lowercase line | ## Line Operations (Blank Row) | Key | Action | |-----|--------| | `J` | Join lines (delete newline) | | `gJ` | Join lines (no space) | | `[count]J` | Join n lines (e.g., `3J` joins 3 lines) | ## Indentation (Q-Row, Z-Row) | Key | Action | |-----|--------| | `>>` | Indent line right | | `<<` | Indent line left | | `==` | Autoindent line | | `>[motion]` | Indent selection | | `<[motion]` | Unindent selection | | `=[motion]` | Autoindent selection | | `Tab` | Insert tab (in insert mode) | | `Shift+Tab` | Delete tab (in insert mode) | ## Folding (Z-Row) | Key | Action | |-----|--------| | `zf[motion]` | Create fold | | `zo` | Open fold | | `zc` | Close fold | | `za` | Toggle fold | | `zR` | Open all folds | | `zM` | Close all folds | ## Command Mode (Colon) | Command | Action | |---------|--------| | `:w` | Save file | | `:q` | Quit | | `:wq` | Save and quit | | `:q!` | Quit without saving | | `:e [file]` | Open file | | `:bn` | Next buffer | | `:bp` | Previous buffer | | `:bd` | Delete buffer | | `:vs [file]` | Open file in vertical split | | `:sp [file]` | Open file in horizontal split | | `:set number` | Show line numbers | | `:set relativenumber` | Show relative line numbers | | `:set spell` | Enable spell checking | | `:help [topic]` | Open help | ## Window Navigation (Ctrl+W) | Key | Action | |-----|--------| | `Ctrl+w h` | Move to left window | | `Ctrl+w j` | Move to bottom window | | `Ctrl+w k` | Move to top window | | `Ctrl+w l` | Move to right window | | `Ctrl+w w` | Cycle through windows | | `Ctrl+w =` | Equal size windows | | `Ctrl+w _` | Max height current window | | `Ctrl+w \|` | Max width current window | | `Ctrl+w c` | Close window | | `Ctrl+w o` | Close all other windows | ## Brackets and Matching | Key | Action | |-----|--------| | `%` | Jump to matching bracket/paren | | `[{` | Jump to previous opening brace | | `]}` | Jump to next closing brace | | `[(` | Jump to previous opening paren | | `])` | Jump to next closing paren | ## Special (Miscellaneous) | Key | Action | |-----|--------| | `r[char]` | Replace character under cursor | | `R` | Replace mode (overwrite) | | `q[a-z]` | Start recording macro | | `@[a-z]` | Play macro | | `@@` | Replay last macro | | `&` | Repeat last :substitute | | `gv` | Reselect last selection | | `;` | Repeat last f/t/F/T search | | `,` | Repeat last f/t/F/T search in opposite direction | | `f[char]` | Find char on line (forward) | | `F[char]` | Find char on line (backward) | | `t[char]` | Till char on line (forward) | | `T[char]` | Till char on line (backward) | ## QWERTY Layout with Commands ``` Esc 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) -_ =+ Bksp Tab q w e r t y u i o p [{ ]} \| a s d f g h j k l ;: '" z x c v b n m ,< .> /? ``` **Most used keys:** - **Left side (QWERT/ASDFG/ZXCVB):** Motion, search, operators - **Right side (YUIOP/HJKL/NM):** Movement, selection, copy/paste - **Modifiers:** Ctrl, Shift, Alt for extended commands ## Common Command Chains ### Edit a word ``` cw[new word]Esc " Change word ``` ### Delete 3 lines ``` 3dd " Delete 3 lines ``` ### Copy and paste ``` yy " Copy line p " Paste below ``` ### Find and replace ``` /pattern " Find :%s/old/new/g " Replace all ``` ### Undo and redo ``` u " Undo Ctrl+r " Redo ``` ## Learning Strategy **Start with these 10 keys:** 1. `hjkl` - Movement 2. `w/b` - Word movement 3. `dd` - Delete line 4. `yy` - Copy line 5. `p` - Paste 6. `i` - Insert mode 7. `Esc` - Normal mode 8. `u` - Undo 9. `/` - Search 10. `:wq` - Save and quit **Then add:** - `cw` - Change word - `v` - Visual select - `dw` - Delete word - `o` - Insert line **Master these, then explore others as needed.** ## LazyVim Specific Additions LazyVim adds custom keybindings (Space = leader): | Key | Action | |-----|--------| | `Space` | Open Which Key menu | | `Space ff` | Find files | | `Space fg` | Find by grep | | `Space e` | Toggle file explorer | | `gd` | Go to definition | | `K` | Hover documentation | | `Space ca` | Code actions | | `Space /` | Toggle terminal | | `Ctrl+h/j/k/l` | Navigate windows | See [[Installing LazyVim]] for full LazyVim keybindings. ## Practice Tips 1. **Use relative numbers** (`set relativenumber`) to practice counting motions 2. **Disable arrow keys** to force hjkl usage 3. **Learn combos:** Most power comes from combining operators + motions 4. **Type slowly:** Speed comes naturally; focus on accuracy first 5. **Use `.` repeat** to practice the same edit multiple times 6. **Create marks** for positions you jump to frequently ## Links ### Vim Cheat Sheet - **URL:** https://vim.rtorr.com/ - **Summary:** Interactive Vim cheat sheet with searchable commands and descriptions. - **Related:** [[Installing LazyVim]] ### OpenVim - Interactive Vim Tutorial - **URL:** https://www.openvim.com/ - **Summary:** Interactive lessons teaching Vim navigation and editing through hands-on exercises. - **Related:** [[Installing LazyVim]] ### Vim Adventure Game - **URL:** https://vim-adventures.com/ - **Summary:** Game-based learning for Vim keybindings and movement commands. - **Related:** [[Installing LazyVim]]