BSD 3 development
[unix-history] / usr / doc / ex / vi.in
CommitLineData
fe41e7d5
BJ
1.bd S 3
2.if t .ds dg \(dg
3.if n .ds dg +
4.if t .ds dd \(dd
5.if n .ds dd ++
6.RP
7.TL
8An Introduction to Display Editing with Vi
9.br
10\fI\s-2(Revised for version 3.1)\s0\fP
11.AU
12William Joy\*(dg
13.AI
14Computer Science Division
15Department of Electrical Engineering and Computer Science
16University of California, Berkeley
17Berkeley, Ca. 94720
18.AB
19.PP
20.I Vi
21(visual) is a display oriented interactive text editor.
22When using
23.I vi
24the screen of your terminal acts as a window into the file which you
25are editing. Changes which you make to the file are reflected
26in what you see.
27.PP
28Using
29.I vi
30you can insert new text any place in the file quite easily.
31Most of the commands to
32.I vi
33move the cursor around in the file.
34There are commands to move the cursor
35forward and backward in units of characters, words,
36sentences and paragraphs.
37A small set of operators, like
38.B d
39for delete and
40.B c
41for change, are combined with the motion commands to form operations
42such as delete word or delete paragraph, in a simple and natural way.
43This regularity and the mnemonic assignment of commands to keys makes the
44editor command set easy to remember and to use.
45.PP
46.I Vi
47will work on a large number of display terminals,
48and new terminals are easily driven after editing a terminal description file.
49While it is advantageous to have an intelligent terminal which can locally
50insert and delete lines and characters from the display, the editor will
51function quite well on dumb terminals over slow phone lines.
52The editor makes allowance for the low bandwidth in these situations
53and uses smaller window sizes and
54different display updating algorithms to make best use of the
55limited speed available.
56.PP
57It is also possible to use the command set of
58.I vi
59on hardcopy terminals, storage tubes and ``glass tty's'' using a one line
60editing window; thus
61.I vi's
62command set is available on all terminals.
63On large machines, the full command set of the more traditional, line
64oriented editor
65.I ex
66is available within
67.I vi;
68it is quite simple to switch between the two modes of editing.
69.AE
70.NH 1
71Getting started
72.PP
73.FS
74\*(dg
75The financial support of an \s-2IBM\s0 Graduate Fellowship and the
76National Science Foundation under grants MCS74-07644-A03 and MCS78-07291
77is gratefully acknowledged.
78.FE
79This manual provides a quick introduction to
80.I vi.
81You should be running
82.I vi
83on a file you are familiar with while you are reading this.
84The first part of this document (sections 1 through 5)
85describes the basics of using
86.I vi.
87Some topics of special interest are presented in section 6, and
88some nitty-gritty details of how the editor functions are saved for section
897 to avoid cluttering the presentation here.
90.PP
91There is also a short appendix here, which gives for each character the
92special meanings which this character has in \fIvi\fR. Attached to
93this document should be a quick reference card.
94This card summarizes the commands of
95.I vi
96in a very compact format. You should have the card handy while you are
97learning
98.I vi.
99.NH 2
100Specifying terminal type
101.PP
102Before you can start
103.I vi
104you must tell the system what kind of terminal you are using.
105Here is a (necessarily incomplete) list of terminal type codes.
106If your terminal does not appear here, you should consult with one of
107the staff members on your system to find out the code for your terminal.
108If your terminal does not have a code, one can be assigned and a description
109for the terminal can be created.
110.LP
111.TS
112center;
113ab ab ab
114a a a.
115Code Full name Type
116_
1172621 Hewlett-Packard 2621A/P Intelligent
1182645 Hewlett-Packard 264x Intelligent
119act4 Microterm ACT-IV Dumb
120act5 Microterm ACT-V Dumb
121adm3a Lear Siegler ADM-3a Dumb
122adm31 Lear Siegler ADM-31 Intelligent
123c100 Human Design Concept 100 Intelligent
124dm1520 Datamedia 1520 Dumb
125dm2500 Datamedia 2500 Intelligent
126dm3025 Datamedia 3025 Intelligent
127fox Perkin-Elmer Fox Dumb
128h1500 Hazeltine 1500 Intelligent
129h1510 Hazeltine 1510 Intelligent
130i100 Infoton 100 Intelligent
131mime Imitating a smart act5 Intelligent
132owl Perkin-Elmer Owl Intelligent
133t1061 Teleray 1061 Intelligent
134vt52 Dec VT-52 Dumb
135.TE
136.PP
137Assume for the time being that you have a Hewlett-Packard HP2621A
138terminal. The code used by the system for this terminal is `2621'.
139In this case you can use one of the following commands to tell the system
140the type of your terminal:
141.DS
142% \fBsetenv TERM\fP 2621
143.DE
144This command works with the shell
145.I csh
146on both version 6 and 7 systems.
147If you are using the standard version 7 shell then you should give
148the commands
149.DS
150$ \fBTERM=\fP2621
151$ \fBexport TERM\fP
152.DE
153.PP
154The editor command set is independent of the terminal
155you are using. On most terminals with cursor positioning keys, these keys
156will also work within the editor.
157If you don't have cursor positioning keys, or even if you do, you can use
158the \fBh j k\fR and \fBl\fR keys as cursor positioning
159keys (these are labelled with arrows on an
160.I adm3a).*
161.PP
162(Particular note for the HP2621: on this terminal the function keys
163must be \fIshifted\fR (ick) to send to the machine, otherwise they
164only act locally. Unshifted use will leave the cursor positioned
165incorrectly.)
166.FS
167* As we will see later,
168.I h
169moves back to the left (like control-h which is a backspace),
170.I j
171moves down (in the same column),
172.I k
173moves up (in the same column),
174and
175.I l
176moves to the right.
177.FE
178.NH 2
179Editing a file
180.PP
181After telling the system which kind of terminal you have, you should
182make a copy of a file you are familiar with, and run
183.I vi
184on this file, giving the command
185.DS
186% \fBvi\fR \fIname\fR
187.DE
188replacing \fIname\fR with the name of the copy file you just created.
189The screen should clear and the text of your file should appear on the
190screen. If something else happens refer to the footnote.\*(dg
191.FS
192\*(dg If you gave the system an incorrect terminal type code then the
193editor may have just made a mess out of your screen. This happens when
194it sends control codes for one kind of terminal to some other
195kind of terminal. In this case hit
196the keys \fB:q\fR (colon and the q key) and then hit the \s-2RETURN\s0 key.
197This should get you back to the command level interpreter.
198Figure out what you did wrong (ask someone else if necessary) and try again.
199 Another thing which can go wrong is that you typed the wrong file name and
200the editor just printed an error diagnostic. In this case you should
201follow the above procedure for getting out of the editor, and try again
202this time spelling the file name correctly.
203 If the editor doesn't seem to respond to the commands which you type
204here, try sending an interrupt to it by hitting the \s-2DEL\s0 or \s-2RUB\s0
205key on your terminal, and then hitting the \fB:q\fR command again followed
206by a carriage return.
207.sp
208.FE
209.NH 2
210The editor's copy: the buffer
211.PP
212The editor does not directly modify the file which you are editing.
213Rather, the editor makes a copy of this file, in a place called the
214.I buffer,
215and remembers the file's
216name. You do not affect the contents of the file unless and until you
217write the changes you make back into the original file.
218.NH 2
219Notational conventions
220.PP
221In our examples, input which must be typed as is will be presented in
222\fBbold face\fR. Text which should be replaced with appropriate input
223will be given in \fIitalics\fR. We will represent special characters
224in \s-2SMALL CAPITALS\s0.
225.NH 2
226Special characters: \s-2ESC\s0 and \s-2DEL\s0
227.PP
228Several of these special characters are very important, so be sure to
229find them right now. Look on your keyboard for a key labelled \s-2ESC\s0
230or \s-2ALT\s0. It should be near the upper left corner of your terminal.
231Try hitting this key a few times. The editor will ring the bell
232to indicate that it is in a quiescent state.\*(dd
233.FS
234\*(dd On smart terminals where it is possible, the editor will quietly
235flash the screen rather than ringing the bell.
236.FE
237Partially formed commands are cancelled by \s-2ESC\s0, and when you insert
238text in the file you end the text insertion
239with \s-2ESC\s0. This key is a fairly
240harmless one to hit, so you can just hit it if you don't know
241what is going on until the editor rings the bell.
242.PP
243Another very useful key is the \s-2DEL\s0 or \s-2RUB\s0 key, which generates
244an interrupt, telling the editor to stop what it is doing.
245It is a forceful way of making the editor listen
246to you, or to return it to the quiescent state if you don't know or don't
247like what is going on. Try hitting the `/' key on your terminal. This
248key is used when you want to specify a string to be searched for. The
249cursor should now be positioned at the bottom line of the terminal after
250a `/' printed as a prompt. You can get the cursor back to the current
251position by hitting the \s-2DEL\s0 or \s-2RUB\s0 key; try this now.*
252.FS
253* Backspacing over the `/' will also cancel the search.
254.FE
255From now on we will simply refer to hitting the \s-2DEL\s0 or \s-2RUB\s0
256key as ``sending an interrupt.''**
257.FS
258** On some systems, this interruptibility comes at a price: you cannot type
259ahead when the editor is computing with the cursor on the bottom line.
260.FE
261.PP
262The editor often echoes your commands on the last line of the terminal.
263If the cursor is on the first position of this last line, then the editor
264is performing a computation, such as computing a new position in the
265file after a search or running a command to reformat part of the buffer.
266When this is happening you can stop the editor by
267sending an interrupt.
268.NH 2
269Getting out of the editor
270.PP
271After you have worked with this introduction for a while, and you wish
272to do something else, you can give the command \fB:wq\fR\s-2ESC\s0
273to the editor.\*(dg
274.FS
275\*(dg All commands which read from the last display line can also be
276terminated with a \s-2RETURN\s0 as well as an \s-2ESC\s0.
277.FE
278This will write the contents of the editor's buffer back into
279the file you are editing, saving your changes, and then quitting from
280the editor. You can also end an editor
281session by giving the command \fB:q!\fR\s-2ESC\s0; this is a
282dangerous but occasionally essential
283command which ends the editor session and discards all your changes.
284You need to know about this command in case you change the editor's
285copy of a file you wish only to look at. Be very careful
286not to give this command when you really want to save
287the changes you have made.
288.NH 1
289Moving around in the file
290.NH 2
291Scrolling and paging
292.PP
293The editor has a number of commands for moving around in the file.
294The most useful of these is generated by hitting the control and D keys
295at the same time, a control-D or `^D'. We will use this two character
296notation for referring to these control keys from now on. You may have
297a key labelled `^' on your terminal. This key will be represented as `\(ua'
298in this document; `^' is exclusively used as part of the `^x' notation
299for control characters.\*(dd
300.FS
301\*(dd If you don't have a `^' key on your terminal
302then there is probably a key labelled `\(ua'; in any case these characters
303are one and the same.
304.FE
305.PP
306As you know now if you tried hitting \fB^D\fR, this command scrolls down in
307the file. The \fBD\fR thus stands for down. Many editor commands are mnemonic
308and this makes them much easier to remember. For instance the command
309to scroll up is \fB^U\fR. Many dumb terminals can't scroll up at all, in which
310case hitting \fB^U\fR clears the screen and refreshes it
311with a line which is farther back in the file at the top.
312.PP
313If you want to see more of the file below where you are, you can
314hit \fB^E\fR to expose one more line at the bottom of the screen,
315leaving the cursor where it is.
316The command \fB^Y\fR (which is hopelessly non-mnemonic, but next to \fB^U\fR
317on the keyboard) exposes one more line at the top of the screen.
318.PP
319There are other ways to move around in the file; the keys \fB^F\fR and \fB^B\fR
320move forward and backward a page, keeping
321a couple of lines of continuity
322between screens
323so that it is possible to read through a file using these rather than
324\fB^D\fR and \fB^U\fR if you wish.
325.PP
326Notice the difference between scrolling and paging. If you are trying
327to read the text in a file, hitting \fB^F\fR to move forward a page
328will leave you only a little context to look back at. Scrolling on the
329other hand leaves more context, and happens more smoothly. You can continue
330to read the text as scrolling is taking place.
331.NH 2
332Searching, goto, and previous context
333.PP
334Another way to position yourself in the file is by giving the editor a string
335to search for. Type the character \fB/\fR followed by a string of characters
336terminated by \s-2ESC\s0. The editor will position the cursor
337at the next occurrence of this string.
338Try hitting \fBn\fR to then go to the next occurrence of this string.
339The character \fB?\fR will search backwards from where you are, and is
340otherwise like \fB/\fR.\*(dg
341.FS
342\*(dg These searches will normally wrap around the end of the file, and thus
343find the string even if it is not on a line in the direction you search
344provided it is anywhere else in the file. You can disable this wraparound
345in scans by giving the command \fB:se nowrapscan\fR\s-2ESC\s0,
346or more briefly \fB:se nows\fR\s-2ESC\s0.
347.FE
348.PP
349If the search string you give the editor is not present in the
350file the editor will print
351a diagnostic on the last line of the screen, and the cursor will be returned
352to its initial position.
353.PP
354If you wish the search to match only at the beginning of a line, begin
355the search string with an \fB\(ua\fR. To match only at the end of
356a line, end the search string with a \fB$\fR.
357Thus \fB/\(uasearch\fR\s-2ESC\s0 will search for the word `search' at
358the beginning of a line, and \fB/last$\fR\s-2ESC\s0 searches for the
359word `last' at the end of a line.*
360.FS
361*Actually, the string you give to search for here can be a
362.I "regular expression"
363in the sense of the editors
364.IR ex (1)
365and
366.IR ed (1).
367If you don't wish to learn about this yet, you can disable this more
368general facility by doing
369\fB:se\ nomagic\fR\s-2ESC\s0;
370by putting this command in the file
371.I \&.exrc
372in your main directory, you can have this always be in effect (more
373about
374.I \&.exrc
375later.)
376.FE
377.PP
378The command \fBG\fR, when preceded by a number will position the cursor
379at that line in the file.
380Thus \fB1G\fR will move the cursor to
381the first line of the file. If you give \fBG\fR no count, then it moves
382to the end of the file.
383.PP
384If you are near the end of the file, and the last line is not at the bottom
385of the screen, the editor will place only the character `~' on each remaining
386line. This indicates that the last line in the file is on the screen;
387that is, the `~' lines are past the end of the file.
388.PP
389You can find out the state of the file you are editing by typing a \fB^G\fR.
390The editor will show you the name of the file you are editing, the number
391of the current line, the number of lines in the buffer, and the percentage
392of the way through the buffer which you are.
393Try doing this now, and remember the number of the line you are on.
394Give a \fBG\fR command to get to the end and then another \fBG\fR command
395to get back where you were.
396.PP
397You can also get back to a previous position by using the command
398\fB\(ga\(ga\fR (two back quotes).
399This is often more convenient than \fBG\fR because it requires no advance
400preparation.
401Try giving a \fBG\fR or a search with \fB/\fR or \fB?\fR and then a
402\fB\(ga\(ga\fR to get back to where you were. If you accidentally hit
403\fBn\fR or any command which moves you far away from a context of interest, you
404can quickly get back by hitting \fB\(ga\(ga\fR.
405.NH 2
406Moving around on the screen
407.PP
408Now try just moving the cursor around on the screen.
409Hit the \fB+\fR key. Each time you do, notice that the cursor
410advances to the next line in the file, at the first non-white position
411on the line. The \fB\-\fR key is like \fB+\fR but goes the other way.
412.PP
413These are very common keys for moving up and down lines in the file.
414Notice that if you go off the bottom or top with these keys then the
415screen will scroll down (and up if possible) to bring a line at a time
416into view. The \s-2RETURN\s0 key has the same effect as the \fB+\fR
417key.
418.PP
419.I Vi
420also has commands to take you to the top, middle and bottom of the screen.
421\fBH\fR will take you to the top (home) line on the screen.
422Try preceding it with a
423number as in \fB3H\fR.
424This will take you to the third line on the screen.
425Many
426.I vi
427commands take preceding numbers and do interesting things with them.
428Try \fBM\fR,
429which takes you to the middle line on the screen,
430and \fBL\fR,
431which takes you to the last line on the screen.
432\fBL\fR also takes counts, thus
433\fB5L\fR will take you to the fifth line from the bottom.
434.PP
435.I Vi
436also has commands which take you to the next or previous line in the
437same horizontal position (column) as the one you start in.
438Try \fB^N\fP to move to the next line in the same column,
439\fB^P\fP to move to the previous line in the same column.
440If you have arrow keys on your terminal, then these should work; try them.
441If not, you can use the \fBh\fR, \fBj\fR, \fBk\fR and \fBl\fR keys as though
442they were an arrow keypad: \fBh\fR moves backward, \fBj\fR moves down,
443\fBk\fR moves up, and \fBl\fR moves right. These are convenient because
444they are just under your right fingers.
445.NH 2
446Moving within a line
447.PP
448Now try picking a word on some line on the screen, not the
449first word on the line.
450move the cursor using \s-2RETURN\s0 and \fB\-\fR to be on the line where
451the word is.
452Try hitting the \fBw\fR key. This will advance the cursor to the
453next word on the line.
454Try hitting the \fBb\fR key to back up words
455in the line.
456Also try the \fBe\fR key which advances you to the end of the current
457word rather than to the beginning of the next word.
458Also try \s-2SPACE\s0 (the space bar) which moves right one character
459and the \s-2BS\s0 (backspace or \fB^H\fR) key which moves left one character.
460The key \fBh\fR works as \fB^H\fR does and is useful if you don't have
461a \s-2BS\s0 key.
462(Also, as noted just above, \fBl\fR will move to the right.)
463.PP
464If the line had punctuation in it you may have noticed that
465that the \fBw\fR and \fBb\fR
466keys stopped at each group of punctuation. You can also go back and
467forwards words without stopping at punctuation by using \fBW\fR and \fBB\fR
468rather than the lower case equivalents. Think of these as bigger words.
469Try these on a few lines with punctuation to see how they differ from
470the lower case \fBw\fR and \fBb\fR.
471.PP
472The word keys wrap around the end of line,
473rather than stopping at the end. Try moving to a word on a line below
474where you are by repeatedly hitting \fBw\fR.
475.NH 2
476Summary
477.IP
478.TS
479lw(.50i)b a.
480\fR\s-2SPACE\s0\fP advance the cursor one position
481^B backwards to previous page
482^D scrolls down in the file
483^E exposes another line at the bottom
484^F forward to next page
485^G tell what is going on
486^H backspace the cursor
487^N next line, same column
488^P previous line, same column
489^U scrolls up in the file
490^Y exposes another line at the top
491+ next line, at the beginning
492\- previous line, at the beginning
493/ scan for a following string forwards
494? scan backwards
495B back a word, ignoring punctuation
496G go to specified line, last default
497H home screen line
498M middle screen line
499L last screen line
500W forward a word, ignoring punctuation
501b back a word
502e end of current word
503n scan for next instance of \fB/\fR or \fB?\fR pattern
504w word after this word
505.TE
506.NH 1
507Making simple changes
508.NH 2
509Inserting
510.PP
511One of the most useful commands is the
512\fBi\fR (insert) command.
513After you type \fBi\fR, everything you type until you hit \s-2ESC\s0
514is inserted into the file.
515Try this now; position yourself to some word in the file and try inserting
516text before this word.
517If you are on an dumb terminal it will seem, for a minute,
518that some of the characters in your line have been overwritten, but they will
519reappear when you hit \s-2ESC\s0.
520.PP
521Now try finding a word which can, but does not, end in an `s'.
522Position yourself at this word and type \fBe\fR (move to end of word), then
523\fBa\fR for append and then `s\s-2ESC\s0' to terminate the textual insert.
524This sequence of commands can be used to easily pluralize a word.
525.PP
526Try inserting and appending a few times to make sure you understand how
527this works; \fBi\fR placing text to the left of the cursor, \fBa\fR to
528the right.
529.PP
530It is often the case that you want to add new lines to the file you are
531editing, before or after some specific line in the file. Find a line
532where this makes sense and then give the command \fBo\fR to create a
533new line after the line you are on, or the command \fBO\fR to create
534a new line before the line you are on. After you create a new line in
535this way, text you type up to an \s-2ESC\s0 is inserted on the new line.
536.PP
537Many related editor commands
538are invoked by the same letter key and differ only in that one is given
539by a lower
540case key and the other is given by
541an upper case key. In these cases, the
542upper case key often differs from the lower case key in its sense of
543direction, with
544the upper case key working backward and/or up, while the lower case
545key moves forward and/or down.
546.PP
547Whenever you are typing in text, you can give many lines of input or
548just a few characters.
549To type in more than one line of text,
550hit a \s-2RETURN\s0 at the middle of your input. A new line will be created
551for text, and you can continue to type. If you are on a slow
552and dumb terminal the editor may choose to wait to redraw the
553tail of the screen, and will let you type over the existing screen lines.
554This avoids the lengthy delay which would occur if the editor attempted
555to keep the tail of the screen always up to date. The tail of the screen will
556be fixed up, and the missing lines will reappear, when you hit \s-2ESC\s0.
557.PP
558While you are inserting new text, you can use the characters you normally use
559at the system command level (usually \fB^H\fR or \fB#\fR) to backspace
560over the last
561character which you typed, and the character which you use to kill input lines
562(usually \fB@\fR or \fB^X\fR) to erase the input you have typed on the
563current line.\*(dg
564.FS
565\*(dg In fact, the character \fB^H\fR (backspace) always works to erase the
566last input character here, regardless of what your erase character is.
567.FE
568The character \fB^W\fR
569will erase a whole word and leave you after the space after the previous
570word; it is useful for quickly backing up in an insert.
571.PP
572Notice that when you backspace during an insertion the characters you
573backspace over are not erased; the cursor moves backwards, and the characters
574remain on the display. This is often useful if you are planning to type
575in something similar. In any case the characters disappear when when
576you hit \s-2ESC\s0; if you want to get rid of them immediately, hit an
577\s-2ESC\s0 and then \fBa\fR again.
578.PP
579Notice also that you can't erase characters which you didn't insert, and that
580you can't backspace around the end of a line. If you need to back up
581to the previous line to make a correction, just hit \s-2ESC\s0 and move
582the cursor back to the previous line. After making the correction you
583can return to where you were and use the insert or append command again.
584.NH 2
585Making small corrections
586.PP
587You can make small corrections in existing text quite easily.
588Find a single character which is wrong or just pick any character.
589Get near the character with the word motion keys and then either
590backspace (hit the \s-2BS\s0 key or \fB^H\fR or even just \fBh\fR) or
591\s-2SPACE\s0 (using the space bar)
592until the cursor is on the character which is wrong.
593If the character is not needed then hit the \fBx\fP key; this deletes
594the character from the file. It is analogous to the way you \fBx\fP
595out characters when you make mistakes on a typewriter (except it's not
596as messy).
597.PP
598If the character
599is incorrect, you can replace it with the correct character by giving
600the command \fBr\fR\fIc\fR,
601where \fIc\fR is replaced by the correct character.
602Finally if the character which is incorrect should be replaced
603by more than one character, give the command \fBs\fR which substitutes
604a string of characters, ending with \s-2ESC\s0, for it.
605If there are a small number of characters
606which are wrong you can precede \fBs\fR with a count of the number of
607characters to be replaced. Counts are also useful with \fBx\fR to specify
608the number of characters to be deleted.
609.NH 2
610More corrections: operators
611.PP
612You already know almost enough to make changes at a higher level.
613All you need to know now is that the
614.B d
615key acts as a delete operator. Try the command
616.B dw
617to delete a word.
618Try hitting \fB.\fR a few times. Notice that this repeats the effect
619of the \fBdw\fR. The command \fB.\fR repeats the last command which
620made a change. You can remember it by analogy with an ellipsis `\fB...\fR'.
621.PP
622Now try
623\fBdb\fR.
624This deletes a word backwards, namely the preceding word.
625Try
626\fBd\fR\s-2SPACE\s0. This deletes a single character, and is equivalent
627to the \fBx\fR command.
628.PP
629Another very useful operator is
630.B c
631or change. The command
632.B cw
633thus changes the text of a single word.
634You follow it by the replacement text ending with an \s-2ESC\s0.
635Find a word which you can change to another, and try this
636now.
637Notice that the end of the text to be changed was marked with the character
638`$' so that you can see this as you are typing in the new material.
639.NH 2
640Operating on lines
641.PP
642It is often the case that you want to operate on lines.
643Find a line which you want to delete, and type
644\fBdd\fR,
645the
646.B d
647operator twice. This will delete the line.
648If you are on a dumb terminal, the editor may just erase the line on
649the screen, replacing it with a line with only an @ on it. This line
650does not correspond to any line in your file, but only acts as a place
651holder. It helps to avoid a lengthy redraw of the rest of the screen
652which would be necessary to close up the hole created by the deletion
653on a terminal without a delete line capability.
654.PP
655Try repeating the
656.B c
657operator twice; this will change a whole line, erasing its previous contents and
658replacing them with text you type up to an \s-2ESC\s0.\*(dg
659.FS
660\*(dg The command \fBS\fR is a convenient synonym for for \fBcc\fR, by
661analogy with \fBS\fR. Think of \fBS\fR as a substitute on lines, while
662\fBs\fR is a substitute on characters.
663.FE
664.PP
665You can delete or change more than one line by preceding the
666.B dd
667or
668.B cc
669with a count, i.e. \fB5dd\fR deletes 5 lines.
670You can also give a command like \fBdL\fR to delete all the lines upto
671and including
672the last line on the screen, or \fBd3L\fR to delete through the third from
673the bottom line. Try some commands like this now.*
674.FS
675* One subtle point here involves using the \fB/\fR search after a \fBd\fR.
676This will normally delete characters from the current position to the
677point of the match. If what is desired is to delete whole lines
678including the two points, give the pattern as \fB/pat/+0\fR, a line address.
679.FE
680Notice that the editor lets you know when you change a large number of
681lines so that you can see the extent of the change.
682The editor will also always tell you when a change you make affects text which
683you cannot see.
684.NH 2
685Undoing
686.PP
687Now suppose that the last change which you made was incorrect;
688you could use the insert, delete and append commands to put the correct
689material back. However, since it is often the case that we regret a
690change or make a change incorrectly, the editor provides a
691.B u
692(undo) command to reverse the last change which you made.
693Try this a few times, and give it twice in a row to notice that an
694.B u
695also undoes a
696.B u.
697.PP
698The undo command lets you reverse only a single change. After you make
699a number of changes to a line, you may decide that you would rather have
700the original state of the line back. The
701.B U
702command restores the current line to the state before you started changing
703it.
704.PP
705You can recover text which you delete, even if
706undo will not bring it back; see the section on recovering lost text
707below.
708.NH 2
709Summary
710.IP
711.TS
712lw(.50i)b a.
713\fR\s-2SPACE\s0\fP advance the cursor one position
714^H backspace the cursor
715^W erase a word during an insert
716\fRerase\fP your erase (usually ^H or #), erases a character during an insert
717\fRkill\fP your kill (usually @ or ^X), kills the insert on this line
718\&\fB.\fP repeats the changing command
719O opens and inputs new lines, above the current
720U undoes the changes you made to the current line
721a appends text after the cursor
722c changes the object you specify to the following text
723d deletes the object you specify
724i inserts text before the cursor
725o opens and inputs new lines, below the current
726u undoes the last change
727.TE
728.NH 1
729Moving about; rearranging and duplicating text
730.NH 2
731Low level character motions
732.PP
733Now move the cursor to a line where there is a punctuation or a bracketing
734character such as a parenthesis or a comma or period. Try the command
735\fBf\fR\fIx\fR where \fIx\fR is this character. This command finds
736the next \fIx\fR character to the right of the cursor in the current
737line. Try then hitting a \fB;\fR, which finds the next instance of the
738same character. By using the \fBf\fR command and then a sequence of
739\fB;\fR's you can often
740get to a particular place in a line much faster than with a sequence
741of word motions or \s-2SPACE\s0s.
742There is also a \fBF\fR command, which is like \fBf\fR, but searches
743backward. The \fB;\fR command repeats \fBF\fR also.
744.PP
745When you are operating on the text in a line it is often desirable to
746deal with the characters up to, but not including, the first instance of
747a character. Try \fBdf\fR\fIx\fR for some \fIx\fR now and
748notice that the \fIx\fR character is deleted. Undo this with \fBu\fR
749and then try \fBdt\fR\fIx\fR; the \fBt\fR here stands for to, i.e.
750delete up to the next \fIx\fR, but not the \fIx\fR. The command \fBT\fR
751is the reverse of \fBt\fR.
752.PP
753When working with the text of a single line, an \fB\(ua\fR moves the
754cursor to the first non-white position on the line, and a
755\fB$\fR moves it to the end of the line. Thus \fB$a\fR will append new
756text at the end of the current line.
757.PP
758Your file may have tab (\fB^I\fR) characters in it. These
759characters are represented as a number of spaces expanding to a tab stop,
760where tab stops are every 8 positions.*
761.FS
762* This is settable by a command of the form \fB:se ts=\fR\fIx\fR\s-2ESC\s0,
763where \fIx\fR is 4 to set tabstops every four columns. This has
764effect on the screen representation within the editor.
765.FE
766When the cursor is at a tab, it sits on the last of the several spaces
767which represent that tab. Try moving the cursor back and forth over
768tabs so you understand how this works.
769.PP
770On rare occasions, your file may have nonprinting characters in it.
771These characters are displayed in the same way they are represented in
772this document, that is with a two character code, the first character
773of which is `^'. On the screen non-printing characters resemble a `^'
774character adjacent to another, but spacing or backspacing over the character
775will reveal that the two characters are, like the spaces representing
776a tab character, a single character.
777.PP
778The editor normally discards control characters if you attempt to insert
779them in your file. You can get a control character in the file by beginning
780an insert and then typing a \fB^Q\fR (or a \fB^V\fR) before the control
781character. The
782\fB^Q\fR (or \fB^V\fR) quotes the following character, causing it to be
783inserted directly into the file.
784.PP
785.NH 2
786Higher level text objects
787.PP
788In working with a document it is often advantageous to work in terms
789of sentences, paragraphs, and sections. The operations \fB(\fR and \fB)\fR
790move to the beginning of the previous and next sentences respectively.
791Thus the command \fBd)\fR will delete the rest of the current sentence;
792likewise \fBd(\fR will delete the previous sentence if you are at the
793beginning of the current sentence, or the current sentence up to where
794you are if you are not at the beginning of the current sentence.
795.PP
796A sentence is defined to end at a `.', `!' or `?' which is followed by
797either the end of a line, or by two spaces. Any number of closing `)',
798`]', `"' and `\(aa' characters may appear after the `.', `!' or `?' before
799the spaces or end of line.
800.PP
801The operations \fB{\fR and \fB}\fR move over paragraphs and the operations
802\fB[[\fR and \fB]]\fR move over sections.\*(dg
803.FS
804\*(dg The \fB[[\fR and \fB]]\fR operations
805require the operation character to be doubled because they can move the
806cursor far from where it currently is. While it is easy to get back
807with the command \fB\(ga\(ga\fP.
808these would be frustrating if it was easy to hit them accidentally.
809.FE
810.PP
811A paragraph begins after each empty line, and also
812at each of a set of paragraph macros, specified by the pairs of characters
813in the definition of the string valued option \fIparagraphs\fR.
814The default setting for this option defines the paragraph macros of the
815\fI\-ms\fR and \fI\-mm\fR macro packages, i.e. the `.IP', `.LP', `.PP'
816and `.QP', `.P' and `.LI' macros.\*(dd
817.FS
818\*(dd You can easily change or extend this set of macros by assigning a
819different string to the \fIparagraphs\fR option in your `.exrc' file.
820See section 6.2 for details.
821The `.bp' directive is also considered to start a paragraph.
822.FE
823Each paragraph boundary is also a sentence boundary. The sentence
824and paragraph commands can
825be given counts to operate over groups of sentences and paragraphs.
826.PP
827Sections in the editor begin after each macro in the \fIsections\fR option,
828normally `.NH', `.SH', `.H' and `.HU', and each line with a formfeed \fB^L\fR
829in the first column.
830Section boundaries are always line and paragraph boundaries also.
831.PP
832Try experimenting with the sentence and paragraph commands until you are
833sure how they work. If you have a large document, try looking through
834it using the section commands.
835The section commands interpret a preceding count as a different window size in
836which to redraw the screen at the new location, and this window size
837is the base size for newly drawn windows until another size is specified.
838This is very useful
839if you are on a slow terminal and are looking for a particular section.
840You can give the first section command a small count to then see each successive
841section heading in a small window.
842.NH 2
843Rearranging and duplicating text
844.PP
845The editor has a single unnamed buffer where the last deleted or
846changed away text is saved, and a set of named buffers \fBa\fR\-\fBz\fR
847which you can use to save copies of text and to move text around in
848your file and between files.
849.PP
850The operator
851.B y
852yanks a copy of the object which follows into the unnamed buffer.
853If preceded by a buffer name, \fB"\fR\fIx\fR\|\fBy\fR, where
854\fIx\fR here is replaced by a letter \fBa\-z\fR, it places the text in the named
855buffer. The text can then be put back in the file with the commands
856.B p
857and
858.B P;
859\fBp\fR puts the text after or below the cursor, while \fBP\fR puts the text
860before or above the cursor.
861.PP
862If the text which you
863yank forms a part of a line, or is an object such as a sentence which
864partially spans more than one line, then when you put the text back,
865it will be placed after the cursor (or before if you
866use \fBP\fR). If the yanked text forms whole lines, they will be put
867back as whole lines, without changing the current line. In this case,
868the put acts much like a \fBo\fR or \fBO\fR command.
869.PP
870Try the command \fBYP\fR. This makes a copy of the current line and
871leaves you on this copy, which is placed before the current line.
872The command \fBY\fR is a convenient abbreviation for \fByy\fR.
873The command \fBYp\fR will also make a copy of the current line, and place
874it after the current line. You can give \fBY\fR a count of lines to
875yank, and thus duplicate several lines; try \fB3YP\fR.
876.PP
877To move text within the buffer, you need to delete it in one place, and
878put it back in another. You can precede a delete operation by the
879name of a buffer in which the text is to be stored as in \fB"a5dd\fR
880deleting 5 lines into the named buffer \fIa\fR. You can then move the
881cursor to the eventual resting place of the these lines and do a \fB"ap\fR
882or \fB"aP\fR to put them back.
883In fact, you can switch and edit another file before you put the lines
884back, by giving a command of the form \fB:e \fR\fIname\fR\s-2ESC\s0 where
885\fIname\fR is the name of the other file you want to edit. You will
886have to write back the contents of the current editor buffer (or discard
887them) if you have made changes before the editor will let you switch
888to the other file.
889.NH 2
890Summary.
891.IP
892.TS
893lw(.50i)b a.
894\(ua first non-white on line
895$ end of line
896) forward sentence
897} forward paragraph
898]] forward section
899( backward sentence
900{ backward paragraph
901[[ backward section
902f\fIx\fR find \fIx\fR forward in line
903p put text back, after cursor or below current line
904y yank operator, for copies and moves
905t\fIx\fR upto \fIx\fR forward, for operators
906F\fIx\fR f backward in line
907P put text back, before cursor or above current line
908T\fIx\fR t backward in line
909.TE
910.NH 1
911High level commands
912.NH 2
913Writing, quitting, editing new files
914.PP
915So far we have seen how to enter
916.I vi
917and to write out our file using either
918\fB:wq\fR\s-2ESC\s0 or \fB:w\fR\s-2ESC\s0. The first writes and quits from
919the editor, the second writes and stays in the editor.
920.PP
921If you have changed the editor's copy of the file but do not wish to
922save your changes, either because you messed up the file or decided that the
923changes are not an improvement to the file, then you can give the command
924\fB:q!\fR\s-2ESC\s0 to quit from the editor without writing the changes.
925You can also reedit the same file (starting over) by giving the command
926\fB:e!\fR\s-2ESC\s0. These commands should be used only rarely, and with
927caution, as it is not possible to recover the changes you have made after
928you discard them in this manner.
929.PP
930You can edit a different file without leaving the editor by giving the
931command \fB:e\fR\ \fIname\fR\s-2ESC\s0. If you have not written out
932your file before you try to do this, then the editor will tell you this,
933and delay editing the other file. You can then give the command
934\fB:w\fR\s-2ESC\s0 to save your work and then the \fB:e\fR\ \fIname\fR\s-2ESC\s0
935command again, or carefully give the command \fB:e!\fR\ \fIname\fR\s-2ESC\s0,
936which edits the other file discarding the changes you have made to the
937current file.
938.NH 2
939Escaping to a shell
940.PP
941You can get to a shell to execute a single command by giving a
942.I vi
943command of the form \fB:!\fIcmd\fR\s-2ESC\s0.
944The system will run the single command
945.I cmd
946and when the command finishes, the editor will ask you to hit a \s-2RETURN\s0
947to continue. When you have finished looking at the output on the screen,
948you should hit \s-2RETURN\s0 and the editor will clear the screen and
949redraw it. You can then continue editing.
950You can also give another \fB:\fR command when it asks you for a \s-2RETURN\s0;
951in this case the screen will not be redrawn.
952.PP
953If you wish to execute more than one command in the shell, then you can
954give the command \fB:sh\fR\s-2ESC\s0.
955This will give you a new shell, and when you finish with the shell, ending
956it by typing a \fB^D\fR, the editor will clear the screen and continue.
957.NH 2
958Marking and returning
959.PP
960The command \fB\(ga\(ga\fR returned to the previous place
961after a motion of the cursor by a command such as \fB/\fR, \fB?\fR or
962\fBG\fR. You can also mark lines in the file with single letter tags
963and return to these marks later by naming the tags. Try marking the
964current line with the command \fBm\fR\fIx\fR, where you should pick some
965letter for \fIx\fR, say `a'. Then move the cursor to a different line
966(any way you like) and hit \fB\(gaa\fR. The cursor will return to the
967place which you marked.
968Marks last only until you edit another file.
969.PP
970When using operators such as
971.B d
972and referring to marked lines, it is often desirable to delete whole lines
973rather than deleting to the exact position in the line marked by \fBm\fR.
974In this case you can use the form \fB\(aa\fR\fIx\fR rather than
975\fB\(ga\fR\fIx\fR. Used without an operator, \fB\(aa\fR\fIx\fR will move to
976the first non-white character of the marked line; similarly \fB\(aa\(aa\fR
977moves to the first non-white character of the line containing the previous
978context mark \fB\(ga\(ga\fR.
979.NH 2
980Adjusting the screen
981.PP
982If the screen image is messed up because of a transmission error to your
983terminal, or because some program other than the editor wrote output
984to your terminal, you can hit a \fB^L\fR, the \s-2ASCII\s0 form-feed
985character, to cause the screen to be refreshed.
986.PP
987On a dumb terminal, if there are @ lines in the middle of the screen
988as a result of line deletion, you may get rid of these lines by typing
989\fB^R\fR to cause the editor to retype the screen, closing up these holes.
990.PP
991Finally, if you wish to place a certain line on the screen at the top
992middle or bottom of the screen, you can position the cursor to that line,
993and then give a \fBz\fR command.
994You should follow the \fBz\fR command with a \s-2RETURN\s0 if you want
995the line to appear at the top of the window, a \fB.\fR if you want it
996at the center, or a \fB\-\fR if you want it at the bottom.
997.NH 1
998Special topics
999.NH 2
1000Editing on slow terminals
1001.PP
1002When you are on a slow terminal, it is important to limit the amount
1003of output which is generated to your screen so that you will not suffer
1004long delays, waiting for the screen to be refreshed. We have already
1005pointed out how the editor optimizes the updating of the screen during
1006insertions on dumb terminals to limit the delays, and how the editor erases
1007lines to @ when they are deleted on dumb terminals.
1008.PP
1009The use of the slow terminal insertion mode is controlled by the
1010.I slowopen
1011option. You can force the editor to use this mode even on faster terminals
1012by giving the command \fB:se slow\fR\s-2ESC\s0. If your system is sluggish
1013this helps lessen the amount of output coming to your terminal.
1014You can disable this option by \fB:se noslow\fR\s-2ESC\s0.
1015.PP
1016The editor can simulate an intelligent terminal on a dumb one. Try
1017giving the command \fB:se redraw\fR\s-2ESC\s0. This simulation generates
1018a great deal of output and is generally tolerable only on lightly loaded
1019systems and fast terminals. You can disable this by giving the command
1020 \fB:se noredraw\fR\s-2ESC\s0.
1021.PP
1022The editor also makes editing more pleasant at low speed by starting
1023editing in a small window, and letting the window expand as you edit.
1024This works particularly well on intelligent terminals. The editor can
1025expand the window easily when you insert in the middle of the screen
1026on these terminals. If possible, try the editor on an intelligent terminal
1027to see how this works.
1028.PP
1029You can control the size of the window which is redrawn each time the
1030screen is cleared by giving window sizes as argument to the commands
1031which cause large screen motions:
1032.DS
1033.B ": / ? [[ ]] ^F ^B \(ga \(aa"
1034.DE
1035Thus if you are searching for a particular instance of a common string
1036in a file you can precede the first search command by a small number,
1037say 3, and the editor will draw three line windows around each instance
1038of the string which it locates.
1039.PP
1040You can easily expand or contract the window, placing the current line
1041as you choose, by giving a number on a \fBz\fR command, after the \fBz\fR
1042and before the following \s-2RETURN\s0, \fB.\fR or \fB\-\fR. Thus the
1043command \fBz5.\fR redraws the screen with the current line in the center
1044of a five line window.\*(dg
1045.FS
1046\*(dg Note that the command \fB5z.\fR has an entirely different effect,
1047placing line 5 in the center of a new window.
1048.FE
1049.PP
1050If the editor is redrawing or otherwise updating large portions of the
1051display, you can interrupt this updating by hitting a \s-2DEL\s0 or \s-2RUB\s0
1052as usual. If you do this you may partially confuse the editor about
1053what is displayed on the screen. You can still edit the text on
1054the screen if you wish; clear up the confusion
1055by hitting a \fB^L\fR; or move or search again, ignoring the
1056current state of the display.
1057.PP
1058See section 7.8 on \fIopen\fR mode for another way to use the
1059.I vi
1060command set on slow terminals.
1061.NH 2
1062Options, set, and editor startup files
1063.PP
1064The editor has a set of options, some of which have been mentioned above.
1065The most useful options are given in the following table.
1066.KF
1067.TS
1068lb lb lb lb
1069l l l a.
1070Name Default Description
1071_
1072autoindent noai Supply indentation automatically
1073autowrite noaw Automatic write before \fB:n\fR, \fB:ta\fR, \fB^\(ua\fR, \fB!\fR
1074beautify bf Discard nonprinting characters in inserts
1075ignorecase noic Ignore case in searching
1076lisp nolisp \fB( { ) }\fR commands deal with S-expressions
1077list nolist Tabs print as ^I; end of lines marked with $
1078magic nomagic The characters . [ and * are special in scans
1079number nonu Lines are displayed prefixed with line numbers
1080paragraphs para=IPLPPPQPbpP LI Macro names which start paragraphs
1081redraw nore Simulate a smart terminal on a dumb one
1082sections sect=NHSHH HU Macro names which start new sections
1083shiftwidth sw=8 Shift distance for <, > and input \fB^D\fP and \fB^T\fR
1084showmatch nosm Show matching \fB(\fP or \fB{\fP as \fB)\fP or \fB}\fR is typed
1085slowopen slow Postpone display updates during inserts
1086wrapscan ws Search around end of buffer if string not found
1087wrapmargin wm=0 Split lines automatically at space near right margin
1088.TE
1089.KE
1090.PP
1091The options are of three kinds: numeric options, string options, and
1092toggle options. You can set numeric and string options by a statement
1093of the form
1094.DS
1095\fBset\fR \fIopt\fR\fB=\fR\fIval\fR
1096.DE
1097and toggle options can be set or unset by statements of one of the forms
1098.DS
1099\fBset\fR \fIopt\fR
1100\fBset\fR \fBno\fR\fIopt\fR
1101.DE
1102These statements can be placed in a file `.exrc' in your \s-2HOME\s0
1103directory, or given while you are running
1104.I vi
1105by preceding them with a \fB:\fR and following them with a \s-2ESC\s0.
1106.PP
1107You can get a list of all options which you have changed by the
1108command \fB:set\fR\s-2ESC\s0, or the value of a single option by the
1109command \fB:set\fR \fIopt\fR\fB?\fR\s-2ESC\s0.
1110.NH 2
1111Recovering lost lines
1112.PP
1113You might have a serious problem if you delete a number of lines and then
1114regret that they were deleted. Despair not, the editor saves the last
11159 deleted blocks of text in a set of numbered registers 1\-9.
1116You can get the \fIn\fR'th previous deleted text back in your file by
1117the command
1118"\fR\fIn\fR\|\fBp\fR.
1119The "\fR here says that a buffer name is to follow,
1120\fIn\fR is the number of the buffer you wish to try
1121(use the number 1 for now),
1122and
1123.B p
1124is the put command, which puts text in the buffer after the cursor.
1125If this doesn't bring back the text you wanted, hit
1126.B u
1127to undo this and then
1128\fB\&.\fR
1129(period)
1130to repeat the put command.
1131In general the
1132\fB\&.\fR
1133command will repeat the last change you made.
1134As a special case, when the last command refers to a numbered text buffer,
1135the \fB.\fR command increments the number of the buffer before repeating
1136the command. Thus a sequence of the form
1137.DS
1138\fB"1pu.u.u.\fR
1139.DE
1140will, if repeated long enough, show you all the deleted text which has
1141been saved for you.
1142You can omit the
1143.B u
1144commands here to gather up all this text in the buffer, or stop after any
1145\fB\&.\fR command to keep just the then recovered text.
1146The command
1147.B P
1148can also be used rather than
1149.B p
1150to put the recovered text before rather than after the cursor.
1151.NH 2
1152Recovering lost files
1153.PP
1154If the system crashes, you can recover the work you were doing
1155to within a few changes. You will normally receive mail when you next
1156login giving you the name of the file which has been saved for you.
1157You should then change to the directory where you were when the system
1158crashed and give a command of the form:
1159.DS
1160% \fBvi \-r\fR \fIname\fR
1161.DE
1162replacing \fIname\fR with the name of the file which you were editing.
1163This will recover your work to a point near where you left off.\*(dg
1164.FS
1165\*(dg In rare cases, some of the lines of the file may be lost. The
1166editor will give you the numbers of these lines and the text of the lines
1167will be replaced by the string `LOST'. These lines will almost always
1168be among the last few which you changed. You can either choose to discard
1169the changes which you made (if they are easy to remake) or to replace
1170the few lost lines by hand.
1171.FE
1172.PP
1173You can get a listing of the files which are saved for you by giving
1174the command:
1175.DS
1176% \fBvi \-r\fR
1177.DE
1178If there is more than one instance of a particular file saved, the editor
1179gives you the newest instance each time you recover it. You can thus
1180get an older saved copy back by first recovering the newer copies.
1181.NH 2
1182Continuous text input
1183.PP
1184When you are typing in large amounts of text it is convenient to have
1185lines broken near the right margin automatically. You can cause this
1186to happen by giving the command
1187\fB:se wm=12\fR\s-2ESC\s0.
1188This establishes the last 12 columns of your screen as a margin in which
1189a space which you input in text will automatically force a line break.
1190.PP
1191If the editor breaks a input line and you wish to put it back together
1192you can tell it to join the lines with \fBJ\fR. You can give \fBJ\fR
1193a count of the number of lines to be joined as in \fB3J\fR to join 3
1194lines. The editor supplies white space, if appropriate,
1195at the juncture of the joined
1196lines, and leaves the cursor at this white space.
1197You can kill the white space with \fBx\fR if you don't want it.
1198.NH 2
1199Features for editing programs
1200.PP
1201The editor has a number of commands for editing programs.
1202The thing that most distinguishes editing of programs from editing of text
1203is the desirability of maintaining an indented structure to the body of
1204the program. The editor has a
1205.I autoindent
1206facility for helping you generate correctly indented programs.
1207.PP
1208To enable this facility you can give the command \fB:se ai\fR\s-2ESC\s0.
1209Now try opening a new line with \fBo\fR and type some characters on the
1210line after a few tabs. If you now start another line, notice that the
1211editor supplies white space at the beginning of the line to line it up
1212with the previous line. You cannot backspace over this indentation,
1213but you can use \fB^D\fR key to backtab over the supplied indentation.
1214.PP
1215Each time you type \fB^D\fR you back up one position, normally to an
12168 column boundary. This amount is settable; the editor has an option
1217called
1218.I shiftwidth
1219which you can set to change this value.
1220Try giving the command \fB:se sw=4\fR\s-2ESC\s0
1221and then experimenting with autoindent again.
1222.PP
1223The character \fB^T\fR acts as a forward tab, much like the \s-2TAB\s0
1224(\fB^I\fR) character does, except it aligns to the next \fIshiftwidth\fR
1225boundary. If you have set \fIsw\fR to 4, try creating a new
1226line and hitting a few \fB^T\fR's to see how this works. This is useful
1227if your indenting style does not use a full physical tab stop at each level of
1228logical indentation of the program.
1229.PP
1230For shifting lines in the program left and right, there are operators
1231.B <
1232and
1233.B >.
1234These shift the lines you specify right or left by one
1235.I shiftwidth.
1236Try
1237.B <<
1238and
1239.B >>
1240which shift one line left or right, and
1241.B <L
1242and
1243.B >L
1244shifting the rest of the display left and right.
1245.PP
1246If you have a complicated expression and wish to see how the parentheses
1247match, put the cursor at a left or right parenthesis and hit \fB%\fR.
1248This will show you the matching parenthesis.
1249This works also for braces { and }.
1250.PP
1251If you are editing C programs, you can use the \fB[[\fR and \fB]]\fR keys
1252to advance or retreat to a line starting with a \fB{\fR, i.e. a function
1253declaration at a time. When \fB]]\fR is used with an operator it stops
1254after a line which starts with \fB}\fR; this is sometimes useful with
1255\fBy]]\fR.
1256.NH 2
1257Filtering portions of the buffer
1258.PP
1259You can run system commands over portions of the buffer using the operator
1260\fB!\fR.
1261You can use this to sort lines in the buffer, or to reformat portions
1262of the buffer with a pretty-printer.
1263Try typing in a list of random words, one per line and ending them
1264with a blank line. Back up to the beginning of the list, and then give
1265the command \fB!}sort\fR\s-2ESC\s0. This says to sort the next paragraph
1266of material, and the blank line ends a paragraph.
1267.NH 2
1268Commands for editing \s-2LISP\s0
1269.PP
1270If you are editing a \s-2LISP\s0 program you should set the option
1271.I lisp
1272by doing
1273\fB:se\ lisp\fR\s-2ESC\s0.
1274This changes the \fB(\fR and \fB)\fR commands to move backward and forward
1275over s-expressions.
1276The \fB{\fR and \fB}\fR commands are like \fB(\fR and \fB)\fR but don't
1277stop at atoms. These can be used to skip to the next list, or through
1278a comment quickly.
1279.PP
1280The
1281.I autoindent
1282option works differently for \s-2LISP\s0, supplying indent to align at
1283the first argument to the last open list. If there is no such argument
1284then the indent is two spaces more than the last level.
1285.PP
1286There is another option which is useful for typing in \s-2LISP\s0, the
1287.I showmatch
1288option.
1289Try setting it with
1290\fB:se sm\fR\s-2ESC\s0
1291and then try typing a `(' some words and then a `)'. Notice that the
1292cursor shows the position of the `(' which matches the `)' briefly.
1293This happens only if the matching `(' is on the screen, and the cursor
1294stays there for at most one second.
1295.PP
1296The editor also has an operator to realign existing lines as though they
1297had been typed in with
1298.I lisp
1299and
1300.I autoindent
1301set. This is the \fB=\fR operator.
1302Try the command \fB=%\fR at the beginning of a function. This will realign
1303all the lines of the function declaration.
1304.PP
1305When you are editing \s-2LISP\s0,, the \fB[[\fR and \fR]]\fR advance
1306and retreat to lines beginning with a \fB(\fR, and are useful for dealing
1307with entire function definitions.
1308.NH 2
1309Macros
1310.PP
1311.I Vi
1312has a parameterless macro facility, which lets you set it up so that
1313when you hit a single keystroke, the editor will act as though
1314you had hit some longer sequence of keys. You can set this up if
1315you find yourself typing the same sequence of commands repeatedly.
1316.PP
1317Briefly, there are two flavors of macros:
1318.IP a)
1319Ones where you put the macro body in a buffer register, say \fIx\fR.
1320You can then type \fB@x\fR to invoke the macro. The \fB@\fR may be followed
1321by another \fB@\fR to repeat the macro.
1322.IP b)
1323You can use the
1324.I map
1325command from
1326.I vi
1327(typically in the
1328.I \&.exrc
1329start-up file in your home directory) with a command of the form:
1330.DS
1331map \fIlhs\fR \fIrhs\fR
1332.DE
1333mapping
1334.I lhs
1335into
1336.I rhs.
1337There are restrictions:
1338.I lhs
1339should be one keystroke (either 1 character or one function key)
1340since it must be entered within one second. The
1341.I lhs
1342can be no longer than 10 characters, the
1343.I rhs
1344no longer than 100.
1345To get a space, tab or newline into
1346.I lhs
1347or
1348.I rhs
1349you should escape them with a \fB^V\fR or \fB^Q\fR.
1350(It may be necessary to double the \fB^V\fR or \fB^Q\fR if the map
1351command is given inside
1352.I vi,
1353rather than in
1354.I ex.)
1355Spaces and tabs inside the
1356.I rhs
1357need not be escaped.
1358.PP
1359Thus to make the \fBQ\fR key write and exit the editor, you can give
1360the command
1361.DS
1362:map Q :wq^V\s-2CR\s0
1363.DE
1364which means that whenever you type \fBQ\fR, it will be as though you
1365had typed the four characters \fB:wq\fR\s-2CR\s0.
1366The \fB^V\fR is needed because without it the \s-2CR\s0 would end the
1367\fB:\fR command, rather than becoming part of the
1368.I map
1369definition.
1370Macros can be deleted with
1371.DS
1372unmap lhs
1373.DE
1374.PP
1375If the
1376.I lhs
1377of a macro is ``#0'' through ``#9'', this maps the particular function key
1378instead of the 2 character ``#'' sequence. So that terminals without
1379function keys can access such definitions, the form ``#x'' will mean function
1380key
1381.I x
1382on all terminals (and need not be typed within one second.)
1383The character ``#'' can be changed by using a macro in the usual way:
1384.DS
1385map ^V^I #
1386.DE
1387to use tab, for example. (This won't affect the
1388.I map
1389command, which still uses
1390.B #,
1391but just the invocation from visual mode.
1392.PP
1393The undo command reverses an entire macro call as a unit.
1394.NH 2
1395Abbreviations
1396.PP
1397The editor has a number of short
1398commands which abbreviate longer commands which we
1399have introduced here. You can find these commands easily
1400on the quick reference card.
1401They often save a bit of typing and you can learn them as convenient.
1402.NH 1
1403Nitty-gritty details
1404.NH 2
1405Line representation in the display
1406.PP
1407The editor folds long logical lines onto many physical lines in the display.
1408Commands which advance display lines advance logical lines and will skip
1409over all the segments of a line in one motion. The command \fB|\fR moves
1410the cursor to a specific column, and may be useful for getting near the
1411middle of a long line to split it in half. Try \fB80|\fR on a line which
1412is more than 80 columns long.\*(dg
1413.FS
1414\*(dg You can make long lines very easily by using \fBJ\fR to join together
1415short lines.
1416.FE
1417.PP
1418The editor only puts full lines on the display; if there is not enough
1419room on the display to fit a logical line, the editor leaves the physical
1420lines empty, placing only an @ on the line as a place holder. When you
1421delete lines on a dumb terminal, the editor will often just clear the
1422lines to @ to save time (rather than rewriting the rest of the screen.)
1423You can always maximize the information on the screen by giving the \fB^R\fR
1424command.
1425.PP
1426If you wish, you can have the editor place line numbers before each line
1427on the display. Give the command \fB:se nu\fR\s-2ESC\s0 to enable
1428this, and the command \fB:se nonu\fR\s-2ESC\s0 to turn it off.
1429You can have tabs represented as \fB^I\fR and the ends of lines indicated
1430with `$' by giving the command \fB:se list\fR\s-2ESC\s0;
1431\fB:se nolist\fR\s-2ESC\s0 turns this off.
1432.PP
1433Finally, lines consisting of only the character `~' are displayed when
1434the last line in the file is in the middle of the screen. These represent
1435physical lines which are past the logical end of file.
1436.NH 2
1437Counts
1438.PP
1439Most
1440.I vi
1441commands will use a preceding count to affect their behavior in some way.
1442The following table gives the common ways in which the counts are used:
1443.DS
1444.TS
1445l lb.
1446new window size : / ? [[ ]] ^F ^B \` \'
1447scroll amount ^D ^U
1448line/column number z G |
1449replicate insert a i A I
1450repeat effect \fRmost of the rest\fP
1451.TE
1452.DE
1453.PP
1454The editor maintains a notion of the current default window size.
1455On terminals which run at speeds greater than 1200 baud (faster than 120
1456characters per second) the editor uses the full terminal screen. On terminals
1457which are no faster than 1200 baud (dialup lines are in this group)
1458the editor uses half of the screen as the default window size.
1459.PP
1460This size is the size used when the editor clears and refills the screen
1461after a search or other motion moves far from the edge of the current window.
1462The commands which take a new window size as count all often cause the
1463screen to be redrawn. If you anticipate this, but do not need as large
1464a window as you are currently using, you may wish to change the screen
1465size by specifying the new size before these commands.
1466In any case, the number of lines used on the screen will expand if you
1467move off the top with a \fB\-\fR or similar command or off the bottom
1468with a command such as \s-2RETURN\s0 or \fB^D\fR.
1469The window will revert to the last specified size the next time it is
1470cleared and refilled.\*(dg
1471.FS
1472\*(dg But not by a \fB^L\fR which just redraws the screen as it is.
1473.FE
1474.PP
1475The scroll commands \fB^D\fR and \fB^U\fR likewise remember the amount
1476of scroll last specified, using half the basic window size initially.
1477The simple insert commands use a count to specify a repetition of the
1478inserted text. Thus \fB10a+\-\-\-\-\fR\s-2ESC\s0 will insert a grid-like
1479string of text.
1480A few commands also use a preceding count as a line or column number.
1481.PP
1482Except for a few commands which ignore any counts (such as \fB^R\fR),
1483the rest of the editor commands use a count to indicate a simple repetition
1484of their effect. Thus \fB5w\fR advances five words on the current line,
1485while \fB5\fR\s-2RETURN\s0 advances five lines. A very useful instance
1486of a count as a repetition is a count given to the \fB.\fR command, which
1487repeats the last changing command. If you do \fBdw\fR and then \fB3.\fR,
1488you will delete first one and then three words. You can then delete
1489two more words with \fB2.\fR.
1490.NH 2
1491More file manipulation commands
1492.PP
1493The following table lists the file manipulation commands which you can
1494use when you are in
1495.I vi.
1496.KF
1497.DS
1498.TS
1499lb l.
1500:w write back changes
1501:wq write and quit
1502:q quit
1503:q! quit, discarding changes
1504:e \fIname\fP edit file \fIname\fR
1505:e! reedit, discarding changes
1506:e + \fIname\fP edit, starting at end
1507:e +\fIn\fP edit, starting at line \fIn\fP
1508:e # edit alternate file
1509:w \fIname\fP write file \fIname\fP
1510:w! \fIname\fP overwrite file \fIname\fP
1511:\fIx,y\fPw \fIname\fP write lines \fIx\fP through \fIy\fP to \fIname\fP
1512:r \fIname\fP read file \fIname\fP into buffer
1513:r !\fIcmd\fP read output of \fIcmd\fP into buffer
1514:n edit next file in argument list
1515:n! edit next file, discarding changes to current
1516:n \fIargs\fP specify new argument list
1517:ta \fItag\fP edit file containing tag \fItag\fP, at \fItag\fP
1518.TE
1519.DE
1520.KE
1521All of these commands are given followed by an \s-2ESC\s0 or \s-2RETURN\s0.
1522The most basic commands are \fB:w\fR, \fB:wq\fR, \fB:q\fR and \fB:e\fR.
1523A normal editing session on a single file will end with a \fB:wq\fR command.
1524If you are editing for a long period of time you can give \fB:w\fR commands
1525occasionally after major amounts of editing, and then finish
1526with a \fB:wq\fR. When you edit more than one file, you can finish
1527with one with a \fB:w\fR and start editing a new file by giving a \fB:e\fR
1528command.
1529.PP
1530If you make changes to the editor's copy of a file, but do not wish to
1531write them back, then you must give an \fB!\fR after the command you
1532would otherwise use; this forces the editor to discard any changes
1533you have made. Use this carefully.
1534.PP
1535The \fB:e\fR command can be given a \fB+\fR argument to start at the
1536end of the file, or a \fB+\fR\fIn\fR argument to start at line \fIn\fR\^.
1537In actuality, \fIn\fR may be any editor command not containing a space,
1538usefully a scan like \fB+/\fIpat\fR or \fB+?\fIpat\fR.
1539In forming new names to the \fBe\fR command, you can use the character
1540\fB%\fR which is replaced by the current file name, or the character
1541\fB#\fR which is replaced by the alternate file name.
1542The alternate file name is generally the last name you typed other than
1543the current file. Thus if you try to do a \fB:e\fR and get a diagnostic
1544that you haven't written the file, you can give a \fB:w\fR command and
1545then a \fB:e #\fR command to redo the previous \fB:e\fR.
1546.PP
1547You can write part of the buffer to a file by finding out the lines
1548that bound the range to be written using \fB^G\fR, and giving these
1549numbers after the \fB:\fR
1550and before the \fBw\fP, separated by \fB,\fR's.
1551You can also mark these lines with \fBm\fR and
1552then use an address of the form \fB\(aa\fR\fIx\fR\fB,\fB\(aa\fR\fIy\fR
1553on the \fBw\fR command here.
1554.PP
1555You can read another file into the buffer after the current line by using
1556the \fB:r\fR command. To read before the current line put a \fB\-\fR
1557between the \fB:\fR and the \fBr\fR.
1558You can similarly read in the output from a command, just use \fB!\fR\fIcmd\fR
1559instead of a file name.
1560.PP
1561If you wish to edit a set of files in succession, you can give all the
1562names on the command line, and then edit each one in turn using the command
1563\fB:n\fR. It is also possible to respecify the list of files to be edited
1564by giving the \fB:n\fR command a list of file names, or a pattern to
1565be expanded as you would have given it on the initial
1566.I vi
1567command.
1568.PP
1569If you are editing large programs, you will find the \fB:ta\fR command
1570very useful. It utilizes a data base of function names and their locations,
1571which can be created by programs such as
1572.I ctags,
1573to quickly find a function whose name you give.
1574If the \fB:ta\fR command will require the editor to switch files, then
1575you must \fB:w\fR or abandon any changes before switching. You can repeat
1576the \fB:ta\fR command without any arguments to look for the same tag
1577again.
1578.NH 2
1579More about searching for strings
1580.PP
1581When you are searching for strings in the file with \fB/\fR and \fB?\fR,
1582the editor normally places you at the next or previous occurence
1583of the string. If you are using an operator such as \fBd\fR,
1584\fBc\fR or \fBy\fR, then you may well wish to affect lines up to the
1585line before the line containing the pattern. You can give a search of
1586the form \fB/\fR\fIpat\fR\fB/\-\fR\fIn\fR to refer to the \fIn\fR'th line
1587before the next line containing \fIpat\fR, or you can use \fB\+\fR instead
1588of \fB\-\fR to refer to the lines after the one containing \fIpat\fR.
1589If you don't give a line offset, then the editor will affect characters
1590up to the match place, rather than whole lines; thus use ``+0'' to affect
1591to the line which matches.
1592.PP
1593You can have the editor ignore the case of words in the searches it does
1594by giving the command \fB:se ic\fR\s-2ESC\s0.
1595The command \fB:se noic\fR\s-2ESC\s0 turns this off.
1596.PP
1597Strings given to searches may actually be regular expressions.
1598If you do not want or need this facility, you should
1599.DS
1600set nomagic
1601.DE
1602in the file
1603.I \&.exrc
1604in your home directory.
1605In this case,
1606only the characters \fB\(ua\fR and \fB$\fR are special in patterns.
1607The character \fB\e\fR is also then special (as it is most everywhere in
1608the system), and may be used to get at the
1609an extended pattern matching facility.
1610It is also necessary to use a \e before a
1611\fB/\fR in a forward scan or a \fB?\fR in a backward scan, in any case.
1612The following table gives the extended forms when \fBnomagic\fR is set.
1613.DS
1614.TS
1615bl l.
1616\(ua at beginning of pattern, matches beginning of line
1617$ at end of pattern, matches end of line
1618\e\fB\&.\fR matches any character
1619\e< matches the beginning of a word
1620\e> matches the end of a word
1621\e[\fIstr\fP] matches any single character in \fIstr\fP
1622\e[\(ua\fIstr\fP] matches any single character not in \fIstr\fP
1623\e[\fIx\fP\-\fIy\fP] matches any character between \fIx\fP and \fIy\fP
1624\e* matches any number of the preceding pattern
1625.TE
1626.DE
1627If you use \fBmagic\fR mode, then
1628the \fB. [\fR and \fB*\fR primitives are given without a preceding
1629\e; to include these characters in a pattern while in this mode, give
1630them preceded by a \e.
1631.NH 2
1632More about input mode
1633.PP
1634There are a number of characters which you can use to make corrections
1635during input mode. These are summarized in the following table.
1636.DS
1637.TS
1638lb l.
1639^H deletes the last input character
1640^W deletes the last input word, defined as by \fBb\fR
1641erase your erase character, same as \fB^H\fP
1642kill your kill character, deletes the input on this line
1643\e escapes a following \fB^H\fP and your erase and kill
1644\s-2ESC\s0 ends an insertion
1645\s-2DEL\s0 interrupts an insertion, terminating it abnormally
1646^D backtabs over \fIautoindent\fP
16470^D kills all the \fIautoindent\fP
1648\(ua^D same as \fB0^D\fP, but restores indent next line
1649^Q quotes the next non-printing character into the file
1650^V is a synonym for ^Q
1651^T is a \fIshiftwidth\fP forward tab
1652.TE
1653.DE
1654.PP
1655The most usual way of making corrections to input is by typing \fB^H\fR
1656to correct a single character, or by typing one or more \fB^W\fR's to
1657back over incorrect words. If you use \fB#\fR as your erase character
1658in the normal system, it will work like \fB^H\fR.
1659.PP
1660Your system kill character, normally \fB@\fR or \fB^X\fR will erase all
1661the input you have given on the current line. In general, you can neither
1662erase input back around a line boundary nor can you erase characters
1663which you did not insert with this insertion command. To make corrections
1664on the previous line after a new line has been started you can hit \s-2ESC\s0
1665to end the insertion, move over and make the correction, and then return
1666to where you were to continue. The command \fBA\fR which appends at the
1667end of the current line is often useful for continuing.
1668.PP
1669If you wish to type in your erase or kill character (say # or @) then
1670you must precede it with a \fB\e\fR, just as you would do at the normal
1671system command level. A more general way of typing non-printing characters
1672into the file is to precede them with a \fB^Q\fR. The \fB^Q\fR echoes
1673as a \fB\(ua\fR character on which the cursor rests. This indicates that
1674the editor expects you to type a control character. In fact you may
1675type any character and it will be inserted into the file at that point.*
1676.FS
1677* This is not quite true. The implementation of the editor does
1678not allow the \s-2NULL\s0 (\fB^@\fR) character to appear in files. Also
1679the \s-2LF\s0 (linefeed or \fB^J\fR) character is used by the editor
1680to separate lines in the file, so it cannot appear in the middle of a
1681line. You can insert any other character, however, if you wait for the
1682editor to echo the \fB\(ua\fR before you type the character. In fact,
1683the editor will treat a following letter as a request for the corresponding
1684control character. This is the only way to type \fB^S\fR, since the
1685system normally uses \fB^S\fR to suspend output and never gives the \fB^S\fR
1686to the editor to process.
1687.FE
1688.PP
1689If you are using \fIautoindent\fR you can backtab over the indent which
1690it supplies by typing a \fB^D\fR. This backs up to a \fIshiftwidth\fR
1691boundary; similarly \fB^T\fR will tab over to a \fIshiftwidth\fR boundary.
1692Both of these work only immediately after the supplied \fIautoindent\fR.
1693.PP
1694When you are using \fIautoindent\fR you may wish to place a label at
1695the left margin of a line. The way to do this easily is to type \fB\(ua\fR
1696and then \fB^D\fR. The editor will move the cursor to the left margin
1697for one line, and restore the previous indent on the next. You can also
1698type a \fB0\fR followed immediately by a \fB^D\fR if you wish to kill
1699all the indent and not have it come back on the next line.
1700.NH 2
1701Upper case only terminals
1702.PP
1703If your terminal has only upper case, you can still use
1704.I vi
1705by using the normal
1706system convention for typing on such a terminal.
1707Characters which you normally type are converted to lower case, and you
1708can type upper case letters by preceding them with a \e.
1709The characters { ~ } | \(ga are not available on such terminals, but you
1710can escape them as \e( \e\(ua \e) \e! \e\(aa.
1711These characters are represented on the display in the same way they
1712are typed.\*(dd
1713.FS
1714\*(dd The \e character you give will not echo until you type another
1715key.
1716.FE
1717.NH 2
1718Vi and ex
1719.PP
1720.I Vi
1721is actually one mode of editing within the editor
1722.I ex.
1723When you are running
1724.I vi
1725you can escape to the line oriented editor of
1726.I ex
1727by giving the command
1728\fBQ\fR.
1729All of the
1730.B :
1731commands which were introduced above are available in
1732.I ex.
1733Just give them without the \fB:\fR and follow them with a \s-2RETURN\s0.
1734.PP
1735In rare instances, an internal error may occur in
1736.I vi.
1737In this case you will get a diagnostic and be left in the command mode of
1738.I ex.
1739You can then save your work and quit if you wish by giving a command
1740\fBwq\fR after the \fB:\fR which \fIex\fR prompts you with, or you can
1741reenter \fIvi\fR by giving
1742.I ex
1743a
1744.I vi
1745command.
1746.PP
1747There are a number of things which you can do more easily in
1748.I ex
1749than in
1750.I vi.
1751Systematic changes in line oriented material are particularly easy.
1752You can read the advanced editing documents for the editor
1753.I ed
1754to find out a lot more about this style of editing.
1755Experienced
1756users often mix their use of
1757.I ex
1758command mode and
1759.I vi
1760command mode to speed the work they are doing.
1761.NH 2
1762Open mode: vi on hardcopy terminals and ``glass tty's''
1763.PP
1764If you are on a hardcopy terminal or a terminal which does not have a cursor
1765which can move off the bottom line, you can still use the command set of
1766.I vi,
1767but in a different mode.
1768When you give a
1769.I vi
1770command, the editor will tell you that it is using
1771.I open
1772mode.
1773This name comes from the
1774.I open
1775command in
1776.I ex,
1777which is used to get into the same mode.
1778.PP
1779The only difference between
1780.I visual
1781mode
1782and
1783.I open
1784mode is the way in which the text is displayed.
1785.PP
1786In
1787.I open
1788mode the editor uses a single line window into the file, and moving backward
1789and forward in the file causes new lines to be displayed, always below the
1790current line.
1791Two commands of
1792.I vi
1793work differently in
1794.I open:
1795.B z
1796and
1797\fB^R\fR.
1798The
1799.B z
1800command does not take parameters, but rather draws a window of context around
1801the current line and then returns you to the current line.
1802.PP
1803If you are on a hardcopy terminal,
1804the
1805.B ^R
1806command will retype the current line.
1807On such terminals, the editor normally uses two lines to represent the
1808current line.
1809The first line is a copy of the line as you started to edit it, and you work
1810on the line below this line.
1811When you delete characters, the editor types a number of \e's to show
1812you the characters which are deleted. The editor also reprints the current
1813line soon after such changes so that you can see what the line looks
1814like again.
1815.PP
1816It is sometimes useful to use this mode on very slow terminals which
1817can support
1818.I vi
1819in the full screen mode.
1820You can do this by entering
1821.I ex
1822and using an
1823.I open
1824command.
1825.LP
1826.SH
1827Acknowledgements
1828.PP
1829Bruce Englar encouraged the early development of this display editor.
1830Peter Kessler helped bring sanity to version 2's command layout.
1831Mark Horton added macros and other features for version 3 and is
1832maintaining the editor now.