| 
 |  | 
Starting vi
| Command | Description | 
|---|---|
| vi file | start at line 1 of file | 
| vi +n file | start at line n of file | 
| vi + file | start at last line of file | 
| vi +/pattern file | start at pattern in file | 
| vi -r file | recover file after a system crash | 
Saving files and quitting vi
| Command | Description | 
|---|---|
| :e file | edit file (save current file with :w first) | 
| :w | save (write out) the file being edited | 
| :w file | save as file | 
| :w! file | save as an existing file | 
| :q | quit vi | 
| :wq | save the file and quit vi | 
| :x | save the file if it has changed and quit vi | 
| :q! | quit vi without saving changes | 
Moving the cursor
| Keys pressed | Effect | 
|---|---|
| h | left one character | 
| l or <Space> | right one character | 
| k | up one line | 
| j or <Enter> | down one line | 
| b | left one word | 
| w | right one word | 
| ( | start of sentence | 
| ) | end of sentence | 
| { | start of paragraph | 
| } | end of paragraph | 
| 1G | top of file | 
| nG | line n | 
| G | end of file | 
| <Ctrl>W | first character of insertion | 
| <Ctrl>U | up ½ screen | 
| <Ctrl>D | down ½ screen | 
| <Ctrl>B | up one screen | 
| <Ctrl>F | down one screen | 
Inserting text
| Keys pressed | Text inserted | 
|---|---|
| a | after the cursor | 
| A | after last character on the line | 
| i | before the cursor | 
| I | before first character on the line | 
| o | open line below current line | 
| O | open line above current line | 
Changing and replacing text
| Keys pressed | Text changed or replaced | 
|---|---|
| cw | word | 
| 3cw | three words | 
| cc | current line | 
| 5cc | five lines | 
| r | current character only | 
| R | current character and those to its right | 
| s | current character | 
| S | current line | 
| ~ | switch between lowercase and uppercase | 
Deleting text
| Keys pressed | Text deleted | 
|---|---|
| x | character under cursor | 
| 12x | 12 characters | 
| X | character to left of cursor | 
| dw | word | 
| 3dw | three words | 
| d0 | to beginning of line | 
| d$ | to end of line | 
| dd | current line | 
| 5dd | five lines | 
| d{ | to beginning of paragraph | 
| d} | to end of paragraph | 
| :1,. d | to beginning of file | 
| :.,$ d | to end of file | 
| :1,$ d | whole file | 
Using markers and buffers
| Command | Description | 
|---|---|
| mf | set marker named ``f'' | 
| `f | go to marker ``f'' | 
| ´f | go to start of line containing marker ``f'' | 
| "s12yy | copy 12 lines into buffer ``s'' | 
| "ty} | copy text from cursor to end of paragraph into buffer ``t'' | 
| "ly1G | copy text from cursor to top of file into buffer ``l'' | 
| "kd`f | cut text from cursor up to marker ``f'' into buffer ``k'' | 
| "kp | paste buffer ``k'' into text | 
Searching for text
| Search | Finds | 
|---|---|
| /and | next occurrence of ``and'', for example, ``and'', ``stand'', ``grand'' | 
| ?and | previous occurrence of ``and'' | 
| /^The | next line that starts with ``The'', for example, ``The'', ``Then'', ``There'' | 
| /^The\> | next line that starts with the word ``The'' | 
| /end$ | next line that ends with ``end'' | 
| /[bB]ox | next occurrence of ``box'' or ``Box'' | 
| n | repeat the most recent search, in the same direction | 
| N | repeat the most recent search, in the opposite direction | 
Searching for and replacing text
| Command | Description | 
|---|---|
| :s/pear/peach/g | replace all occurrences of ``pear'' with ``peach'' on current line | 
| :/orange/s//lemon/g | change all occurrences of ``orange'' into ``lemon'' on next line containing ``orange'' | 
| :.,$/\<file/directory/g | replace all words starting with ``file'' by ``directory'' on every line from current line onward, for example, ``filename'' becomes ``directoryname'' | 
| :g/one/s//1/g | replace every occurrence of ``one'' with 1, for example, ``oneself'' becomes ``1self'', ``someone'' becomes ``some1'' | 
Matching patterns of text
| Expression | Matches | 
|---|---|
| . | any single character | 
|   | zero or more of the previous expression | 
| .   | zero or more arbitrary characters | 
| \< | beginning of a word | 
| \> | end of a word | 
| \ | quote a special character | 
| \   | the character ``  '' | 
| ^ | beginning of a line | 
| $ | end of a line | 
| [set] | one character from a set of characters | 
| [XYZ] | one of the characters ``X'', ``Y'', or ``Z'' | 
| [[:upper:]][[:lower:]]* | one uppercase character followed by any number of lowercase characters | 
| [^set] | one character not from a set of characters | 
| [^XYZ[:digit:]] | any character except ``X'', ``Y'', ``Z'', or a numeric digit | 
Options to the :set command
| Option | Effect | 
|---|---|
| all | list settings of all options | 
| ignorecase | ignore case in searches | 
| list | display <Tab> and end-of-line characters | 
| mesg | display messages sent to your terminal | 
| nowrapscan | prevent searches from wrapping round the end or beginning of a file | 
| number | display line numbers | 
| report=5 | warn if five or more lines are changed by command | 
| term=ansi | set terminal type to ``ansi'' | 
| terse | shorten error messages | 
| warn | display ``[No write since last change]'' on shell escape if file has not been saved |