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