|
|
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 |