vim Usage 
iDog's brief & practical vim guide.
 Basic Commands 
| command | description | 
| i/I | insert | 
| a/A | append | 
| o/O | append/insert new line | 
| dd/cc | delete/replace curr line | 
| dw/cw | delete/replace curr word | 
|   |   | 
| h/left arrow | left | 
| l/right arrow |   | 
| j/upper arrow |   | 
| k/down arrow |   | 
| H | move to top left corner of screen | 
| L | move to bottum left corner of screen | 
| 0/^ | move to BOL | 
| $ | EOL | 
| G | go to EOF | 
| <num>G | go to line num | 
| ctrl-b/PgUp |   | 
| ctrl-f/PgDn |   | 
| w/W | beginning of next word/big word | 
| e/E | end of next word/big word | 
| b/B | beginning of prev word/big word | 
|   |   | 
| y | yank | 
| p/P | paste before/after cursor | 
|   |   | 
| </> | left/right indent a selected block | 
| <</>> | left/right indent curr line | 
 Useful commands for programmers 
| command | description | 
| % | match (), <>, [], {}, #if… | 
|   |   | 
| # | go to previous occurrence of the current word (under cursor) | 
| * | go to next occurrence of the current word | 
|   |   | 
| [[ | go to previous ‘{‘ which is at col 1 | 
| ]] | go to next ‘}’ which is at col 1 | 
|   |   | 
| { | go to start of previous paragraph | 
| } | go to start of next paragraph | 
|   |   | 
| <ctrl>-] | jump | 
| <ctrl>-T | jump back | 
|   |   | 
| gd | go to definition | 
| K | show man page for the word at cursor | 
| C | comment out curr line with //, then move to next line | 
 Generate tags for jumping operations 
ctags [options] <filenames>
Examples:
ctags –R | create tags recursively from the current dir.
Ctags -R --exclude “/aaa/bbb” --exclude “/ccc/ddd” “/my/root/dir”
If vi is started from a dir without the tags file, it cannot load the tags. In this case, we have following solutions: 
-  Make a script file, with the following commands
 
:set tags=<tag_file_with_path>
vi –s <script_file>
 Quick fix - a simple IDE 
| command | description | 
| :make <param> | do make (make file must exist in current dir) | 
| :cl | list errors & warnings | 
| :cn | go to next error | 
| :cp/:cN | go to previous error | 
| :cnew | restart from the beginning | 
 Visual Mode 
Back to the time of using a good editor in DOS...
| command | description | 
| v | toggle visual mode on/off | 
| <ctrl>-v | toggle block visual mode on/off | 
 Split windows 
| command | description | 
| :split | split | 
| :vsplit | split vertically | 
| <ctrl>-w w or <ctrl>-w <ctrl>-w | move around the panes | 
| <ctrl>-w <ctrl>-- | max the current pane | 
| <ctrl>-w h/j/k/l | move cursor to a certain pane | 
| <ctrl>-w H/J/K/L | move current pane to a direction | 
| :close | close current pane | 
| :qall | quit all files | 
| :wall | save all files | 
| :wqall |   | 
| :only | close all other panes | 
| :vertical diffsplit <filename> | split vertically and do diff with curr file. Tip: use tab key for file name auto-completion | 
| > vimdiff <file1> <file2> | same as above | 
| :new |   | 
| :vertical :new | vertical split and start a new file | 
| :vnew | same as above | 
 Other Notes 
Get result of a command to the current edited file
:read !<command>
Eg:
:read !ls ~/
:read !cat ~/.bashrc
Replace
:%s/\<word\>/WORD/gc
\< indicates the beginning of word; \> end of word; c: prompt for each replace
:%s/^/my_str/g
Insert my_str at the beginning of each line.
:%s/$/my_str/g
Append my_str after each line.
Config file for vim
vimrc.txt
:set ai/noai - alignment
:set sm - show matching () [] {} while typing
:set hlsearch - hilight the search result
:set laststatus=2 - show status bar
:set guifontset=-*-fixed-medium-r-normal--16-*-*-*-c-*,*-r-*
:set backup - backup file
:set nobk - don't backup file
Also, sometimes you will find that Backspace key acts as Del key, and <Shift> - Backspace acts as the normal Backspace key. In this case, if you type <Ctrl> - Backspace & <Ctrl> - <Shift> - Backspace, and set the desired in terminal configuration (depends on which terminal software you use), it will be fixed.
 Edit binary files 
-  open binary file
 -  type ':%!xxd' (without quotation marks)
 -  edit the file
 -  type ':%!xxd -r' (without quotation marks)
 -  save file