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