Vim Cheatsheet
A cheatsheet for our most beloved text editor Vim.
This cheatsheet is summarized from personal experience and other online tutorials. It should not be considered as an official advice.
Global
:help keyword
- open help for keyword:saveas file
- save file as:close
- close current paneK
- open man page for word under the cursor
Cursor movement
-
h
- move cursor left -
j
- move cursor down -
k
- move cursor up -
l
- move cursor right -
H
- move to top of screen -
M
- move to middle of screen -
L
- move to bottom of screen -
w
- jump forwards to the start of a word -
W
- jump forwards to the start of a word (words can contain punctuation) -
e
- jump forwards to the end of a word -
E
- jump forwards to the end of a word (words can contain punctuation) -
b
- jump backwards to the start of a word -
B
- jump backwards to the start of a word (words can contain punctuation) -
%
- move to matching character (default supported pairs: '()', '{}', '[]' - use :h matchpairs in vim for more info) -
0
- jump to the start of the line -
^
- jump to the first non-blank character of the line -
$
- jump to the end of the line -
g_
- jump to the last non-blank character of the line -
gg
- go to the first line of the document -
G
- go to the last line of the document -
5G
- go to line 5 -
fx
- jump to next occurrence of character x -
tx
- jump to before next occurrence of character x -
Fx
- jump to previous occurence of character x -
Tx
- jump to after previous occurence of character x -
;
- repeat previous f, t, F or T movement -
,
- repeat previous f, t, F or T movement, backwards -
}
- jump to next paragraph (or function/block, when editing code) -
{
- jump to previous paragraph (or function/block, when editing code) -
zz
- center cursor on screen -
Ctrl + e
- move screen down one line (without moving cursor) -
Ctrl + y
- move screen up one line (without moving cursor) -
Ctrl + b
- move back one full screen -
Ctrl + f
- move forward one full screen -
Ctrl + d
- move forward 1/2 a screen -
Ctrl + u
- move back 1/2 a screenTip Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.
Insert mode - inserting/appending text
i
- insert before the cursorI
- insert at the beginning of the linea
- insert (append) after the cursorA
- insert (append) at the end of the lineo
- append (open) a new line below the current lineO
- append (open) a new line above the current lineea
- insert (append) at the end of the wordEsc
- exit insert mode
Editing
r
- replace a single characterJ
- join line below to the current one with one space in betweengJ
- join line below to the current one without space in betweengwip
- reflow paragraphcc
- change (replace) entire lineC
- change (replace) to the end of the linec$
- change (replace) to the end of the lineciw
- change (replace) entire wordcw
- change (replace) to the end of the words
- delete character and substitute textS
- delete line and substitute text (same as cc)xp
- transpose two letters (delete and paste)u
- undoCtrl + r
- redo.
- repeat last command
Cut and paste
yy
- yank (copy) a line2yy
- yank (copy) 2 linesyw
- yank (copy) the characters of the word from the cursor position to the start of the next wordy$
- yank (copy) to end of linep
- put (paste) the clipboard after cursorP
- put (paste) before cursordd
- delete (cut) a line2dd
- delete (cut) 2 linesdw
- delete (cut) the characters of the word from the cursor position to the start of the next wordD
- delete (cut) to the end of the lined$
- delete (cut) to the end of the linex
- delete (cut) character
Search and replace
/pattern
- search for pattern?pattern
- search backward for pattern\vpattern
- 'very magic' pattern: non-alphanumeric characters are interpreted as special regex symbols (no escaping needed)n - repeat
search in same directionN - repeat
search in opposite direction:%s/old/new/g
- replace all old with new throughout file:%s/old/new/gc
- replace all old with new throughout file with confirmations:noh
- remove highlighting of search matches
Search in multiple files
:vimgrep /pattern/ {
{file}}
- search for pattern in multiple filese.g. :vimgrep /foo/ **/*
:cn
- jump to the next match:cp
- jump to the previous match:copen
- open a window containing the list of matches
Marking text (visual mode)
v
- start visual mode, mark lines, then do a command (like y-yank)V
- start linewise visual modeo
- move to other end of marked areaCtrl + v
- start visual block modeO
- move to other corner of blockaw
- mark a wordab
- a block with ()aB
- a block with {}ib
- inner block with ()iB
- inner block with {}Esc
- exit visual mode
Visual commands
>
- shift text right<
- shift text lefty
- yank (copy) marked textd
- delete marked text~
- switch case
Registers
-
:reg
- show registers content -
"xy
- yank into register x -
"xp
- paste contents of register xTip Registers are being stored in ~/.viminfo, and will be loaded again on next restart of vim. Tip Register 0 contains always the value of the last yank command.
Marks
:marks
- list of marksma
- set current position for mark Aa
- jump to position of mark Ay`a
- yank text to position of mark A
Macros
qa
- record macro aq
- stop recording macro@a
- run macro a@@
- rerun last run macro
Working with multiple files
:e
file - edit a file in a new buffer:bnext or :bn
- go to the next buffer:bprev or :bp
- go to the previous buffer:bd
- delete a buffer (close a file):ls
- list all open buffers:sp file
- open a file in a new buffer and split window:vsp file
- open a file in a new buffer and vertically split windowCtrl + ws
- split windowCtrl + ww
- switch windowsCtrl + wq
- quit a windowCtrl + wv
- split window verticallyCtrl + wh
- move cursor to the left window (vertical split)Ctrl + wl
- move cursor to the right window (vertical split)Ctrl + wj
- move cursor to the window below (horizontal split)Ctrl + wk
- move cursor to the window above (horizontal split)
Tabs
:tabnew or :tabnew {page.words.file}
- open a file in a new tabCtrl + wT
- move the current split window into its own tabgt or :tabnext or :tabn
- move to the next tabgT or :tabprev or :tabp
- move to the previous tab#gt
- move to tab number #:tabmove #
- move current tab to the #th position (indexed from 0):tabclose or :tabc
- close the current tab and all its windows:tabonly or :tabo
- close all tabs except for the current one:tabdo command
- run the command on all tabs (e.g. :tabdo q - closes all opened tabs)
Exiting
:w
- write (save) the file, but don't exit:w !sudo tee %
- write out the current file using sudo:wq
or :x or ZZ - write (save) and quit:q
- quit (fails if there are unsaved changes):q!
or ZQ - quit and throw away unsaved changes:wqa
- write (save) and quit on all tabs