vim cheatsheet
[Vim](http://www.vim.org/) is a very efficient text editor. This quick reference cheat sheet was made for Vim 8.0.
#Getting started
#Visualization
▼/▶ Cursor ▽/▷ Target
┌───────────── 0
│ ┌────────── ^ $ ──────────────┐
│ │ ┌─────── Fo fe ────────┐ │
│ │ │┌────── To te ───────┐│ │
│ │ ││ ┌──── ge w ───┐ ││ │
│ │ ││ │ ┌── b e ─┐ │ ││ │
│ │ ││ │ │ ┌h l┐ │ │ ││ │
▽ ▽ ▽▽ ▽ ▽ ▽▼ ▼▽ ▽ ▽ ▽▽ ▽
echo "A cheatsheet from quickref.me"
- SCREEN 1 START
┌─┬─────────▷ #!/usr/bin/python
│ │ ┌───▷
│ │ │ print("Hello")
│ │ { } ▶ print("Vim")
│ │ │ print("!")
│ │ └─▷
│ │ ┌───┬───▷ print("Welcome")
G gg H M L k j ▶ print("to")
│ │ └─▷ print("quickref.me")
│ │ print("/vim")
│ │
│ └─────▷
│ - SCREEN 1 END
└──────────────▷ print("SCREEN 2")
#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
Shortcut | Description |
---|---|
fe | Go forward to character e |
Fo | Go backward to character o |
Document
Shortcut | Description |
---|---|
gg | First line |
G | Last line |
:n | Go to line n |
nG | Go to line n |
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
Shortcut | Description |
---|---|
:qa | Close all files |
:qa! | Close all files, abandon changes |
:w | Save |
:wq |:x | Save and close file |
:q | Close file |
:q! | Close file, abandon changes |
ZZ | Save and quit |
ZQ | Quit without checking changes |
#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) |
#Operators
#Usage
Operators let you operate in a range of text (defined by motion). These are performed in normal mode.
Shortcut | Description |
---|---|
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).
Shortcut | Description |
---|---|
v | i |
Operator | [i]nside or [a]round |
#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
vimdiff file1 file2 [file3]
See differences between files.
#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 |
#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.
#Counters
Shortcut | Description |
---|---|
<C-A> | Increment number |
<C-X> | Decrement |
#Windows
Shortcut | Description |
---|---|
z{height}<Cr> | Resize pane to {height} lines tall |
#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.
#Tags
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) |
#Exiting with an error
:cq
:cquit
Works like :qa
, but throws an error. Great for aborting Git commands.
#Jumping
Shortcut | Description |
---|---|
<C-O> | Go back to previous location |
<C-I> | Go forward |
gf | Go to file in cursor |
#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 |
: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 |
#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
#Also see
- Devhints(devhints.io)
- Vim cheatsheet(vim.rotrr.com)
- Vim documentation(vimdoc.sourceforge.net)
- Interactive Vim tutorial(openvim.com)