As a brief introduction to vi, go through the following: First, type
at the Unix prompt. Assuming you did not already have a file named x, this command will create one. (If you have tried this example before, x will already exist, and vi will work on it. If you wish to start the example from scratch, simply remove x first.)
The file will of course initially be empty. To put something in it, type the letter i (it stands for “insert-text mode”), and type the following (including hitting the Enter key at the end of each of the three lines):
The quick brown fox will return.
Then hit the Escape key, to end insert-text-mode.
Going Further: Other Frequently-Used Commands
You now know how to use vi to insert text, move the cursor to text, and delete text. Technically, the bare-bones set of commands introduced above is sufficient for any use of vi. However, if you limit yourself to these few commands, you will be doing a large amount of unnecessary, tiresome typing.
So, you should also learn at least some of these other frequently-used vi commands:
h move cursor one character to left j move cursor one line down k move cursor one line up l move cursor one character to right w move cursor one word to right b move cursor one word to left 0 move cursor to beginning of line $ move cursor to end of line nG move cursor to line n control-f scroll forward one screen control-b scroll backward one screen i insert to left of current cursor position (end with ESC) a append to right of current cursor position (end with ESC) dw delete current word (end with ESC) cw change current word (end with ESC) r change current character ~ change case (upper-, lower-) of current character dd delete current line D delete portion of current line to right of the cursor x delete current character ma mark currrent position d`a delete everything from the marked position to here `a go back to the marked position p dump out at current place your last deletion (``paste'') u undo the last command . repeat the last command J combine (``join'') next line with this one :w write file to disk, stay in vi :q! quit VI, do not write file to disk, ZZ write file to disk, quit vi :r filename read in a copy of the specified file to the current buffer /string search forward for string (end with Enter) ?string search backward for string (end with Enter) n repeat the last search (``next search'') :s/s1/s2 replace (``substitute'') (the first) s1 in this line by s2 :lr/s/s1/s2/g replace all instances of s1 in the line range lr by s2 (lr is of form `a,b', where a and b are either explicit line numbers, or . (current line) or $ (last line) :map k s map the key k to a string of vi commands s (see below) :abb s1 s2 expand the string s1 in append/insert mode to a string s2 (see below) % go to the "mate," if one exists, of this parenthesis or brace or bracket (very useful for programmers!)
All of the `:’ commands end with your hitting the Enter key. (By the way, these are called “ex” commands, after the name of the simpler editor from which vi is descended.)
The a command, which puts text to the right of the cursor, does put you in insert-text mode, just like the i command does.
By the way, if you need to insert a control character while in append/insert mode, hit control-v first. For example, to insert control-g into the file being edited, type control-v then control-g.
One of vi‘s advantages is easy cursor movement. Since the keys h,j,k,l are adjacent and easily accessible with the fingers of your right hand, you can quickly reach them to move the cursor, instead of fumbling around for the arrow keys as with many other editors (though they can be used in vi too). You will find that this use of h,j,k,l become second nature to you very quickly, very much increasing your speed, efficiency and enjoyment of text editing.
Many of the commands can be prefixed by a number. For example, 3dd means to delete (consecutive) three lines, starting with the current one. As an another example, 4cw will delete the next four words.
The p command can be used for “cut-and-paste” and copy operations. For example, to move three lines from place A to place B:
1. Move the cursor to A.
2. Type 3dd.
3. Move the cursor to B.
4. Type p.
The same steps can be used to copy text, except that p must be used twice, the first time being immediately after Step 2 (to put back the text just deleted).
Note that you can do operations like cut-and-paste, cursor movement, and so on, much more easily using a mouse. This requires a GUI version of vi, which we will discuss later in this document.