Getting started

Moving cursor

Action Commands
cursor left left arrow or h
cursor right right arrow or l
cursor up up arrow or k
cursor down down arrow or j
jump to last line G
jump to first line gg or :1
jump to line 99 :99
jump to end of line $
jump to start of line 0 (zero)

TEXT EDITING

Action Commands
enter insert mode i
back to normal mode ESC
delete a character x
delete a word dw
delete to the end of the line d$
delete a line dd
delete multiple lines 10dd (delete 10 lines)
replace a character r
replace a word cw or ce
append a new line below o
append a new line above O
undo u

CUT and COPY and PASTE

Action Command
yank(copy) current line yy
copy 3 lines 3yy
paste copied lines after cursor p
paste copied lines before cursor P
cut(delete) current line dd
cut(delete) to the end of the line d$
show the contents of all registers :reg

SAVE and EXITING

Action Command
Go back to normal mode ESC
Save but don’t exit :w
save then exit :wq or :x or ZZ
force exit without saving :q!
force saving then exit :wq!

More functions

Search and Replace

Actions Command
search a word /word type n or N to repeat
substitute ‘new’ for ‘old’ :s/old/new/
substitute globally on the line :s/old/new/g
substitute string between lines :2,11 s/old/new/g
substitute string in the whole file :%s/old/new/g

Execute external commands

Actions Command
execute an external command :!command
show file location :!pwd
write current file with name FILENAME :w FILENAME
Save line 10 through 20 to file FILENAME :10,20w FILENAME
insert contents of FILENAME to current file :r FILENAME

SET OPTION

Actions Command
Show line number :set number
disable search history :noh

Editing multiple files

Actions Command
Edit another file in buffer :e[dit] foo.txt
go to next buffer :bn[ext]
go to previous buffer :bp[revious]
delete a buffer(close file) :bd[elete]
go to a buffer by index # :b#
go to buffer by file name :b file
list all buffers :ls
open a file in a new buffer and split window :sp[lit] file
open a file in a new buffer and vertically split window :vs[plit] file
edit all buffers as vertical windows :vert[ical] ba[ll]
edit all buffers as tabs :tab ba[ll]
split window Ctrl + ws
split window vertically Ctrl + wv
switch windows Ctrl + ww
quit a window Ctrl + wq
exchange current window with next one Ctrl + wx
make all windows equal height & width Ctrl + w=