■ Modes
Neovim is modal — each mode handles keypresses differently.
NORMAL
The default mode. Used for navigation and editing commands. Press Esc from any mode to return here.
| Esc | Return to Normal mode |
| Ctrl+[ | Also returns to Normal mode |
INSERT
Text input mode. Keys you press are inserted literally.
| i | Insert before cursor |
| a | Append after cursor |
| I | Insert at start of line |
| A | Append at end of line |
| o | New line below, insert |
| O | New line above, insert |
| s | Delete char, insert |
VISUAL
Select text to operate on.
| v | Character-wise visual |
| V | Line-wise visual |
| Ctrl+v | Block visual (column) |
| gv | Reselect last visual |
COMMAND
Run Ex commands via the command line.
| : | Open command line |
| / | Search forward |
| ? | Search backward |
| ! | Filter through shell cmd |
■ Basic Movement
In Normal mode, move without the arrow keys.
▲ Character Motions
| h | Move left |
| j | Move down |
| k | Move up |
| l | Move right |
Tip: Combine with a count: 5j moves down 5 lines.
▶ Word Motions
| w | Next word start |
| W | Next WORD start (whitespace-delimited) |
| b | Previous word start |
| B | Previous WORD start |
| e | Current/next word end |
| E | Current/next WORD end |
| ge | Previous word end |
▮ Line Motions
| 0 | Start of line |
| ^ | First non-blank character |
| $ | End of line |
| g_ | Last non-blank character |
| f{c} | Jump to char c on line |
| F{c} | Jump back to char c |
| t{c} | Jump before char c |
| ; / , | Repeat f/t forward/back |
⸻ File / Screen Motions
| gg | Top of file |
| G | Bottom of file |
| {n}G | Go to line n |
| % | Jump to matching bracket |
| H | Top of screen |
| M | Middle of screen |
| L | Bottom of screen |
| Ctrl+d | Scroll down half page |
| Ctrl+u | Scroll up half page |
| Ctrl+f | Scroll full page down |
| Ctrl+b | Scroll full page up |
■ Editing in Normal Mode
Operators act on motions — the real power of Vim.
✎ Operators
Operators combine with motions: d+w = delete word.
| d | Delete (cut) |
| y | Yank (copy) |
| c | Change (delete + insert) |
| > | Indent right |
| < | Indent left |
| = | Auto-indent |
| g~ | Toggle case |
| gu | Lowercase |
| gU | Uppercase |
⊗ Common Combos
| dd | Delete line |
| yy | Yank line |
| cc | Change line |
| dw | Delete word |
| d$ | Delete to end of line |
| ciw | Change inner word |
| ci" | Change inside quotes |
| da( | Delete around parens |
| yip | Yank inner paragraph |
↵ Undo & Paste
| u | Undo |
| Ctrl+r | Redo |
| p | Paste after cursor/line |
| P | Paste before cursor/line |
| "0p | Paste from yank register |
| x | Delete character (cut) |
| r{c} | Replace char with c |
| R | Replace mode (overtype) |
| . | Repeat last change |
🔍 Search
| /pattern | Search forward |
| ?pattern | Search backward |
| n | Next match |
| N | Previous match |
| * | Search word under cursor (fwd) |
| # | Search word under cursor (bwd) |
| :noh | Clear search highlight |
■ Essential Commands
Run with : in Normal mode.
💾 File Commands
| :w | Write (save) |
| :w filename | Save as filename |
| :q | Quit |
| :q! | Quit without saving |
| :wq | Save and quit |
| :x | Save and quit (if changed) |
| :e filename | Open file |
| :e! | Reload file (discard changes) |
🔄 Substitution
| :s/old/new | Replace first 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 with confirmation |
| :'<,'>s/o/n/g | Replace in visual selection |
Pro tip: Use :help {topic} to access Neovim's comprehensive built-in documentation. For example, :help motion.txt or :help operator.