Vim is a very efficient text editor that I . This blog Cheatsheet covers Vim 8x shotcuts, but the latest can be found at devhints.io -- where I found this originally. Also see the bottom for more handy Vim links.
And after using this Cheatsheet you don't have to be the butt of any "Exit Vim" jokes, ever again:
Note: For shortcut notation, see :help key-notation
.
Getting started
Exiting
Shortcut | Description |
---|
:q | Close file |
:qa | Close all files |
--- | --- |
:w | Save |
:wq / :x | Save and close file |
--- | --- |
ZZ | Save and quit |
ZQ | Quit without checking changes |
Navigating
Shortcut | Description |
---|
h j k l | Arrow keys |
<C-U> / <C-D> | Half-page up/down |
<C-B> / <C-F> | Page up/down |
Words
Shortcut | Description |
---|
b / w | Previous/next word |
ge / e | Previous/next end of word |
Line
Shortcut | Description |
---|
0 (zero) | Start of line |
^ | Start of line (after whitespace) |
$ | End of line |
Character
| fc
| Go forward to character c
|
| Fc
| Go backward to character c
|
Document
Shortcut | Description |
---|
gg | First line |
G | Last line |
:{number} | Go to line {number} |
{number}G | Go to line {number} |
{number}j | Go down {number} lines |
{number}k | Go up {number} lines |
Window
Shortcut | Description |
---|
zz | Center this line |
zt | Top this line |
zb | Bottom this line |
H | Move to top of screen |
M | Move to middle of screen |
L | Move to bottom of screen |
Search
Shortcut | Description |
---|
n | Next matching search pattern |
N | Previous match |
* | Next whole word under cursor |
# | Previous whole word under cursor |
Tab pages
Shortcut | Description |
---|
:tabedit [file] | Edit file in a new tab |
:tabfind [file] | Open file if exists in new tab |
:tabclose | Close current tab |
:tabs | List all tabs |
:tabfirst | Go to first tab |
:tablast | Go to last tab |
:tabn | Go to next tab |
:tabp | Go to previous tab |
Editing
Shortcut | Description |
---|
a | Append |
A | Append from end of line |
i | Insert |
o | Next line |
O | Previous line |
--- | --- |
s | Delete char and insert |
S | Delete line and insert |
C | Delete until end of line and insert |
--- | --- |
r | Replace one character |
R | Enter Replace mode |
--- | --- |
u | Undo changes |
<C-R> | Redo changes |
Exiting insert mode
Shortcut | Description |
---|
Esc / <C-[> | Exit insert mode |
<C-C> | Exit insert mode, and abort current command |
Clipboard
Shortcut | Description |
---|
x | Delete character |
--- | --- |
dd | Delete line (Cut) |
yy | Yank line (Copy) |
--- | --- |
p | Paste |
P | Paste before |
--- | --- |
"*p / "+p | Paste from system clipboard |
"*y / "+y | Paste to system clipboard |
Visual mode
Shortcut | Description |
---|
v | Enter visual mode |
V | Enter visual line mode |
<C-V> | Enter visual block mode |
In visual mode
Shortcut | Description |
---|
d / x | Delete selection |
s | Replace selection |
y | Yank selection (Copy) |
See Operators for other things you can do.
Find & Replace
Shortcut | Description |
---|
:%s/foo/bar/g | Replace foo with bar in whole document |
Operators
Usage
Operators let you operate in a range of text (defined by motion). These are performed in normal mode.
| d
| w
|
| Operator | Motion |
Operators list
Shortcut | Description |
---|
d | Delete |
y | Yank (copy) |
c | Change (delete then insert) |
--- | --- |
> | Indent right |
< | Indent left |
= | Autoindent |
--- | --- |
g~ | Swap case |
gU | Uppercase |
gu | Lowercase |
--- | --- |
! | Filter through external program |
See :help operator
Examples
Combine operators with motions to use them.
Shortcut | Description |
---|
d d | (repeat the letter) Delete current line |
d w | Delete to next word |
d b | Delete to beginning of word |
2dd | Delete 2 lines |
d ip | Delete a text object (inside paragraph) |
(in visual mode) d | Delete selection |
See: :help motion.txt
Text objects
Usage
Text objects let you operate (with an operator) in or around text blocks (objects).
| v
| i
| p
|
| Operator | [i]nside or [a]round | Text object |
Text objects
Shortcut | Description |
---|
p | Paragraph |
w | Word |
s | Sentence |
--- | --- |
[ ( { < | A [], (), or {} block |
' " ` | A quoted string |
--- | --- |
b | A block [( |
B | A block in [{ |
t | A XML tag block |
Examples
Shortcut | Description |
---|
vip | Select paragraph |
vipipipip | Select more |
--- | --- |
yip | Yank inner paragraph |
yap | Yank paragraph (including newline) |
--- | --- |
dip | Delete inner paragraph |
cip | Change inner paragraph |
See Operators for other things you can do.
Diff
Shortcut | Description |
---|
gvimdiff file1 file2 [file3] | See differences between files, in HMI |
Misc
Folds
Shortcut | Description |
---|
zo / zO | Open |
zc / zC | Close |
za / zA | Toggle |
--- | --- |
zv | Open folds for this line |
--- | --- |
zM | Close all |
zR | Open all |
--- | --- |
zm | Fold more (foldlevel += 1) |
zr | Fold less (foldlevel -= 1) |
--- | --- |
zx | Update folds |
Uppercase ones are recursive (eg, zO
is open recursively).
Navigation
Shortcut | Description |
---|
% | Nearest/matching {[()]} |
[( [{ [< | Previous ( or { or < |
]) | Next |
--- | --- |
[m | Previous method start |
[M | Previous method end |
Jumping
Shortcut | Description |
---|
<C-O> | Go back to previous location |
<C-I> | Go forward |
--- | --- |
gf | Go to file in cursor |
Counters
Shortcut | Description |
---|
<C-A> | Increment number |
<C-X> | Decrement |
Windows
| z{height}<Cr>
| Resize pane to {height}
lines tall |
Shortcut | Description |
---|
:tag Classname | Jump to first definition of Classname |
--- | --- |
<C-]> | Jump to definition |
g] | See all definitions |
<C-T> | Go back to last tag |
<C-O> <C-I> | Back/forward |
--- | --- |
:tselect Classname | Find definitions of Classname |
:tjump Classname | Find definitions of Classname (auto-select 1st) |
Case
Shortcut | Description |
---|
~ | Toggle case (Case => cASE) |
gU | Uppercase |
gu | Lowercase |
--- | --- |
gUU | Uppercase current line (also gUgU ) |
guu | Lowercase current line (also gugu ) |
Do these in visual or normal mode.
Marks
Shortcut | Description |
---|
`^ | Last position of cursor in insert mode |
`. | Last change in current buffer |
`" | Last exited current buffer |
`0 | In last file edited |
'' | Back to line in current buffer where jumped from |
`` | Back to position in current buffer where jumped from |
`[ | To beginning of previously changed or yanked text |
`] | To end of previously changed or yanked text |
`< | To beginning of last visual selection |
`> | To end of last visual selection |
--- | --- |
ma | Mark this cursor position as a |
`a | Jump to the cursor position a |
'a | Jump to the beginning of the line with position a |
d'a | Delete from current line to line of mark a |
d`a | Delete from current position to position of mark a |
c'a | Change text from current line to line of a |
y`a | Yank text from current position to position of a |
--- | --- |
:marks | List all current marks |
:delm a | Delete mark a |
:delm a-d | Delete marks a , b , c , d |
:delm abc | Delete marks a , b , c |
Misc
Shortcut | Description |
---|
. | Repeat last command |
]p | Paste under the current indentation level |
--- | --- |
:set ff=unix | Convert Windows line endings to Unix line endings |
Command line
Shortcut | Description |
---|
<C-R><C-W> | Insert current word into the command line |
<C-R>" | Paste from " register |
<C-X><C-F> | Auto-completion of path in insert mode |
Text alignment
:center [width]
:right [width]
:left
See :help formatting
Calculator
Shortcut | Description |
---|
<C-R>=128/2 | Shows the result of the division : '64' |
Do this in insert mode.
Exiting with an error
:cq
:cquit
Works like :qa
, but throws an error. Great for aborting Git commands.
Spell checking
Shortcut | Description |
---|
:set spell spelllang=en_us | Turn on US English spell checking |
]s | Move to next misspelled word after the cursor |
[s | Move to previous misspelled word before the cursor |
z= | Suggest spellings for the word under/after the cursor |
zg | Add word to spell list |
zw | Mark word as bad/mispelling |
zu / C-X (Insert Mode) | Suggest words for bad word under cursor from spellfile |
See :help spell
Also see