Skip to content

Vim is a free and open-source, screen-based text editor program, It is a improved clone of Bill Joy's vi. Vim's author, Bram Mooleanaar.

Global

comand Description
:sav text.txt save file as
:ter open terminal
K or KK open man page for word under the cursor
:h testing open help for testing
:Ctrl+i list arguments
:changes list of changes
:wq or :x or ZZ save and quit
:q! quit unsave

cursor movements

Command Description
h Left
j Down
k Up
l Right
H move to top of screen
M move to middle of screen
L move to bottom of screen
w jump to start next word
W jump to start next word(with punctuation)
e jump to end the word
E jump to end the word(with punctuation)
b jump backwards to start of the word
B jump backwards to start f the word(with punctuation)
% move to matching character
0 move to start the line
^ move to start the line (no blank character)
$ move to end the line
gg jump to top document
G jump to end document
5G or 5gg jump to line 5 of document
gd move to local declaration
gD move to global declaration
fx move to next character x in the line
Fx move to previous character x in the line
Tx move to after previous character of character x
; repeat previous f,t,F,T movement
, repeat previous f,t,F,T movement, backwards
} jump to next paragraph or function
{ jump to previous paragraph or function
zz put cursor as center
zt put cursor as top
zb put cursor as buttom
Ctrl+e move document without cursor up
Ctrl+y move document without cursor down
Ctrl + o move to last location

Insert Mode

Command Description
i insert before the cursor
I insert at the start of line
a insert after the cursor
A insert at the end of line
o insert a new line below
O insert a new line above
Ctrl+h move cursor before character
Ctrl+l move cursor after character
Ctrl+e move to end line
Ctrl+b move to start line
Ctrl+w delete the word before cursor
Ctrl+u delete all content before cursor
Ctrl+j jump to next line
Ctrl+k jump to before line
Ctrl+t indent line
Ctrl+d indent line backward
Ctrl+n insert next match autocomplete
Ctrl+p insert the before match autocomplete
Ctrl+o+command temporarily insert to mode normal
Ctrl+c exit insert mode

editing

Command Description
r replace single character
R replace more that one character
J join two line with one space
gJ join two line without space
gwip reflow paragraph
g~ switch case all line
gu change to lowercase line
gU change to uppercase line
cc or S replace one line
C replace all line after cursor
ciw replace word
ce or cw replace in word after the cursor
s delete character and replace with text
xp delete and paste one character
D or d$ delete to end the line
u undo
U undo the last line changed
. repeat last command

Visual Mode

Command Description
v start visual mode in cursor
V start visual mode in line
o move to other end on market area
Ctrl+v start visual mode in block mode
O move to other end on block mode
aw mark word
ab mark a block with ()
aB mark a block with {}
at mark block with <>
ib inner block with ()
iB inner block with {}
it inner block with <>
> or < indenting market area
y copy marked area
d delete market area
~ switch case market area
u change marked area to lowercase
U change market area to uppercase

registers

Command Description
:reg show register content
xy copy the register with name x
xp paste the register with name x
+y copy to system clipboard
+p paste from the system register

Macros

Command Description
qa record macro
q stop macro
@a run macro
@@ re run macro

Copy and Paste

Comand description
yy  yank (copy) a line
2yy  yank (copy) 2 lines
yw  yank (copy) the characters of the word from the cursor position to the start of the next word
yiw  yank (copy) word under the cursor
yaw  yank (copy) word under the cursor and the space after or before it
y$ or Y  yank (copy) to end of line
put (paste) the clipboard after cursor
put (paste) before cursor
gp  put (paste) the clipboard after cursor and leave cursor after the new text
gP  put (paste) before cursor and leave cursor after the new text
dd  delete (cut) a line
2dd  delete (cut) 2 lines
dw  delete (cut) the characters of the word from the cursor position to the start of the next word
diw  delete (cut) word under the cursor
daw  delete (cut) word under the cursor and the space after or before it
:3,5d  delete lines starting from 3 to 5
ctrl+r return the alt+u

Tabs

Windows

Command Description
:e[dit] file  edit a file in a new buffer
:bn[ext]  go to the next buffer
:bp[revious]  go to the previous buffer
:bd[elete]  delete a buffer (close a file)
:b[uffer]#  go to a buffer by index #
:b[uffer] file  go to a buffer by file
:ls or :buffers  list all open buffers
:sp[lit] file  open a file in a new buffer and split window
:vs[plit] file  open a file in a new buffer and vertically split window
:vert[ical] ba[ll]  edit all buffers as vertical windows
:tab ba[ll]  edit all buffers as tabs
Ctrl + ws  split window
Ctrl + wv  split window vertically
Ctrl + ww  switch windows
Ctrl + wq  quit a window
Ctrl + wx  exchange current window with next one
Ctrl + w=  make all windows equal height & width
Ctrl + 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)
Ctrl + wH  make current window full height at far left (leftmost vertical window)
Ctrl + wL  make current window full height at far right (rightmost vertical window)
Ctrl + wJ  make current window full width at the very bottom (bottommost horizontal window)
Ctrl + wK  make current window full width at the very top (topmost horizontal window)

Diff

Command Description
zf  manually define a fold up to motion
ss split document to two windows
zd  delete fold under the cursor
za  toggle fold under the cursor
zo  open fold under the cursor
zc  close fold under the cursor
zr  reduce (open) all folds by one level
zm  fold more (close) all folds by one level
zi  toggle folding functionality
]c  jump to start of next change
[c  jump to start of previous change
do or :diffg[et]  obtain (get) difference (from other buffer)
dp or :diffpu[t]  put difference (to other buffer)
:diffthis  make current window part of diff
:dif[fupdate]  update differences
:diffo[ff]  switch off diff mode for current window

Advanced tips

Command Description
/hello search hello
?hello search backward
/vhello search all characters
:.,$d from the current line(.) to the end of the file($) delete(d)
:g/hello/d delete all line that containing 'hello'
:g!/hello/d delete all lines not containing 'hello'
:%S/:/:^M/g add new lines after the line that containing:
:%s/hello/other/g replace all
:s/hee/other/g replace in visual mode

Note

to enter "^M" press ctrl+v -> M

Note

press 'n' to jump to next match

Web Sites