| , | Repeats the previous f, t, F, or T cursor movement command in the opposite direction. |
| ; | Repeats the previous f, t, F, or T cursor movement command in the same direction. |
| :%s/old/new/g | Replaces all occurrences of 'old' with 'new' throughout the entire file. |
| :%s/old/new/gc | Replaces all occurrences of 'old' with 'new' throughout the entire file, prompting for confirmation before each replacement. |
| :3,5d | Deletes lines 3 through 5. |
| :b[uffer] file | Switches to the buffer associated with the specified file name. |
| :b[uffer]# | Switches to the buffer identified by its index number. |
| :bd[elete] | Deletes a specified buffer, which effectively closes the associated file. |
| :bn[ext] | Switches to the next buffer. |
| :bp[revious] | Switches to the previous buffer. |
| :ccl[ose] | Closes the quickfix window, which contains the list of search results. |
| :changes | Displays a list of all recent changes made in the buffer. |
| :clo[se] | Closes the current pane in Vim. |
| :cn[ext] | Jumps to the next match from a previous search. |
| :cope[n] | Opens a window that displays a list of matches from the previous search. |
| :cp[revious] | Jumps to the previous match from a previous search. |
| :dif[fupdate] | Updates the displayed differences between buffers in diff mode. |
| :diffo[ff] | Disables diff mode for the current window. |
| :diffthis | Marks the current window as part of the diff comparison. |
| :e[dit] file | Opens a specified file for editing in a new buffer. |
| :h[elp] keyword | Opens the help page for the specified keyword in Vim. |
| :ju[mps] | Displays a list of all recent jumps. |
| :ls or :buffers | Displays a list of all currently open buffers. |
| :marks | Displays a list of all saved marks. |
| :noh[lsearch] | Removes the highlighting of search matches. |
| :q | Exits Vim. Fails if there are unsaved changes. |
| :q! or ZQ | Exits Vim and discards any unsaved changes. |
| :reg[isters] | Displays the contents of all registers. |
| :sav[eas] file | Saves the current file with the specified file name. |
| :sp[lit] file | Opens a specified file in a new buffer and splits the window horizontally to display it. |
| :tab ba[ll] | Opens all open buffers in separate tabs. |
| :tabc[lose] | Closes the current tab and all its associated windows. |
| :tabdo command | Runs the specified command on all open tabs. |
| :tabm[ove] # | Moves the current tab to the position specified by the number # (indexed from 0). |
| :tabnew or :tabnew {page.words.file} | Opens a new tab, optionally with a specified file. |
| :tabo[nly] | Closes all tabs except the currently active tab. |
| :ter[minal] | Opens a terminal window within Vim. |
| :vert[ical] ba[ll] | Arranges all open buffers as vertical windows. |
| :vim[grep] /pattern/ {`{file}`} | Searches for a given pattern in multiple files. |
| :vs[plit] file | Opens a specified file in a new buffer and splits the window vertically to display it. |
| :w | Saves the current file without exiting Vim. |
| :w !sudo tee % | Saves the current file using sudo (superuser privileges). This is useful when you don't have write permissions to the file. |
| :wq or :x or ZZ | Saves the current file and exits Vim. |
| :wqa | Saves all open files and exits Vim. |
| ?pattern | Searches backward for the specified pattern. |
| . | Repeats the last executed command. |
| '" | Moves the cursor to the position when you last edited this file. |
| "+p | Pastes the contents of the system clipboard. |
| "+y | Copies (yanks) the selected text into the system clipboard. |
| "xp | Pastes the contents of the specified register x. |
| "xy | Copies (yanks) the selected text into the specified register x. |
| [c | Jumps to the start of the previous change in the document. |
| ]c | Jumps to the start of the next change in the document. |
| ]p | Pastes the contents of the default register (") and adjusts the indentation to match the current line. |
| { | Moves the cursor to the beginning of the previous paragraph. When editing code, it moves to the previous function or block. |
| } | Moves the cursor to the beginning of the next paragraph. When editing code, it moves to the next function or block. |
| @@ | Repeats the last executed macro. |
| @a | Executes the macro stored in register 'a'. |
| /pattern | Searches forward for the specified pattern. |
| \vpattern | Searches for the specified pattern using 'very magic' mode, where non-alphanumeric characters are interpreted as special regex symbols without escaping. |
| #gt | Moves to the tab specified by the number #. |
| % | Moves the cursor to the matching character of a pair, such as parentheses, brackets, or braces. Use :h matchpairs in Vim for more information on supported pairs. |
| `.` | Moves the cursor to the position of the last change in this file. |
| `` | Moves the cursor to the position before the last jump. |
| `0 | Moves the cursor to the position where Vim was last exited. |
| `a | Moves the cursor to the position marked as A. |
| ^ | Moves the cursor to the first non-blank character on the current line. |
| < | In visual mode, shifts the selected text one indentation level to the left. |
| <% | De-indents a block enclosed by parentheses () or curly brackets {}, with the cursor positioned on the opening or closing brace. |
| << | De-indents the current line one shiftwidth to the left. |
| =% | Re-indents a block enclosed by parentheses () or curly brackets {}, with the cursor positioned on the opening or closing brace. |
| =iB | Re-indents the inner block enclosed by curly brackets {}. |
| > | In visual mode, shifts the selected text one indentation level to the right. |
| >% | Indents a block enclosed by parentheses () or curly brackets {}, with the cursor positioned on the opening or closing brace. |
| >> | Indents the current line one shiftwidth to the right. |
| >at | Indents a block enclosed by angle brackets <> (tags). |
| >ib | Indents the inner block enclosed by parentheses (). |
| ~ | In visual mode, switches the case (uppercase/lowercase) of the selected text. |
| $ | Moves the cursor to the end of the current line. |
| 0 | Moves the cursor to the very beginning of the current line. |
| 2dd | Deletes the current line and the next line and places them in the default register ("). |
| 2yy | Copies the current line and the next line into the default register ("). |
| 3== | Re-indents the current line and the two lines below it. |
| 5gg or 5G | Moves the cursor to line number 5 in the document. |
| a | Enters insert mode and starts inserting text after the cursor position. |
| A | Enters insert mode and starts inserting text at the end of the current line. |
| ab | In visual mode, selects a block of text enclosed by parentheses (). |
| aB | In visual mode, selects a block of text enclosed by curly braces {}. |
| at | In visual mode, selects a block of text enclosed by angle brackets <> (often used for tags). |
| aw | In visual mode, selects the current word. |
| b | Moves the cursor backward to the beginning of the previous word. |
| B | Moves the cursor backward to the beginning of the previous word, considering punctuation as part of the word. |
| c$ or C | Replaces text from the cursor position to the end of the current line. |
| cc | Replaces the content of the entire current line. |
| ciw | Replaces the entire word under the cursor. |
| Ctrl + ] | Jumps to the definition of the tag under the cursor. |
| Ctrl + b | Scrolls the screen up one page and moves the cursor to the last line of the new page. |
| Ctrl + d | Scrolls the screen down half a page and moves the cursor accordingly. |
| Ctrl + d | De-indents the current line one shiftwidth to the left while in insert mode. |
| Ctrl + e | Scrolls the screen down one line without moving the cursor. |
| Ctrl + f | Scrolls the screen down one page and moves the cursor to the first line of the new page. |
| Ctrl + h | Deletes the character before the cursor while in insert mode. |
| Ctrl + i | Moves the cursor to the next newer position in the jump list. |
| Ctrl + j | Inserts a line break at the current cursor position while in insert mode. |
| Ctrl + n | Inserts the next matching completion before the cursor while in insert mode. |
| Ctrl + o | Moves the cursor to the next older position in the jump list. |
| Ctrl + ox | Temporarily switches to normal mode from insert mode to execute a single normal mode command 'x'. After executing the command, it returns to insert mode. |
| Ctrl + p | Inserts the previous matching completion before the cursor while in insert mode. |
| Ctrl + r | Redoes a previously undone change. |
| Ctrl + rx | Inserts the contents of register 'x' at the cursor position. |
| Ctrl + t | Indents the current line one shiftwidth to the right while in insert mode. |
| Ctrl + u | Scrolls the screen up half a page and moves the cursor accordingly. |
| Ctrl + v | Starts visual block mode, allowing you to select a rectangular block of text. |
| Ctrl + w | Deletes the word before the cursor while in insert mode. |
| Ctrl + w= | Resizes all windows in the current split arrangement to have equal height and width. |
| Ctrl + wh | Moves the cursor to the window located to the left in a vertical split arrangement. |
| Ctrl + wH | Makes the current window occupy the full height of the screen and positions it as the leftmost window in a vertical split arrangement. |
| Ctrl + wj | Moves the cursor to the window located below in a horizontal split arrangement. |
| Ctrl + wJ | Makes the current window occupy the full width of the screen and positions it as the bottommost window in a horizontal split arrangement. |
| Ctrl + wk | Moves the cursor to the window located above in a horizontal split arrangement. |
| Ctrl + wK | Makes the current window occupy the full width of the screen and positions it as the topmost window in a horizontal split arrangement. |
| Ctrl + wl | Moves the cursor to the window located to the right in a vertical split arrangement. |
| Ctrl + wL | Makes the current window occupy the full height of the screen and positions it as the rightmost window in a vertical split arrangement. |
| Ctrl + wq | Closes the currently active window within a split arrangement. |
| Ctrl + ws | Splits the current window horizontally, creating a new split. |
| Ctrl + wT | Moves the currently active split window into its own new tab. |
| Ctrl + wv | Splits the current window vertically, creating a new split. |
| Ctrl + ww | Switches the focus to the next window within the current split arrangement. |
| Ctrl + wx | Exchanges the position of the current window with the next one in the split arrangement. |
| Ctrl + y | Scrolls the screen up one line without moving the cursor. |
| cw or ce | Replaces text from the cursor position to the end of the current word. |
| d | In visual mode, deletes the selected text. |
| d$ or D | Deletes the characters from the cursor position to the end of the line and places them in the default register ("). |
| daw | Deletes the word under the cursor and the space after or before it and places it in the default register ("). |
| dd | Deletes the current line and places it in the default register ("). |
| diw | Deletes the word under the cursor and places it in the default register ("). |
| do or :diffg[et] | Obtains (gets) the difference from another buffer and applies it to the current buffer. |
| dp or :diffpu[t] | Puts (applies) the difference from the current buffer to another buffer. |
| dw | Deletes the characters of the word from the cursor position to the start of the next word and places them in the default register ("). |
| e | Moves the cursor forward to the end of the current word. |
| E | Moves the cursor forward to the end of the current word, considering punctuation as part of the word. |
| ea | Moves the cursor to the end of the current word and enters insert mode. |
| Esc or Ctrl + c | Exits insert mode and returns to normal mode. |
| Esc or Ctrl + c | Exits visual mode. |
| fx | Moves the cursor to the next occurrence of character 'x' on the current line. |
| Fx | Moves the cursor to the previous occurrence of character 'x' on the current line. |
| G | Moves the cursor to the last line of the document. |
| g_ | Moves the cursor to the last non-blank character on the current line. |
| g, | Moves the cursor to the next newer position in the change list. |
| g; | Moves the cursor to the next older position in the change list. |
| g~ | Switches the case of characters (uppercase to lowercase or vice versa) from the cursor position to the end of the specified motion. |
| gd | Moves the cursor to the local declaration of the variable under the cursor (useful for code editing). |
| gD | Moves the cursor to the global declaration of the variable under the cursor (useful for code editing). |
| ge | Moves the cursor backward to the end of the previous word. |
| gE | Moves the cursor backward to the end of the previous word, considering punctuation as part of the word. |
| gg | Moves the cursor to the first line of the document. |
| gg=G | Re-indents the entire buffer (all lines in the current file). |
| gj | Moves the cursor down one line, considering wrapped lines as a single line. |
| gJ | Joins the line below the current line to the end of the current line without adding any space. |
| gk | Moves the cursor up one line, considering wrapped lines as a single line. |
| gp | Pastes the contents of the default register (") after the cursor and leaves the cursor after the new text. |
| gP | Pastes the contents of the default register (") before the cursor and leaves the cursor after the new text. |
| gt or :tabn[ext] | Navigates to the next tab. |
| gT or :tabp[revious] | Navigates to the previous tab. |
| gu | Changes the characters from the cursor position to the end of the specified motion to lowercase. |
| gU | Changes text to uppercase up to the specified motion. |
| gwip | Reflows the current paragraph, adjusting line breaks to fit within the current window width. |
| h | Moves the cursor one character to the left. |
| H | Moves the cursor to the top of the screen. |
| i | Enters insert mode and starts inserting text before the cursor position. |
| I | Enters insert mode and starts inserting text at the beginning of the current line. |
| ib | In visual mode, selects the text within the nearest enclosing parentheses (). |
| iB | In visual mode, selects the text within the nearest enclosing curly braces {}. |
| it | In visual mode, selects the text within the nearest enclosing angle brackets <> (often used for tags). |
| j | Moves the cursor one line down. |
| J | Joins the line below the current line to the end of the current line, adding a single space in between. |
| k | Moves the cursor one line up. |
| K | Opens the man page for the word currently under the cursor. |
| l | Moves the cursor one character to the right. |
| L | Moves the cursor to the bottom of the screen. |
| M | Moves the cursor to the middle of the screen. |
| ma | Sets the current cursor position as mark A. You can use any letter for the mark name. |
| n | Repeats the last search in the same direction (forward). |
| N | Repeats the last search in the opposite direction (backward). |
| o | Opens a new line below the current line and enters insert mode. |
| o | While in visual mode, this command moves the cursor to the opposite end of the currently selected area. |
| O | Opens a new line above the current line and enters insert mode. |
| O | While in visual block mode, this command moves the cursor to the opposite corner of the selected block. |
| p | Pastes the contents of the default register (") after the cursor. |
| P | Pastes the contents of the default register (") before the cursor. |
| q | Stops recording the current macro. |
| qa | Starts recording a macro and saves it in register 'a'. |
| r | Replaces the character under the cursor with the next character typed. |
| R | Enters replace mode, allowing you to replace multiple characters until the ESC key is pressed. |
| s | Deletes the character under the cursor and enters insert mode to allow substitution of text (same as cl). |
| S | Deletes the entire line and enters insert mode to allow substitution of text (same as cc). |
| tx | Moves the cursor to the position before the next occurrence of character 'x' on the current line. |
| Tx | Moves the cursor to the position after the previous occurrence of character 'x' on the current line. |
| u | Reverses the last editing action. |
| u | In visual mode, changes the selected text to lowercase. |
| U | Restores the last changed line to its state before any modifications were made. |
| U | In visual mode, changes the selected text to uppercase. |
| v | Starts visual mode, allowing you to select text by moving the cursor. Once text is selected, you can perform various commands on it (like yanking/copying). |
| V | Starts linewise visual mode, which allows you to select entire lines by moving the cursor. |
| w | Moves the cursor forward to the beginning of the next word. |
| W | Moves the cursor forward to the beginning of the next word, considering punctuation as part of the word. |
| x | Deletes the character under the cursor and places it in the default register ("). |
| xp | Transposes the character under the cursor with the character to its right (effectively deleting and pasting). |
| y | In visual mode, copies (yanks) the selected text into the clipboard. |
| y`a | Copies (yanks) the selected text and places it at the position marked as A. |
| y$ or Y | Copies the characters from the cursor position to the end of the line into the default register ("). |
| yaw | Copies the word under the cursor and the space after or before it into the default register ("). |
| yiw | Copies the word under the cursor into the default register ("). |
| yw | Copies the characters of the word from the cursor position to the start of the next word into the default register ("). |
| yy | Copies the current line into the default register ("). |
| za | Toggles the open/closed state of the code fold located under the cursor. |
| zb | Positions the cursor at the bottom of the screen. |
| zc | Closes (collapses) the code fold located under the cursor. |
| zd | Deletes the code fold located under the cursor. |
| zf | Manually defines a code fold from the current cursor position up to the specified motion. |
| zi | Toggles the folding functionality on or off. |
| zm | Increases the folding level by one, effectively closing folds at the current level. |
| zo | Opens (expands) the code fold located under the cursor. |
| zr | Reduces the folding level by one, effectively opening folds at the outermost level. |
| zt | Positions the cursor at the top of the screen. |
| zz | Centers the cursor vertically on the screen. |