Key notations

  • <CR>: carriage return, i.e. Enter.

  • <C-A>: ctrl (^ on Mac) + a.


  • :h: Seek help. For example, :h zz shows what zz does.

  • <C-]>: follow a link in help manual. <C-T>: go back.



  • hjkl.

  • %: move between matching braces ((), [], {}).

  • (/): move to previous/next sentence.

  • {/}: move to previous/next paragraph (delimited by empty lines).

  • <N> + motion: repeat motions, e.g. 5l, 4{.

  • /abc: move to the first occurance of "abc". Delete until the first "abc": d/abc<CR>.

Line Level

  • word: delimited by -/_/whitespaces. WORD: delimited by whitespaces.

  • w/b: move between word starts. W/B: move between WORD starts. Uppercase motion is "bigger".

  • e/ge: move between word ends. E/gE: move between WORD ends. g version is the reverse.

  • fX/FX (X is any character): move to the next/previous X. If not found, the cursor stays. Uppercase motion is the reverse.

  • tX/TX: move until (cursor will be before) next/previous X. Delete until dot: dt..

  • ;/,: repeat f/F/t/T in the same/reverse direction.

  • 0/$: move to the start/end of current line: .

  • ^: move to the first non-whitespace character of current line.

  • -/<CR>: move to the start of previous/next line.

Display Lines

  • gj/gk: move between display lines. g version is for display lines.

  • g0: move to start of a display line.

Page Level

  • H/M/L: move cursor to the first/middle/last line of the screen.

  • zt/z<CR>/zb: redraw buffer so that the current line is the first/middle/last line.

  • <C-B>/<C-F>: move one page up/down.

  • <C-U>/<C-D>: move half page up/down.

Buffer Level

  • Move to start/end of buffer: gg/G.

  • Move to line <N>: <N>G/<N>gg.

  • Move to <N> percent: <N>%. (No point to jump between matching parenthesis 50 times, so it was repurposed.)

General command format in normal mode: verb + number + movement.






> indent

G from current line to end of file


c change

$ from current position to end of line

C is the same. D is d$.

Normal mode => insert mode

  • i: insert before cursor

  • a: insert after cursor (append). Move to the end of current word and append: ea. Move to the end of previous word and append: gea.

  • s: delete current character and insert (substitute)

Uppercase version: for line

  • I: insert at the beginning of the line

  • A: insert at the end of the line

  • S: delete current line and insert

  • o: insert below current line

Uppercase version: invert

  • O: insert before current line


  • */#: search current word forward/backwards


substitute in one line, first occurances:


repeat substitution: &

Normal Mode

Move cursor with arrow keys

Ctrl C is the same as esc: insert mode to normal mode

parentheses move between sentences. Curly braces paragraph.

d) delete a sentence

double qoute a: use a register Then yy


ma mark the current location to a

30G or :30 go to the 30th line

Automatically: mark dot, the line with the last change. Go back: single quote dot.

Lowercase mark is local to buffer. Uppercase mark is global.

Jump history: back ctrl O forward??

Go to the mark: single quote a.


:r filename: read content of a file and insert below

:r !ls

:-1r filename: insert the file in the previous line


show line number :set number (or :se nu for short) :se nonu (remove line number)

:noremap (use space to scroll down)


:abb _ab abcdefg

Then in insert mode, _ab will be expanded to abcdefg.

_ab(ctrl-V) space will not be expanded.

fix typo: :abb recieve receive

Run shell command: :! command

:com! Py ! python % define a command (override if existed)

name of command: Py.

content of command: ! (external) % is current file name.

to call this command: :Py

:set see current set option.

:set clipboard=unnamedplus integrate system's clipboard with vim's

start Vim with commands

vim file.txt +8: same as vim file.txt then :8

vim +1,2d +wq conway.txt orvim conway.txt +1,2d +wq

delete first two lines

vim file.txt +/Kramm go to the first instance

vim can work with zip or tar files directly!! Vim treats then as just directories.

Open file from name

if in file1, it says file2, use gf (go to file) to open that file.

if you have a error log file containing line numbers (e.g. hello.go:2), gF will open the file on that line.

Part II Files

Open multiple files :e

  • Open new file in current window: :e filename, :e <TAB>, :e prefix<TAB>.

  • Open current directory: :e ..

  • Reopen current file (discard all unsaved changes): :e!.

  • Open new file in a new window: :new filename.


A buffer is an opened file.

  • List all buffers: :ls. % is current file.

  • Navigate between buffers: :bp, :bn, :bfirst, :blast, :b3 (number in :ls), :b filename, :b <TAB>, :b prefix<TAB>.

  • Delete a buffer (close one file): :bd, :bd filename.


Windows are views to a buffer. Useful when you want to see two parts of the same file at the same time.

  • Create a new window (split): <C-W>s or :split split horizontally; <C-W>v or :vsplit split vertically.

  • Move between windows: <C-W>w, but <C-W><C-W> is probably easier to type.

  • Close a window: :close or <C-W>c.

  • Close all other windows: :only or <C-W>o.

Part V Patterns

  • Repeat last search: /<CR>.

  • Go through search history: / <UP>.

Tip 81 C-r C-w auto complete search term

Tip 82 match numbers :%s///gn

Tip 83 :%s/abc/e cursor will be at the end of matching pattern 14. Substitution TIp 87 :[range]s/pattern/string/flags flags g: global: modify all matches in one line c: confirm n: do not replace. just to report matching numbers e: suppress error message: no match &: reuse previous flags Replacement string: \t tab \r new line ~ previous string \1, \2: captures \0 or &: all patterns

Tip 89 confirm: a: all: replace this and all the following occurrences l: last. replace here and quit q: quit C-e/C-y: go to previous/next screen

Tip 90 leave pattern empty and vim will use last pattern

Tip 91 replace with register content. :%s/\=@0/g

Tip92 search in whole file :s/target/replace/g g& 15. Global Commands Tip 97 :[range] global[!]/pattern/[cmd] range: default is all file (%). Other ex command default is current line (.) pattern: default is previous pattern cmd: default is :print !: inverse. only run command on no match lines. :v

Tip 98 :g/re/p ====> grep :g/re/d: delete matching lines :v/re/d: delete non matching lines Tip 99 empty a register: qaq collect TODO :g/TODO/yank A use A to append to register a.

Tip 100 :global/{start}/ .,{finish} [cmd]

To Read



SpaceVim Vim 101 movement 移动窗口和tab


Carl smith vim plugins Vim-fugitive Gitv Syntastic Vim-gitgutter Vim-ipython Vim-markdown

Reload vimrc Five time saving tricks of vim

Google doc notes


Learn Vimscript the hard way (中文)

Vim plugin

Spf13 Airline

Vim filname +123 => opens the file at line 123

Study the .vimrc!!

Linux and Vim notes

Some Vim plugins

Moving around in Vim