7.0 - Alphabetical vi quick reference ... means that something needs to be specified before or after the command, as appropriate. This is normally a cursor movement keys (h,j,k,l,w,b, etc.) or a line number. # (where # is a number) following command n times... : go to ex-mode ) next sentence ( previous sentence } next paragraph { previous paragraph ]] next section [[ previous section 0 beginning of line $ end of line ^ first non-whitespace character + first character of next line - first character of previous line (spacebar) next character (return) next line / search forward ? search backward % find match of current parenthesis, brace, or bracket , reverse direction of last f, F, t, or T ; repeat last f, F, t, or T . repeat last command ` goto mark ' goto beginning of line with mark `` return to previous mark or location before a search '' go to start of line of previous mark or location before search ~ switch case of current character " store in register @ execute command in register ! send next to command, replace output (eg !}fmt passes the current paragraph to the command fmt, and replaces the output with whatever fmt returns.) !! send line to command >> shift line one shiftwidth to the right << shift line one shiftwidth to the left >% shift until matching (, [, or { to the right <% shift until matching (, [, or { to the left a append after the current location A append at the end of the line ^a unused b beginning of previous word B beginning of previous word, ignore punctuation ^b scroll back one screen c change until... C change to end of line ^c ends insert mode, unused in command mode (if defined as interrupt) d delete until... D delete to end of line ^d scroll down half a window, moves to previous shiftwidth in insert mode e end of word E end of word, ignore punctuation ^e scroll screen down one line f find... F find backward... ^f scroll forward one screen g unused G ...Goto [defaults to end of file] ^g show status line h left H first line on screen ^h backspace in insert mode, left in command mode i insert before current location I insert before first non-whitespace character on line ^i tab in insert, unused in command j down J join next line with current line ^j down in command, create newline in insert k up K unused ^k unused l right L last line on screen ^l redraw screen m mark position into register M middle of screen ^m carriage return n repeat last search N repeat last search, reverse direction ^n down in command o open line below current O open line above current ^o unused p put below current line P put above current line ^p up in command q unused Q quit and run ex ^q unused r replace current character R replace characters until insert mode is left ^r redraw screen in command mode s substitute S substitute entire line ^s unused t to... T backward to... ^t moves to next shiftwidth. u undo last change U undo changes to current line ^u scroll up half a window v unused V unused ^v unused in command, quotes next character in insert w beginning of next word W beginning of next word, ignore punctuation ^w unused in command, in insert move back to beginning of previous word x delete current character X delete previous character ^x unused y yank... Y yank current line ^y scroll screen up one line z reposition screen around line (Return to top of screen, . to middle, - to bottom) ZZ write (only if changes have been made) and quit ^z unused 7.1 - Command mode input options ( : commands) (Note: this is not a canonical list, just some of the more important ones.) :r read into current text :r ! read output from command into current text :nr read in at line number :! run command, return :sh goto shell :so read and execute commands from :x write (only if changes have been made) and quit :wq write and quit :l1,l2w write between lines l1 and l2 to . If is not specified, assume current. If l1,l2 not specified, assume entire file (making it :w) :w >> append to . May use line numbers :w! overwrite current file :q quit :q! quit, forget changes :e edit without leaving vi :e! forget changes since last write :n edit next file :e +n edit at line n, if no end, assume end of file :n specify as new list of files to edit :e# edit alternate file (if :e is used, alternate is the original file) :args show files to be edited :rew rewind list of files to top :map m n create a macro (make m do n) :map! m n create an insert mode macro (make m do n) :unmap m destroy macro m :unmap! m destroy insert mode macro m :ab <1> <2> abbreviate - replace <1> with <2> whenever typed as a word :unab <1> unabbreviate <1> :cd cd to :set