Featured Post

Trie implementation in C

VI Commands


By Line

nG to line n

0, $ first, last position on line

^ or _ first non-whitespace char on line

+, - first character on next, prev line

By Screen

^F, ^B scroll foward, back one full screen

^D, ^U scroll forward, back half a screen

^E, ^Y show one more line at bottom, top

L go to the bottom of the screen

z position line with cursor at top

z. position line with cursor at middle

z- position line with cursor at

Marking Position on Screen

mp mark current position as p (a..z)

`p move to mark position p

'p move to first non-whitespace on line w/mark p

Miscellaneous Movement

fm forward to character m

Fm backward to character m

tm forward to character before m

Tm backward to character after m

w move to next word (stops at puncuation)

W move to next word (skips punctuation)

b move to previous word (stops at punctuation)

B move to previous word (skips punctuation)

e end of word (puncuation not part of word)

E end of word (punctuation part of word)

), ( next, previous sentence

]], [[ next, previous section

}, { next, previous paragraph

% goto matching parenthesis () {} []


Entering Text

a append after cursor

A or $a append at end of line

i insert before cursor

I or _i insert at beginning of line

o open line below cursor

O open line above cursor

cm change text (m is movement)

Cut, Copy, Paste (Working w/Buffers)

dm delete (m is movement)

dd delete line

D or d$ delete to end of line

x delete char under cursor

X delete char before cursor

ym yank to buffer (m is movement)

yy or Y yank to buffer current line

p paste from buffer after cursor

P paste from buffer before cursor

“bdd cut line into named buffer b (a..z)

“bp paste from named buffer b

Searching and Replacing

/w search forward for w

?w search backward for w

/w/+n search forward for w and move down n lines

n repeat search (forward)

N repeat search (backward)

:s/old/new replace next occurence of old with new

:s/old/new/g replace all occurences on the line

:x,ys/old/new/g replace all ocurrences from line x to y

:%s/old/new/g replace all occurrences in file

:%s/old/new/gc same as above, with confirmation


n > m indent n lines (m is movement)


. repeat last command

U undo changes on current line

u undo last command

J join end of line with next line (at )

:rf insert text from external file f

^G show status

Here are .vimrc and .bashrc files for a C programmer