A useful collection of Vim 8.2 quick reference cheat sheets to help you learn vim editor faster.
▼/▶ Cursor ▽/▷ Target
┌───────────── |
├───────────── 0 $ ──────────────┐
│ ┌────────── ^ fe ────────┐ │
│ │ ┌─────── Fo te ───────┐│ │
│ │ │┌────── To 30| ───┐ ││ │
│ │ ││ ┌──── ge w ───┐ │ ││ │
│ │ ││ │ ┌── b e ─┐ │ │ ││ │
│ │ ││ │ │ ┌h l┐ │ │ │ ││ │
▽ ▽ ▽▽ ▽ ▽ ▽▼ ▼▽ ▽ ▽ ▽ ▽▽ ▽
echo "A cheatsheet from ref.softcrony.com"
- SCREEN 1 START
┌─┬─────────▷ #!/usr/bin/python
│ │ ┌───▷
│ │ │ print("Hello")
│ │ { } ▶ print("Vim")
│ │ │ print("!")
│ │ └─▷
│ │ ┌───┬───▷ print("Welcome")
G gg H M L k j ▶ print("to")
│ │ └─▷ print("ref.softcrony.com")
│ │ print("/vim")
│ │
│ └─────▷
│ - SCREEN 1 END
└──────────────▷ print("SCREEN 2")
h | j | k | l — Arrow keys
<C-u> / <C-d> — Half-page up/down
<C-b> / <C-f> — Page up/down
b / w — Previous/Next word
ge / e — Previous/Next end of word
0 (zero) / $ — Start/End of line
^ — Start of line (non-blank)
Fe / fe — Move to previous/next e
To / to — Move before/after previous/next o
| / n| — Go to first/nth column
gg / G — First/Last line
:n | nG — Go to line n
} / { — Next/Previous empty line
H / M / L — Top/Middle/Bottom screen
zt / zz / zb — Top/Center/Bottom this line
i / a — Insert before/after cursor
I / A — Insert start/end of line
o / O (letter) — Insert new line below/above
s / S — Delete char/line and insert
C / cc — Change to end of/current line
gi — Insert at last insert point
Esc | <C-[> — Exit insert mode
:w — Save
:q — Close file
:wq | :x | ZZ — Save and quit
:wqa — Save and quit all files
:q! | ZQ — Force quit
:qa — Close all files
:qa! — Force quit all files
:w now.txt — Write to now.txt
:sav new.txt — Save and edit new.txt
:w !sudo tee % — Write to readonly file
r — Replace one character
R — Enter Replace mode
u / 3u — Undo changes 1 / 3 times
U — Undo changes on one line
J — Join with next line
<C-r> / 5 <C-r> — Redo changes 1 / 5 times
x — Delete character (Cut)
p / P — Paste after/before
xp — Swap two characters
D — Delete to end of line (Cut)
dw — Delete word (Cut)
dd — Delete line (Cut)
ddp — Swap two lines
yy — Yank line (Copy)
"*p | "+p — Paste from system clipboard
"*y | "+y — Paste to system clipboard
d | x — Delete selection (Cut)
s — Replace selection
y — Yank selection (Copy)
. — Repeat last command
; — Repeat latest f, t, F or T
, — Repeat latest f, t, F or T reversed
& — Repeat last :s
@: — Repeat a command-line command
v — Enter visual mode
V — Enter visual line mode
<C-v> — Enter visual block mode
ggVG — Select all text
> / < — Shift text right/left
qi — Record macro i
q — Stop recording macro
@i — Run macro i
7@i — Run macro i 7 times
@@ — Repeat last macro
You can save macro for any letters not just i
d — w
Operator — Motion
Combine motions to use them
d — Delete
y — Yank (copy)
c — Change (delete then insert)
p — Paste
= — Formats code
g~ — Toggle case
gU — Uppercase
gu — Lowercase
> — Indent right
< — Indent left
! — Filter through external program
dd — Delete current line
dj — Delete two lines
dw — Delete to next word
db — Delete to beginning of word
dfa — Delete until a char
d/hello — Delete until hello
cc — Change current line, synonym with S
yy — Copy current line
>j — Indent 2 lines
ggdG — Delete a complete document
gg=G — Indent a complete document
ggyG — Copy a whole document
[count] <operator> <motion>
<operator> [count] <motion>
2dd — Delete 2 lines
6yy — Copy 6 lines
d3w — Delete 3 words
d5j — Delete 5 lines downwards
>4k — Indent 4 lines upwards
v — i / a — p
Operator — inner / around — Text object
Operate with an
p — Paragraph
w — Word
W — WORD (surrounded by whitespace)
s — Sentence
[ ( { < — A [], (), or {} block
] ) } > — A [], (), or {} block
' " ` — A quoted string
b — A block [(
B — A block in [{
t — A HTML tag block
See :help text-objects
diw — Delete inner word
dis — Delete inner sentence
di" — Delete in quotes
da" — Delete in quotes (including quotes)
dip — Delete a paragraph
vi" — Select inner quotes "..."
va" — Select quotes "..."
vi[ — Select inner brackets [...]
va[ — Select brackets [...]
viw — Select inner word
vip — Select inner paragraph
vipip — Select more paragraph
ciw — Change inner word
ci" — Change inner quotes
cit — Change inner tags (HTML)
cip — Change inner paragraph
yip — Yank inner paragraph
yap — Yank paragraph (including newline)
:e file — Edit a file in a new buffer
:bn — Go to the next buffer
:bp — Go to the previous buffer
:bd — Remove file from buffer list
:b 5 — Open buffer #5
:b file — Go to a buffer by file
:ls — List all open buffers
:sp file — Open and split window
:vs file — Open and vertically split window
:hid — Hide this buffer
:wn — Write file and move to next
:tab ba — Edit all buffers as tabs
<C-w> s — Split window
<C-w> v — Split window vertically
<C-w> w — Switch windows
<C-w> q — Quit a window
<C-w> T — Break out into a new tab
<C-w> x — Swap current with next
<C-w> - / + — Decrease/Increase height
<C-w> < / > — Decrease/Increase width
<C-w> | — Max out the width
<C-w> = — Equally high and wide
<C-w> h / l — Go to the left/right window
<C-w> j / k — Go to the up/down window
:tabe [file] — Edit file in a new tab
:tabf [file] — Open if exists in new tab
:tabc — Close current tab
:tabo — Close other tabs
:tabs — List all tabs
:tabr — Go to first tab
:tabl — Go to last tab
:tabm 0 — Move to position 0
:tabn — Go to next tab
:tabp — Go to previous tab
gt — Go to next tab
gT — Go to previous tab
2gt — Go to tab number 2
/foo — Search forward
/foo\c — Search forward (case insensitive)
?foo — Search backward
/\v\d+ — Search with regex
n — Next matching search pattern
N — Previous match
* — Search for current word forward
# — Search for current word backward
:[range]s/{pattern}/{str}/[flags]
:s/old/new — Replace first
:s/old/new/g — Replace all
:s/\vold/new/g — Replace all with regex
:s/old/new/gc — replace all (Confirm)
:s/old/new/i — Ignore case replace first
:2,6s/old/new/g — Replace between lines 2-6
:%s/{pattern}/{str}/[flags]
:%s/old/new — Replace first
:%s/old/new/g — Replace all
:%s/old/new/gc — Replace all (Confirm)
:%s/old/new/gi — Replace all (ignore case)
:%s/\vold/new/g — Replace all with regex
% — Entire file
’<,’> — Current selection
5 — Line 5
5,10 — Lines 5 to 10
$ — Last line
2,$ — Lines 2 to Last
. — Current line
,3 — Next 3 lines
-3, — Forward 3 lines
:[range]g/{pattern}/[command]
:g/foo/d — Delete lines containing foo
:g!/foo/d — Delete lines not containing foo
:g/^\s*$/d — Delete all blank lines
:g/foo/t$ — Copy lines containing foo to EOF
:g/foo/m$ — Move lines containing foo to EOF
:g/^/m0 — Reverse a file
:g/^/t. — Duplicate every line
:[range]v/{pattern}/[command]
:v/foo/d — Delete lines not containing foo(also :g!/foo/d)
g — Replace all occurrences
i — Ignore case
I — Don't ignore case
c — Confirm each substitution
& | \0 — Replace with the whole matched
\1...\9 — Replace with the group 0-9
\u — Uppercase next letter
\U — Uppercase following characters
\l — Lowercase next letter
\L — Lowercase following characters
\e — End of \u, \U, \l and \L
\E — End of \u, \U, \l and \L
:s/a\|b/xxx\0xxx/g # Modifies "a b" to "xxxaxxx xxxbxxx"
:s/test/\U& file/ # Modifies "test" to "TEST FILE"
:s/\(test\)/\U\1\e file/ # Modifies "test" to "TEST file"
:s/\v([abc])([efg])/\2\1/g # Modifies "af fa bg" to "fa fa gb"
:s/\v\w+/\u\0/g # Modifies "bla bla" to "Bla Bla"
:s/\v([ab])|([cd])/\1x/g # Modifies "a b c d" to "ax bx x x"
:%s/.*/\L&/ # Modifies "HTML" to "html"
:s/\v<(.)(\w*)/\u\1\L\2/g # Make every first letter of a word uppercase
:%s/^\(.*\)\n\1/\1/ # Remove duplicate lines
:%s/<\/\=\(\w\+\)\>/\U&/g # Convert HTML-Tags to uppercase
:g/^pattern/s/$/mytext # Find and append text to the end
:g/pattern/norm! @i # Run a macro on matching lines
/^\(.*\)\(\r\?\n\1\)\+$ # View the duplicates lines
/\v^(.*)(\r?\n\1)+$ # View the duplicates lines (very magic)
:v/./,/./-j # Compress blank lines into a blank line
:g/<p1>/,/<p2>/d # Delete inclusively from <p1> to <p2>
$ vimdiff file1 file2 [file3]
$ vim -d file1 file2 [file3]
:[range]diffget [bufspec]
:[range]diffput [bufspec]
do / :diffget — Obtain (get) difference
dp / :diffput — Put difference
:dif — Re-scan differences
:diffo — Switch off diff mode
:1,$+1diffget — Get all differences
ZQ — Quit without changes
See:
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
]c — Next difference
[c — Previous difference
vU — Uppercase character
vu — Lowercase character
~ — Toggle case character
viw U — Uppercase word
viw u — Lowercase word
viw ~ — Toggle case word
VU / gUU — Uppercase line
Vu / guu — Lowercase line
V~ / g~~ — Toggle case line
gggUG — Uppercase all text
ggguG — Lowercase all text
ggg~G — Toggle case all text
<C-o> — Go back to previous
<C-i> — Go forward
gf — Go to file in cursor
ga — Display hex, ascii value
:h — Help open help view
:edit! — Reload current file
:2,8m0 — Move lines 2-8 to 0
:noh — Clear search highlights
:sort — Sort lines
:ter — Open a terminal window
:set paste — Enable Insert Paste sub-mode
:set nopaste — disable Insert Paste sub-mode
:cq — Exiting with an error(aborting Git)
% — Nearest/matching {[()]}
[( | [{ — Previous ( or {
]) | ]{ — Next ) or }
[m — Previous method start
[M — Previous method end
<C-a> — Increase number
<C-x> — Decrease number
: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)
:ce 8 — Center lines between 8 columns
:ri 4 — Right-align lines at 4 columns
:le — Left-align lines
See :help formatting
`^ — 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
<C-r> = 7*7 — Shows the result
<C-r> = 10/2 — Shows the result
Do this in INSERT mode
:!<shell> — Interpret Shell Command
:r!<shell> — Read in output of shell
:r!date — Insert date
:!!date — Replace current line with date
<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
Remove duplicate lines
:sort | %!uniq -u
To number the lines in the file
:%!cat -n
Copy whole doc to clipboard
:%w !pbcopy # Mac OS X
:%w !xclip -i -sel c # GNU/Linux
:%w !xsel -i -b # GNU/Linux