Complete nvim command reference — searchable, fast, always free
🔍
/ to search
Click any command for a description & example
N Normal
I Insert
V Visual
C Command
Reset all custom bindings?
This will restore every command to its default keybinding. This cannot be undone.
| i | Insert before cursor |
| I | Insert at line start |
| a | Insert after cursor |
| A | Insert at line end |
| o | New line below, insert |
| O | New line above, insert |
| v | Visual (character) |
| V | Visual (line) |
| Ctrl+v | Visual (block) |
| : | Command mode |
| Esc / Ctrl+[ | Return to Normal |
| R | Replace mode |
| h j k l | ← ↓ ↑ → |
| w / W | Next word / WORD |
| b / B | Prev word / WORD |
| e / E | End of word / WORD |
| 0 / ^ | Line start / first non-blank |
| $ | Line end |
| gg / G | File start / file end |
| :N | Go to line N |
| % | Jump to matching bracket |
| { / } | Prev / next blank line (paragraph) |
| Ctrl+d / Ctrl+u | Half-page down / up |
| Ctrl+f / Ctrl+b | Full-page down / up |
| x | Delete character |
| dd | Delete line |
| dw | Delete word |
| d$ / D | Delete to end of line |
| yy | Yank (copy) line |
| Y | Yank to end of line (= y$) |
| yw | Yank word |
| p / P | Paste after / before cursor |
| u | Undo |
| Ctrl+r | Redo |
| cc / C | Change line / to end of line |
| cw | Change word |
| r{char} | Replace single character |
| ~ | Toggle case |
| J | Join line below to current |
| . | Repeat last change |
| iw / aw | Inner / around word |
| is / as | Inner / around sentence |
| ip / ap | Inner / around paragraph |
| i" / a" | Inner / around double quotes |
| i' / a' | Inner / around single quotes |
| i` / a` | Inner / around backticks |
| i( / a( | Inner / around parens |
| i[ / a[ | Inner / around brackets |
| i{ / a{ | Inner / around braces |
| it / at | Inner / around HTML tag |
| /pattern | Search forward |
| ?pattern | Search backward |
| n / N | Next / prev match |
| * | Search word under cursor (fwd) |
| # | Search word under cursor (bwd) |
| :s/old/new/ | Replace first on line |
| :s/old/new/g | Replace all on line |
| :%s/old/new/g | Replace all in file |
| :%s/old/new/gc | Replace with confirmation |
| :noh | Clear search highlight |
| :sp / :vsp | Horizontal / vertical split |
| Ctrl+w s | Horizontal split |
| Ctrl+w v | Vertical split |
| Ctrl+w h/j/k/l | Move between splits |
| Ctrl+w H/J/K/L | Move split to edge |
| Ctrl+w = | Equalize split sizes |
| Ctrl+w _ / | | Max height / max width |
| Ctrl+w +/- | Increase / decrease height |
| Ctrl+w q | Close split |
| Ctrl+w o | Close all other splits |
| :tabnew | Open new tab |
| :tabnew {file} | Open file in new tab |
| gt / gT | Next / prev tab |
| :tabn / :tabp | Next / prev tab |
| :tabclose | Close current tab |
| :tabonly | Close all other tabs |
| {N}gt | Go to tab N |
| :e {file} | Edit file |
| :w | Save |
| :w {file} | Save as |
| :w ++p | Save, creating parent dirs if needed |
| :wq / :x | Save and quit |
| :q | Quit |
| :q! | Quit without saving |
| :wqa | Save all and quit |
| :ls / :buffers | List buffers |
| :bn / :bp | Next / prev buffer |
| :bd | Delete (close) buffer |
| :b {N} | Switch to buffer N |
| Ctrl+^ | Toggle last two buffers |
| m{a-z} | Set local mark |
| m{A-Z} | Set global mark |
| '{mark} | Jump to mark line |
| `{mark} | Jump to exact mark position |
| '' | Jump to last position |
| Ctrl+o / Ctrl+i | Jump back / forward in history |
| :marks | List all marks |
| q{a-z} | Start recording macro into register |
| q | Stop recording |
| @{a-z} | Play macro |
| @@ | Repeat last macro |
| {N}@{a-z} | Play macro N times |
| :reg | View all registers / macros |
| v + motion | Select characters |
| V + motion | Select lines |
| Ctrl+v + motion | Block select |
| d / x | Delete selection |
| y | Yank selection |
| c | Change selection |
| > / < | Indent / un-indent |
| u / U | Lowercase / uppercase |
| : | Run command on selection |
| gv | Reselect last selection |
| zc / zo | Close / open fold |
| za | Toggle fold |
| zC / zO | Close / open all folds at cursor |
| zM / zR | Close all / open all folds in file |
| zf{motion} | Create fold |
| zd | Delete fold at cursor |
| zj / zk | Move to next / prev fold |
| :checkhealth | Run health diagnostics |
| :terminal | Open built-in terminal |
| Ctrl+\ Ctrl+n | Exit terminal to Normal mode |
| :Lazy | Open Lazy.nvim plugin manager |
| :Mason | Open Mason LSP installer |
| K | LSP hover docs |
| gd | Go to definition (LSP) |
| grr | Find references (LSP) |
| gri | Go to implementation (LSP) |
| grn | Rename symbol (LSP) |
| gra | Code action (LSP) |
| gO | Document symbols (LSP) |
| Ctrl+S (Insert) | Signature help (LSP) |
| ]d / [d | Next / prev diagnostic |
| :set number | Show line numbers |
| :set relativenumber | Relative line numbers |
| :set wrap / nowrap | Toggle line wrap |
| :set ignorecase | Case-insensitive search |
| :set spell | Enable spell check |
| :sort | Sort selected lines |
| :!{cmd} | Run shell command |
| :r !{cmd} | Insert shell output at cursor |
| :verbose map {key} | Show where a key is mapped |
| Ctrl+g | Show file info + cursor position |
| ga | Show ASCII/Unicode of character |
✎ Custom bindings: