Operating System User's Guide
Appendix B, vi commands

Appendix B

Appendix B<P> vi commands vi commands

The following tables contain all the basic vi commands.


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