1 .\" Copyright (c) 1980, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" %sccs.include.redist.roff%
6 .\" $Id: vi.in,v 8.1 1993/06/08 12:49:51 bostic Exp $ (Berkeley) $Date: 1993/06/08 12:49:51 $
8 .EH 'USD:12-%''An Introduction to Display Editing with Vi'
9 .OH 'An Introduction to Display Editing with Vi''USD:12-%'
17 An Introduction to Display Editing with Vi
23 Computer Science Division
24 Department of Electrical Engineering and Computer Science
25 University of California, Berkeley
30 (visual) is a display oriented interactive text editor.
33 the screen of your terminal acts as a window into the file which you
34 are editing. Changes which you make to the file are reflected
39 you can insert new text any place in the file quite easily.
40 Most of the commands to
42 move the cursor around in the file.
43 There are commands to move the cursor
44 forward and backward in units of characters, words,
45 sentences and paragraphs.
46 A small set of operators, like
50 for change, are combined with the motion commands to form operations
51 such as delete word or change paragraph, in a simple and natural way.
52 This regularity and the mnemonic assignment of commands to keys makes the
53 editor command set easy to remember and to use.
56 will work on a large number of display terminals,
57 and new terminals are easily driven after editing a terminal description file.
58 While it is advantageous to have an intelligent terminal which can locally
59 insert and delete lines and characters from the display, the editor will
60 function quite well on dumb terminals over slow phone lines.
61 The editor makes allowance for the low bandwidth in these situations
62 and uses smaller window sizes and
63 different display updating algorithms to make best use of the
64 limited speed available.
66 It is also possible to use the command set of
68 on hardcopy terminals, storage tubes and ``glass tty's'' using a one line
71 command set is available on all terminals.
72 The full command set of the more traditional, line
77 it is quite simple to switch between the two modes of editing.
83 The financial support of an \s-2IBM\s0 Graduate Fellowship and the
84 National Science Foundation under grants MCS74-07644-A03 and MCS78-07291
85 is gratefully acknowledged.
87 This document provides a quick introduction to
89 (Pronounced \fIvee-eye\fP.)
92 on a file you are familiar with while you are reading this.
93 The first part of this document (sections 1 through 5)
94 describes the basics of using
96 Some topics of special interest are presented in section 6, and
97 some nitty-gritty details of how the editor functions are saved for section
98 7 to avoid cluttering the presentation here.
100 There is also a short appendix here, which gives for each character the
101 special meanings which this character has in \fIvi\fR. Attached to
102 this document should be a quick reference card.
103 This card summarizes the commands of
105 in a very compact format. You should have the card handy while you are
109 Specifying terminal type
113 you must tell the system what kind of terminal you are using.
114 Here is a (necessarily incomplete) list of terminal type codes.
115 If your terminal does not appear here, you should consult with one of
116 the staff members on your system to find out the code for your terminal.
117 If your terminal does not have a code, one can be assigned and a description
118 for the terminal can be created.
126 2621 Hewlett-Packard 2621A/P Intelligent
127 2645 Hewlett-Packard 264x Intelligent
128 act4 Microterm ACT-IV Dumb
129 act5 Microterm ACT-V Dumb
130 adm3a Lear Siegler ADM-3a Dumb
131 adm31 Lear Siegler ADM-31 Intelligent
132 c100 Human Design Concept 100 Intelligent
133 dm1520 Datamedia 1520 Dumb
134 dm2500 Datamedia 2500 Intelligent
135 dm3025 Datamedia 3025 Intelligent
136 fox Perkin-Elmer Fox Dumb
137 h1500 Hazeltine 1500 Intelligent
138 h19 Heathkit h19 Intelligent
139 i100 Infoton 100 Intelligent
140 mime Imitating a smart act4 Intelligent
141 t1061 Teleray 1061 Intelligent
145 Suppose for example that you have a Hewlett-Packard HP2621A
146 terminal. The code used by the system for this terminal is `2621'.
147 In this case you can use one of the following commands to tell the system
148 the type of your terminal:
150 % \fBsetenv TERM\fP 2621
152 This command works with the
155 If you are using the standard Bourne shell
157 then you should give the commands
163 If you want to arrange to have your terminal type set up automatically
164 when you log in, you can use the
169 but often use hardwired ports, a typical line for your
171 file (if you use csh) would be
173 \fBsetenv TERM \(gatset\fP \- \-d mime\(ga
179 \fBTERM=\(gatse\fPt \- \-d mime\(ga
182 knows which terminals are hardwired to each port
183 and needs only to be told that when you dial in you
187 is usually used to change the erase and kill characters, too.
191 After telling the system which kind of terminal you have, you should
192 make a copy of a file you are familiar with, and run
194 on this file, giving the command
196 % \fBvi\fR \fIname\fR
198 replacing \fIname\fR with the name of the copy file you just created.
199 The screen should clear and the text of your file should appear on the
200 screen. If something else happens refer to the footnote.\*(dd
202 \*(dd If you gave the system an incorrect terminal type code then the
203 editor may have just made a mess out of your screen. This happens when
204 it sends control codes for one kind of terminal to some other
205 kind of terminal. In this case hit
206 the keys \fB:q\fR (colon and the q key) and then hit the \s-2RETURN\s0 key.
207 This should get you back to the command level interpreter.
208 Figure out what you did wrong (ask someone else if necessary) and try again.
209 Another thing which can go wrong is that you typed the wrong file name and
210 the editor just printed an error diagnostic. In this case you should
211 follow the above procedure for getting out of the editor, and try again
212 this time spelling the file name correctly.
213 If the editor doesn't seem to respond to the commands which you type
214 here, try sending an interrupt to it by hitting the \s-2DEL\s0 or \s-2RUB\s0
215 key on your terminal, and then hitting the \fB:q\fR command again followed
216 by a carriage return.
220 The editor's copy: the buffer
222 The editor does not directly modify the file which you are editing.
223 Rather, the editor makes a copy of this file, in a place called the
225 and remembers the file's
226 name. You do not affect the contents of the file unless and until you
227 write the changes you make back into the original file.
229 Notational conventions
231 In our examples, input which must be typed as is will be presented in
232 \fBbold face\fR. Text which should be replaced with appropriate input
233 will be given in \fIitalics\fR. We will represent special characters
234 in \s-2SMALL CAPITALS\s0.
238 The editor command set is independent of the terminal
239 you are using. On most terminals with cursor positioning keys, these keys
240 will also work within the editor.
241 If you don't have cursor positioning keys, or even if you do, you can use
242 the \fBh j k\fR and \fBl\fR keys as cursor positioning
243 keys (these are labelled with arrows on an
246 (Particular note for the HP2621: on this terminal the function keys
247 must be \fIshifted\fR (ick) to send to the machine, otherwise they
248 only act locally. Unshifted use will leave the cursor positioned
251 * As we will see later,
253 moves back to the left (like control-h which is a backspace),
255 moves down (in the same column),
257 moves up (in the same column),
263 Special characters: \s-2ESC\s0, \s-2CR\s0 and \s-2DEL\s0
265 Several of these special characters are very important, so be sure to
266 find them right now. Look on your keyboard for a key labelled \s-2ESC\s0
267 or \s-2ALT\s0. It should be near the upper left corner of your terminal.
268 Try hitting this key a few times. The editor will ring the bell
269 to indicate that it is in a quiescent state.\*(dd
271 \*(dd On smart terminals where it is possible, the editor will quietly
272 flash the screen rather than ringing the bell.
274 Partially formed commands are cancelled by \s-2ESC\s0, and when you insert
275 text in the file you end the text insertion
276 with \s-2ESC\s0. This key is a fairly
277 harmless one to hit, so you can just hit it if you don't know
278 what is going on until the editor rings the bell.
280 The \s-2CR\s0 or \s-2RETURN\s0 key is important because it is used
281 to terminate certain commands.
282 It is usually at the right side of the keyboard,
283 and is the same command used at the end of each shell command.
285 Another very useful key is the \s-2DEL\s0 or \s-2RUB\s0 key, which generates
286 an interrupt, telling the editor to stop what it is doing.
287 It is a forceful way of making the editor listen
288 to you, or to return it to the quiescent state if you don't know or don't
289 like what is going on. Try hitting the `/' key on your terminal. This
290 key is used when you want to specify a string to be searched for. The
291 cursor should now be positioned at the bottom line of the terminal after
292 a `/' printed as a prompt. You can get the cursor back to the current
293 position by hitting the \s-2DEL\s0 or \s-2RUB\s0 key; try this now.*
295 * Backspacing over the `/' will also cancel the search.
297 From now on we will simply refer to hitting the \s-2DEL\s0 or \s-2RUB\s0
298 key as ``sending an interrupt.''**
300 ** On some systems, this interruptibility comes at a price: you cannot type
301 ahead when the editor is computing with the cursor on the bottom line.
304 The editor often echoes your commands on the last line of the terminal.
305 If the cursor is on the first position of this last line, then the editor
306 is performing a computation, such as computing a new position in the
307 file after a search or running a command to reformat part of the buffer.
308 When this is happening you can stop the editor by
309 sending an interrupt.
311 Getting out of the editor
313 After you have worked with this introduction for a while, and you wish
314 to do something else, you can give the command \fBZZ\fP
316 This will write the contents of the editor's buffer back into
317 the file you are editing, if you made any changes, and then quit from
318 the editor. You can also end an editor
319 session by giving the command \fB:q!\fR\s-2CR\s0;\*(dg
321 \*(dg All commands which read from the last display line can also be
322 terminated with a \s-2ESC\s0 as well as an \s-2CR\s0.
324 this is a dangerous but occasionally essential
325 command which ends the editor session and discards all your changes.
326 You need to know about this command in case you change the editor's
327 copy of a file you wish only to look at. Be very careful
328 not to give this command when you really want to save
329 the changes you have made.
331 Moving around in the file
335 The editor has a number of commands for moving around in the file.
336 The most useful of these is generated by hitting the control and D keys
337 at the same time, a control-D or `^D'. We will use this two character
338 notation for referring to these control keys from now on. You may have
339 a key labelled `^' on your terminal. This key will be represented as `\(ua'
340 in this document; `^' is exclusively used as part of the `^x' notation
341 for control characters.\*(dd
343 \*(dd If you don't have a `^' key on your terminal
344 then there is probably a key labelled `\(ua'; in any case these characters
345 are one and the same.
348 As you know now if you tried hitting \fB^D\fR, this command scrolls down in
349 the file. The \fBD\fR thus stands for down. Many editor commands are mnemonic
350 and this makes them much easier to remember. For instance the command
351 to scroll up is \fB^U\fR. Many dumb terminals can't scroll up at all, in which
352 case hitting \fB^U\fR clears the screen and refreshes it
353 with a line which is farther back in the file at the top.
355 If you want to see more of the file below where you are, you can
356 hit \fB^E\fR to expose one more line at the bottom of the screen,
357 leaving the cursor where it is.
358 The command \fB^Y\fR (which is hopelessly non-mnemonic, but next to \fB^U\fR
359 on the keyboard) exposes one more line at the top of the screen.
361 There are other ways to move around in the file; the keys \fB^F\fR and \fB^B\fR
362 move forward and backward a page,
363 keeping a couple of lines of continuity between screens
364 so that it is possible to read through a file using these rather than
365 \fB^D\fR and \fB^U\fR if you wish.
367 Notice the difference between scrolling and paging. If you are trying
368 to read the text in a file, hitting \fB^F\fR to move forward a page
369 will leave you only a little context to look back at. Scrolling on the
370 other hand leaves more context, and happens more smoothly. You can continue
371 to read the text as scrolling is taking place.
373 Searching, goto, and previous context
375 Another way to position yourself in the file is by giving the editor a string
376 to search for. Type the character \fB/\fR followed by a string of characters
377 terminated by \s-2CR\s0. The editor will position the cursor
378 at the next occurrence of this string.
379 Try hitting \fBn\fR to then go to the next occurrence of this string.
380 The character \fB?\fR will search backwards from where you are, and is
381 otherwise like \fB/\fR.\*(dg
383 \*(dg These searches will normally wrap around the end of the file, and thus
384 find the string even if it is not on a line in the direction you search
385 provided it is anywhere else in the file. You can disable this wraparound
386 in scans by giving the command \fB:se nowrapscan\fR\s-2CR\s0,
387 or more briefly \fB:se nows\fR\s-2CR\s0.
390 If the search string you give the editor is not present in the
391 file the editor will print
392 a diagnostic on the last line of the screen, and the cursor will be returned
393 to its initial position.
395 If you wish the search to match only at the beginning of a line, begin
396 the search string with an \fB\(ua\fR. To match only at the end of
397 a line, end the search string with a \fB$\fR.
398 Thus \fB/\(uasearch\fR\s-2CR\s0 will search for the word `search' at
399 the beginning of a line, and \fB/last$\fR\s-2CR\s0 searches for the
400 word `last' at the end of a line.*
402 *Actually, the string you give to search for here can be a
403 .I "regular expression"
404 in the sense of the editors
408 If you don't wish to learn about this yet, you can disable this more
409 general facility by doing
410 \fB:se\ nomagic\fR\s-2CR\s0;
411 by putting this command in
413 in your environment, you can have this always be in effect (more
419 The command \fBG\fR, when preceded by a number will position the cursor
420 at that line in the file.
421 Thus \fB1G\fR will move the cursor to
422 the first line of the file. If you give \fBG\fR no count, then it moves
423 to the end of the file.
425 If you are near the end of the file, and the last line is not at the bottom
426 of the screen, the editor will place only the character `~' on each remaining
427 line. This indicates that the last line in the file is on the screen;
428 that is, the `~' lines are past the end of the file.
430 You can find out the state of the file you are editing by typing a \fB^G\fR.
431 The editor will show you the name of the file you are editing, the number
432 of the current line, the number of lines in the buffer, and the percentage
433 of the way through the buffer which you are.
434 Try doing this now, and remember the number of the line you are on.
435 Give a \fBG\fR command to get to the end and then another \fBG\fR command
436 to get back where you were.
438 You can also get back to a previous position by using the command
439 \fB\(ga\(ga\fR (two back quotes).
440 This is often more convenient than \fBG\fR because it requires no advance
442 Try giving a \fBG\fR or a search with \fB/\fR or \fB?\fR and then a
443 \fB\(ga\(ga\fR to get back to where you were. If you accidentally hit
444 \fBn\fR or any command which moves you far away from a context of interest, you
445 can quickly get back by hitting \fB\(ga\(ga\fR.
447 Moving around on the screen
449 Now try just moving the cursor around on the screen.
450 If your terminal has arrow keys (4 or 5 keys with arrows
451 going in each direction) try them and convince yourself
453 If you don't have working arrow keys, you can always use
461 prefer these keys to arrow keys,
462 because they are usually right underneath their fingers.
464 Hit the \fB+\fR key. Each time you do, notice that the cursor
465 advances to the next line in the file, at the first non-white position
466 on the line. The \fB\-\fR key is like \fB+\fR but goes the other way.
468 These are very common keys for moving up and down lines in the file.
469 Notice that if you go off the bottom or top with these keys then the
470 screen will scroll down (and up if possible) to bring a line at a time
471 into view. The \s-2RETURN\s0 key has the same effect as the \fB+\fR
475 also has commands to take you to the top, middle and bottom of the screen.
476 \fBH\fR will take you to the top (home) line on the screen.
477 Try preceding it with a
478 number as in \fB3H\fR.
479 This will take you to the third line on the screen.
482 commands take preceding numbers and do interesting things with them.
484 which takes you to the middle line on the screen,
486 which takes you to the last line on the screen.
487 \fBL\fR also takes counts, thus
488 \fB5L\fR will take you to the fifth line from the bottom.
492 Now try picking a word on some line on the screen, not the
493 first word on the line.
494 move the cursor using \s-2RETURN\s0 and \fB\-\fR to be on the line where
496 Try hitting the \fBw\fR key. This will advance the cursor to the
497 next word on the line.
498 Try hitting the \fBb\fR key to back up words
500 Also try the \fBe\fR key which advances you to the end of the current
501 word rather than to the beginning of the next word.
502 Also try \s-2SPACE\s0 (the space bar) which moves right one character
503 and the \s-2BS\s0 (backspace or \fB^H\fR) key which moves left one character.
504 The key \fBh\fR works as \fB^H\fR does and is useful if you don't have
506 (Also, as noted just above, \fBl\fR will move to the right.)
508 If the line had punctuation in it you may have noticed that
509 that the \fBw\fR and \fBb\fR
510 keys stopped at each group of punctuation. You can also go back and
511 forwards words without stopping at punctuation by using \fBW\fR and \fBB\fR
512 rather than the lower case equivalents. Think of these as bigger words.
513 Try these on a few lines with punctuation to see how they differ from
514 the lower case \fBw\fR and \fBb\fR.
516 The word keys wrap around the end of line,
517 rather than stopping at the end. Try moving to a word on a line below
518 where you are by repeatedly hitting \fBw\fR.
524 \fR\s-2SPACE\s0\fP advance the cursor one position
525 ^B backwards to previous page
526 ^D scrolls down in the file
527 ^E exposes another line at the bottom
528 ^F forward to next page
529 ^G tell what is going on
530 ^H backspace the cursor
531 ^N next line, same column
532 ^P previous line, same column
533 ^U scrolls up in the file
534 ^Y exposes another line at the top
535 + next line, at the beginning
536 \- previous line, at the beginning
537 / scan for a following string forwards
539 B back a word, ignoring punctuation
540 G go to specified line, last default
544 W forward a word, ignoring punctuation
546 e end of current word
547 n scan for next instance of \fB/\fR or \fB?\fR pattern
548 w word after this word
553 If you want to use the editor to look at a file,
554 rather than to make changes,
561 option which will prevent you from
562 accidently overwriting the file.
564 Making simple changes
568 One of the most useful commands is the
569 \fBi\fR (insert) command.
570 After you type \fBi\fR, everything you type until you hit \s-2ESC\s0
571 is inserted into the file.
572 Try this now; position yourself to some word in the file and try inserting
573 text before this word.
574 If you are on an dumb terminal it will seem, for a minute,
575 that some of the characters in your line have been overwritten, but they will
576 reappear when you hit \s-2ESC\s0.
578 Now try finding a word which can, but does not, end in an `s'.
579 Position yourself at this word and type \fBe\fR (move to end of word), then
580 \fBa\fR for append and then `s\s-2ESC\s0' to terminate the textual insert.
581 This sequence of commands can be used to easily pluralize a word.
583 Try inserting and appending a few times to make sure you understand how
584 this works; \fBi\fR placing text to the left of the cursor, \fBa\fR to
587 It is often the case that you want to add new lines to the file you are
588 editing, before or after some specific line in the file. Find a line
589 where this makes sense and then give the command \fBo\fR to create a
590 new line after the line you are on, or the command \fBO\fR to create
591 a new line before the line you are on. After you create a new line in
592 this way, text you type up to an \s-2ESC\s0 is inserted on the new line.
594 Many related editor commands
595 are invoked by the same letter key and differ only in that one is given
597 case key and the other is given by
598 an upper case key. In these cases, the
599 upper case key often differs from the lower case key in its sense of
601 the upper case key working backward and/or up, while the lower case
602 key moves forward and/or down.
604 Whenever you are typing in text, you can give many lines of input or
605 just a few characters.
606 To type in more than one line of text,
607 hit a \s-2RETURN\s0 at the middle of your input. A new line will be created
608 for text, and you can continue to type. If you are on a slow
609 and dumb terminal the editor may choose to wait to redraw the
610 tail of the screen, and will let you type over the existing screen lines.
611 This avoids the lengthy delay which would occur if the editor attempted
612 to keep the tail of the screen always up to date. The tail of the screen will
613 be fixed up, and the missing lines will reappear, when you hit \s-2ESC\s0.
615 While you are inserting new text, you can use the characters you normally use
616 at the system command level (usually \fB^H\fR or \fB#\fR) to backspace
618 character which you typed, and the character which you use to kill input lines
619 (usually \fB@\fR, \fB^X\fR, or \fB^U\fR)
620 to erase the input you have typed on the current line.\*(dg
622 \*(dg In fact, the character \fB^H\fR (backspace) always works to erase the
623 last input character here, regardless of what your erase character is.
625 The character \fB^W\fR
626 will erase a whole word and leave you after the space after the previous
627 word; it is useful for quickly backing up in an insert.
629 Notice that when you backspace during an insertion the characters you
630 backspace over are not erased; the cursor moves backwards, and the characters
631 remain on the display. This is often useful if you are planning to type
632 in something similar. In any case the characters disappear when when
633 you hit \s-2ESC\s0; if you want to get rid of them immediately, hit an
634 \s-2ESC\s0 and then \fBa\fR again.
636 Notice also that you can't erase characters which you didn't insert, and that
637 you can't backspace around the end of a line. If you need to back up
638 to the previous line to make a correction, just hit \s-2ESC\s0 and move
639 the cursor back to the previous line. After making the correction you
640 can return to where you were and use the insert or append command again.
642 Making small corrections
644 You can make small corrections in existing text quite easily.
645 Find a single character which is wrong or just pick any character.
646 Use the arrow keys to find the character, or
647 get near the character with the word motion keys and then either
648 backspace (hit the \s-2BS\s0 key or \fB^H\fR or even just \fBh\fR) or
649 \s-2SPACE\s0 (using the space bar)
650 until the cursor is on the character which is wrong.
651 If the character is not needed then hit the \fBx\fP key; this deletes
652 the character from the file. It is analogous to the way you \fBx\fP
653 out characters when you make mistakes on a typewriter (except it's not
657 is incorrect, you can replace it with the correct character by giving
658 the command \fBr\fR\fIc\fR,
659 where \fIc\fR is replaced by the correct character.
660 Finally if the character which is incorrect should be replaced
661 by more than one character, give the command \fBs\fR which substitutes
662 a string of characters, ending with \s-2ESC\s0, for it.
663 If there are a small number of characters
664 which are wrong you can precede \fBs\fR with a count of the number of
665 characters to be replaced. Counts are also useful with \fBx\fR to specify
666 the number of characters to be deleted.
668 More corrections: operators
670 You already know almost enough to make changes at a higher level.
671 All you need to know now is that the
673 key acts as a delete operator. Try the command
676 Try hitting \fB.\fR a few times. Notice that this repeats the effect
677 of the \fBdw\fR. The command \fB.\fR repeats the last command which
678 made a change. You can remember it by analogy with an ellipsis `\fB...\fR'.
682 This deletes a word backwards, namely the preceding word.
684 \fBd\fR\s-2SPACE\s0. This deletes a single character, and is equivalent
685 to the \fBx\fR command.
687 Another very useful operator is
689 or change. The command
691 thus changes the text of a single word.
692 You follow it by the replacement text ending with an \s-2ESC\s0.
693 Find a word which you can change to another, and try this
695 Notice that the end of the text to be changed was marked with the character
696 `$' so that you can see this as you are typing in the new material.
700 It is often the case that you want to operate on lines.
701 Find a line which you want to delete, and type
705 operator twice. This will delete the line.
706 If you are on a dumb terminal, the editor may just erase the line on
707 the screen, replacing it with a line with only an @ on it. This line
708 does not correspond to any line in your file, but only acts as a place
709 holder. It helps to avoid a lengthy redraw of the rest of the screen
710 which would be necessary to close up the hole created by the deletion
711 on a terminal without a delete line capability.
715 operator twice; this will change a whole line, erasing its previous contents and
716 replacing them with text you type up to an \s-2ESC\s0.\*(dg
718 \*(dg The command \fBS\fR is a convenient synonym for for \fBcc\fR, by
719 analogy with \fBs\fR. Think of \fBS\fR as a substitute on lines, while
720 \fBs\fR is a substitute on characters.
723 You can delete or change more than one line by preceding the
727 with a count, i.e. \fB5dd\fR deletes 5 lines.
728 You can also give a command like \fBdL\fR to delete all the lines up to
730 the last line on the screen, or \fBd3L\fR to delete through the third from
731 the bottom line. Try some commands like this now.*
733 * One subtle point here involves using the \fB/\fR search after a \fBd\fR.
734 This will normally delete characters from the current position to the
735 point of the match. If what is desired is to delete whole lines
736 including the two points, give the pattern as \fB/pat/+0\fR, a line address.
738 Notice that the editor lets you know when you change a large number of
739 lines so that you can see the extent of the change.
740 The editor will also always tell you when a change you make affects text which
745 Now suppose that the last change which you made was incorrect;
746 you could use the insert, delete and append commands to put the correct
747 material back. However, since it is often the case that we regret a
748 change or make a change incorrectly, the editor provides a
750 (undo) command to reverse the last change which you made.
751 Try this a few times, and give it twice in a row to notice that an
756 The undo command lets you reverse only a single change. After you make
757 a number of changes to a line, you may decide that you would rather have
758 the original state of the line back. The
760 command restores the current line to the state before you started changing
763 You can recover text which you delete, even if
764 undo will not bring it back; see the section on recovering lost text
771 \fR\s-2SPACE\s0\fP advance the cursor one position
772 ^H backspace the cursor
773 ^W erase a word during an insert
774 \fRerase\fP your erase (usually ^H or #), erases a character during an insert
775 \fRkill\fP your kill (usually @, ^X, or ^U), kills the insert on this line
776 \&\fB.\fP repeats the changing command
777 O opens and inputs new lines, above the current
778 U undoes the changes you made to the current line
779 a appends text after the cursor
780 c changes the object you specify to the following text
781 d deletes the object you specify
782 i inserts text before the cursor
783 o opens and inputs new lines, below the current
784 u undoes the last change
787 Moving about; rearranging and duplicating text
789 Low level character motions
791 Now move the cursor to a line where there is a punctuation or a bracketing
792 character such as a parenthesis or a comma or period. Try the command
793 \fBf\fR\fIx\fR where \fIx\fR is this character. This command finds
794 the next \fIx\fR character to the right of the cursor in the current
795 line. Try then hitting a \fB;\fR, which finds the next instance of the
796 same character. By using the \fBf\fR command and then a sequence of
797 \fB;\fR's you can often
798 get to a particular place in a line much faster than with a sequence
799 of word motions or \s-2SPACE\s0s.
800 There is also a \fBF\fR command, which is like \fBf\fR, but searches
801 backward. The \fB;\fR command repeats \fBF\fR also.
803 When you are operating on the text in a line it is often desirable to
804 deal with the characters up to, but not including, the first instance of
805 a character. Try \fBdf\fR\fIx\fR for some \fIx\fR now and
806 notice that the \fIx\fR character is deleted. Undo this with \fBu\fR
807 and then try \fBdt\fR\fIx\fR; the \fBt\fR here stands for to, i.e.
808 delete up to the next \fIx\fR, but not the \fIx\fR. The command \fBT\fR
809 is the reverse of \fBt\fR.
811 When working with the text of a single line, an \fB\(ua\fR moves the
812 cursor to the first non-white position on the line, and a
813 \fB$\fR moves it to the end of the line. Thus \fB$a\fR will append new
814 text at the end of the current line.
816 Your file may have tab (\fB^I\fR) characters in it. These
817 characters are represented as a number of spaces expanding to a tab stop,
818 where tab stops are every 8 positions.*
820 * This is settable by a command of the form \fB:se ts=\fR\fIx\fR\s-2CR\s0,
821 where \fIx\fR is 4 to set tabstops every four columns. This has
822 effect on the screen representation within the editor.
824 When the cursor is at a tab, it sits on the last of the several spaces
825 which represent that tab. Try moving the cursor back and forth over
826 tabs so you understand how this works.
828 On rare occasions, your file may have nonprinting characters in it.
829 These characters are displayed in the same way they are represented in
830 this document, that is with a two character code, the first character
831 of which is `^'. On the screen non-printing characters resemble a `^'
832 character adjacent to another, but spacing or backspacing over the character
833 will reveal that the two characters are, like the spaces representing
834 a tab character, a single character.
836 The editor sometimes discards control characters,
837 depending on the character and the setting of the
840 if you attempt to insert them in your file.
841 You can get a control character in the file by beginning
842 an insert and then typing a \fB^V\fR before the control
844 \fB^V\fR quotes the following character, causing it to be
845 inserted directly into the file.
848 Higher level text objects
850 In working with a document it is often advantageous to work in terms
851 of sentences, paragraphs, and sections. The operations \fB(\fR and \fB)\fR
852 move to the beginning of the previous and next sentences respectively.
853 Thus the command \fBd)\fR will delete the rest of the current sentence;
854 likewise \fBd(\fR will delete the previous sentence if you are at the
855 beginning of the current sentence, or the current sentence up to where
856 you are if you are not at the beginning of the current sentence.
858 A sentence is defined to end at a `.', `!' or `?' which is followed by
859 either the end of a line, or by two spaces. Any number of closing `)',
860 `]', `"' and `\(aa' characters may appear after the `.', `!' or `?' before
861 the spaces or end of line.
863 The operations \fB{\fR and \fB}\fR move over paragraphs and the operations
864 \fB[[\fR and \fB]]\fR move over sections.\*(dg
866 \*(dg The \fB[[\fR and \fB]]\fR operations
867 require the operation character to be doubled because they can move the
868 cursor far from where it currently is. While it is easy to get back
869 with the command \fB\(ga\(ga\fP,
870 these commands would still be frustrating
871 if they were easy to hit accidentally.
874 A paragraph begins after each empty line, and also
875 at each of a set of paragraph macros, specified by the pairs of characters
876 in the definition of the string valued option \fIparagraphs\fR.
877 The default setting for this option defines the paragraph macros of the
878 \fI\-ms\fR and \fI\-mm\fR macro packages, i.e. the `.IP', `.LP', `.PP'
879 and `.QP', `.P' and `.LI' macros.\*(dd
881 \*(dd You can easily change or extend this set of macros by assigning a
882 different string to the \fIparagraphs\fR option in your EXINIT.
883 See section 6.2 for details.
884 The `.bp' directive is also considered to start a paragraph.
886 Each paragraph boundary is also a sentence boundary. The sentence
887 and paragraph commands can
888 be given counts to operate over groups of sentences and paragraphs.
890 Sections in the editor begin after each macro in the \fIsections\fR option,
891 normally `.NH', `.SH', `.H' and `.HU', and each line with a formfeed \fB^L\fR
893 Section boundaries are always line and paragraph boundaries also.
895 Try experimenting with the sentence and paragraph commands until you are
896 sure how they work. If you have a large document, try looking through
897 it using the section commands.
898 The section commands interpret a preceding count as a different window size in
899 which to redraw the screen at the new location, and this window size
900 is the base size for newly drawn windows until another size is specified.
902 if you are on a slow terminal and are looking for a particular section.
903 You can give the first section command a small count to then see each successive
904 section heading in a small window.
906 Rearranging and duplicating text
908 The editor has a single unnamed buffer where the last deleted or
909 changed away text is saved, and a set of named buffers \fBa\fR\-\fBz\fR
910 which you can use to save copies of text and to move text around in
911 your file and between files.
915 yanks a copy of the object which follows into the unnamed buffer.
916 If preceded by a buffer name, \fB"\fR\fIx\fR\|\fBy\fR, where
917 \fIx\fR here is replaced by a letter \fBa\-z\fR, it places the text in the named
918 buffer. The text can then be put back in the file with the commands
922 \fBp\fR puts the text after or below the cursor, while \fBP\fR puts the text
923 before or above the cursor.
925 If the text which you
926 yank forms a part of a line, or is an object such as a sentence which
927 partially spans more than one line, then when you put the text back,
928 it will be placed after the cursor (or before if you
929 use \fBP\fR). If the yanked text forms whole lines, they will be put
930 back as whole lines, without changing the current line. In this case,
931 the put acts much like a \fBo\fR or \fBO\fR command.
933 Try the command \fBYP\fR. This makes a copy of the current line and
934 leaves you on this copy, which is placed before the current line.
935 The command \fBY\fR is a convenient abbreviation for \fByy\fR.
936 The command \fBYp\fR will also make a copy of the current line, and place
937 it after the current line. You can give \fBY\fR a count of lines to
938 yank, and thus duplicate several lines; try \fB3YP\fR.
940 To move text within the buffer, you need to delete it in one place, and
941 put it back in another. You can precede a delete operation by the
942 name of a buffer in which the text is to be stored as in \fB"a5dd\fR
943 deleting 5 lines into the named buffer \fIa\fR. You can then move the
944 cursor to the eventual resting place of the these lines and do a \fB"ap\fR
945 or \fB"aP\fR to put them back.
946 In fact, you can switch and edit another file before you put the lines
947 back, by giving a command of the form \fB:e \fR\fIname\fR\s-2CR\s0 where
948 \fIname\fR is the name of the other file you want to edit. You will
949 have to write back the contents of the current editor buffer (or discard
950 them) if you have made changes before the editor will let you switch
952 An ordinary delete command saves the text in the unnamed buffer,
953 so that an ordinary put can move it elsewhere.
954 However, the unnamed buffer is lost when you change files,
955 so to move text from one file to another you should use an unnamed buffer.
961 \(ua first non-white on line
969 f\fIx\fR find \fIx\fR forward in line
970 p put text back, after cursor or below current line
971 y yank operator, for copies and moves
972 t\fIx\fR up to \fIx\fR forward, for operators
973 F\fIx\fR f backward in line
974 P put text back, before cursor or above current line
975 T\fIx\fR t backward in line
980 Writing, quitting, editing new files
982 So far we have seen how to enter
984 and to write out our file using either
985 \fBZZ\fR or \fB:w\fR\s-2CR\s0. The first exits from
987 (writing if changes were made),
988 the second writes and stays in the editor.
990 If you have changed the editor's copy of the file but do not wish to
991 save your changes, either because you messed up the file or decided that the
992 changes are not an improvement to the file, then you can give the command
993 \fB:q!\fR\s-2CR\s0 to quit from the editor without writing the changes.
994 You can also reedit the same file (starting over) by giving the command
995 \fB:e!\fR\s-2CR\s0. These commands should be used only rarely, and with
996 caution, as it is not possible to recover the changes you have made after
997 you discard them in this manner.
999 You can edit a different file without leaving the editor by giving the
1000 command \fB:e\fR\ \fIname\fR\s-2CR\s0. If you have not written out
1001 your file before you try to do this, then the editor will tell you this,
1002 and delay editing the other file. You can then give the command
1003 \fB:w\fR\s-2CR\s0 to save your work and then the \fB:e\fR\ \fIname\fR\s-2CR\s0
1004 command again, or carefully give the command \fB:e!\fR\ \fIname\fR\s-2CR\s0,
1005 which edits the other file discarding the changes you have made to the
1007 To have the editor automatically save changes,
1011 and use \fB:n\fP instead of \fB:e\fP.
1015 You can get to a shell to execute a single command by giving a
1017 command of the form \fB:!\fIcmd\fR\s-2CR\s0.
1018 The system will run the single command
1020 and when the command finishes, the editor will ask you to hit a \s-2RETURN\s0
1021 to continue. When you have finished looking at the output on the screen,
1022 you should hit \s-2RETURN\s0 and the editor will clear the screen and
1023 redraw it. You can then continue editing.
1024 You can also give another \fB:\fR command when it asks you for a \s-2RETURN\s0;
1025 in this case the screen will not be redrawn.
1027 If you wish to execute more than one command in the shell, then you can
1028 give the command \fB:sh\fR\s-2CR\s0.
1029 This will give you a new shell, and when you finish with the shell, ending
1030 it by typing a \fB^D\fR, the editor will clear the screen and continue.
1032 On systems which support it, \fB^Z\fP will suspend the editor
1033 and return to the (top level) shell.
1034 When the editor is resumed, the screen will be redrawn.
1036 Marking and returning
1038 The command \fB\(ga\(ga\fR returned to the previous place
1039 after a motion of the cursor by a command such as \fB/\fR, \fB?\fR or
1040 \fBG\fR. You can also mark lines in the file with single letter tags
1041 and return to these marks later by naming the tags. Try marking the
1042 current line with the command \fBm\fR\fIx\fR, where you should pick some
1043 letter for \fIx\fR, say `a'. Then move the cursor to a different line
1044 (any way you like) and hit \fB\(gaa\fR. The cursor will return to the
1045 place which you marked.
1046 Marks last only until you edit another file.
1048 When using operators such as
1050 and referring to marked lines, it is often desirable to delete whole lines
1051 rather than deleting to the exact position in the line marked by \fBm\fR.
1052 In this case you can use the form \fB\(aa\fR\fIx\fR rather than
1053 \fB\(ga\fR\fIx\fR. Used without an operator, \fB\(aa\fR\fIx\fR will move to
1054 the first non-white character of the marked line; similarly \fB\(aa\(aa\fR
1055 moves to the first non-white character of the line containing the previous
1056 context mark \fB\(ga\(ga\fR.
1058 Adjusting the screen
1060 If the screen image is messed up because of a transmission error to your
1061 terminal, or because some program other than the editor wrote output
1062 to your terminal, you can hit a \fB^L\fR, the \s-2ASCII\s0 form-feed
1063 character, to cause the screen to be refreshed.
1065 On a dumb terminal, if there are @ lines in the middle of the screen
1066 as a result of line deletion, you may get rid of these lines by typing
1067 \fB^R\fR to cause the editor to retype the screen, closing up these holes.
1069 Finally, if you wish to place a certain line on the screen at the top
1070 middle or bottom of the screen, you can position the cursor to that line,
1071 and then give a \fBz\fR command.
1072 You should follow the \fBz\fR command with a \s-2RETURN\s0 if you want
1073 the line to appear at the top of the window, a \fB.\fR if you want it
1074 at the center, or a \fB\-\fR if you want it at the bottom.
1078 Editing on slow terminals
1080 When you are on a slow terminal, it is important to limit the amount
1081 of output which is generated to your screen so that you will not suffer
1082 long delays, waiting for the screen to be refreshed. We have already
1083 pointed out how the editor optimizes the updating of the screen during
1084 insertions on dumb terminals to limit the delays, and how the editor erases
1085 lines to @ when they are deleted on dumb terminals.
1087 The use of the slow terminal insertion mode is controlled by the
1089 option. You can force the editor to use this mode even on faster terminals
1090 by giving the command \fB:se slow\fR\s-2CR\s0. If your system is sluggish
1091 this helps lessen the amount of output coming to your terminal.
1092 You can disable this option by \fB:se noslow\fR\s-2CR\s0.
1094 The editor can simulate an intelligent terminal on a dumb one. Try
1095 giving the command \fB:se redraw\fR\s-2CR\s0. This simulation generates
1096 a great deal of output and is generally tolerable only on lightly loaded
1097 systems and fast terminals. You can disable this by giving the command
1098 \fB:se noredraw\fR\s-2CR\s0.
1100 The editor also makes editing more pleasant at low speed by starting
1101 editing in a small window, and letting the window expand as you edit.
1102 This works particularly well on intelligent terminals. The editor can
1103 expand the window easily when you insert in the middle of the screen
1104 on these terminals. If possible, try the editor on an intelligent terminal
1105 to see how this works.
1107 You can control the size of the window which is redrawn each time the
1108 screen is cleared by giving window sizes as argument to the commands
1109 which cause large screen motions:
1111 .B ": / ? [[ ]] \(ga \(aa"
1113 Thus if you are searching for a particular instance of a common string
1114 in a file you can precede the first search command by a small number,
1115 say 3, and the editor will draw three line windows around each instance
1116 of the string which it locates.
1118 You can easily expand or contract the window, placing the current line
1119 as you choose, by giving a number on a \fBz\fR command, after the \fBz\fR
1120 and before the following \s-2RETURN\s0, \fB.\fR or \fB\-\fR. Thus the
1121 command \fBz5.\fR redraws the screen with the current line in the center
1122 of a five line window.\*(dg
1124 \*(dg Note that the command \fB5z.\fR has an entirely different effect,
1125 placing line 5 in the center of a new window.
1128 If the editor is redrawing or otherwise updating large portions of the
1129 display, you can interrupt this updating by hitting a \s-2DEL\s0 or \s-2RUB\s0
1130 as usual. If you do this you may partially confuse the editor about
1131 what is displayed on the screen. You can still edit the text on
1132 the screen if you wish; clear up the confusion
1133 by hitting a \fB^L\fR; or move or search again, ignoring the
1134 current state of the display.
1136 See section 7.8 on \fIopen\fR mode for another way to use the
1138 command set on slow terminals.
1140 Options, set, and editor startup files
1142 The editor has a set of options, some of which have been mentioned above.
1143 The most useful options are given in the following table.
1148 Name Default Description
1150 autoindent noai Supply indentation automatically
1151 autowrite noaw Automatic write before \fB:n\fR, \fB:ta\fR, \fB^\(ua\fR, \fB!\fR
1152 ignorecase noic Ignore case in searching
1153 lisp nolisp \fB( { ) }\fR commands deal with S-expressions
1154 list nolist Tabs print as ^I; end of lines marked with $
1155 magic nomagic The characters . [ and * are special in scans
1156 number nonu Lines are displayed prefixed with line numbers
1157 paragraphs para=IPLPPPQPbpP LI Macro names which start paragraphs
1158 redraw nore Simulate a smart terminal on a dumb one
1159 sections sect=NHSHH HU Macro names which start new sections
1160 shiftwidth sw=8 Shift distance for <, > and input \fB^D\fP and \fB^T\fR
1161 showmatch nosm Show matching \fB(\fP or \fB{\fP as \fB)\fP or \fB}\fR is typed
1162 slowopen slow Postpone display updates during inserts
1163 term dumb The kind of terminal you are using.
1167 The options are of three kinds: numeric options, string options, and
1168 toggle options. You can set numeric and string options by a statement
1171 \fBset\fR \fIopt\fR\fB=\fR\fIval\fR
1173 and toggle options can be set or unset by statements of one of the forms
1176 \fBset\fR \fBno\fR\fIopt\fR
1178 These statements can be placed in your EXINIT in your environment,
1179 or given while you are running
1181 by preceding them with a \fB:\fR and following them with a \s-2CR\s0.
1183 You can get a list of all options which you have changed by the
1184 command \fB:set\fR\s-2CR\s0, or the value of a single option by the
1185 command \fB:set\fR \fIopt\fR\fB?\fR\s-2CR\s0.
1186 A list of all possible options and their values is generated by
1187 \fB:set all\fP\s-2CR\s0.
1188 Set can be abbreviated \fBse\fP.
1189 Multiple options can be placed on one line, e.g.
1190 \fB:se ai aw nu\fP\s-2CR\s0.
1192 Options set by the \fBset\fP command only last
1193 while you stay in the editor.
1194 It is common to want to have certain options set whenever you
1196 This can be accomplished by creating a list of \fIex\fP commands\*(dg
1199 All commands which start with
1201 are \fIex\fP commands.
1203 which are to be run every time you start up \fIex\fP, \fIedit\fP,
1205 A typical list includes a \fBset\fP command, and possibly a few
1207 Since it is advisable to get these commands on one line, they can
1208 be separated with the | character, for example:
1210 \fBset\fP ai aw terse|\fBmap\fP @ dd|\fBmap\fP # x
1212 which sets the options \fIautoindent\fP, \fIautowrite\fP, \fIterse\fP,
1216 makes @ delete a line,
1219 and makes # delete a character,
1222 (See section 6.9 for a description of the \fBmap\fP command)
1223 This string should be placed in the variable EXINIT in your environment.
1224 If you use the shell \fIcsh\fP,
1225 put this line in the file
1227 in your home directory:
1229 setenv EXINIT \(aa\fBset\fP ai aw terse|\fBmap\fP @ dd|\fBmap\fP # x\(aa
1231 If you use the standard shell \fIsh\fP,
1232 put these lines in the file
1234 in your home directory:
1236 EXINIT=\(aa\fBset\fP ai aw terse|\fBmap\fP @ dd|\fBmap\fP # x\(aa
1239 Of course, the particulars of the line would depend on which options
1242 Recovering lost lines
1244 You might have a serious problem if you delete a number of lines and then
1245 regret that they were deleted. Despair not, the editor saves the last
1246 9 deleted blocks of text in a set of numbered registers 1\-9.
1247 You can get the \fIn\fR'th previous deleted text back in your file by
1249 "\fR\fIn\fR\|\fBp\fR.
1250 The "\fR here says that a buffer name is to follow,
1251 \fIn\fR is the number of the buffer you wish to try
1252 (use the number 1 for now),
1255 is the put command, which puts text in the buffer after the cursor.
1256 If this doesn't bring back the text you wanted, hit
1258 to undo this and then
1261 to repeat the put command.
1264 command will repeat the last change you made.
1265 As a special case, when the last command refers to a numbered text buffer,
1266 the \fB.\fR command increments the number of the buffer before repeating
1267 the command. Thus a sequence of the form
1271 will, if repeated long enough, show you all the deleted text which has
1275 commands here to gather up all this text in the buffer, or stop after any
1276 \fB\&.\fR command to keep just the then recovered text.
1279 can also be used rather than
1281 to put the recovered text before rather than after the cursor.
1283 Recovering lost files
1285 If the system crashes, you can recover the work you were doing
1286 to within a few changes. You will normally receive mail when you next
1287 login giving you the name of the file which has been saved for you.
1288 You should then change to the directory where you were when the system
1289 crashed and give a command of the form:
1291 % \fBvi \-r\fR \fIname\fR
1293 replacing \fIname\fR with the name of the file which you were editing.
1294 This will recover your work to a point near where you left off.\*(dg
1296 \*(dg In rare cases, some of the lines of the file may be lost. The
1297 editor will give you the numbers of these lines and the text of the lines
1298 will be replaced by the string `LOST'. These lines will almost always
1299 be among the last few which you changed. You can either choose to discard
1300 the changes which you made (if they are easy to remake) or to replace
1301 the few lost lines by hand.
1304 You can get a listing of the files which are saved for you by giving
1309 If there is more than one instance of a particular file saved, the editor
1310 gives you the newest instance each time you recover it. You can thus
1311 get an older saved copy back by first recovering the newer copies.
1313 For this feature to work,
1315 must be correctly installed by a super user on your system,
1318 program must exist to receive mail.
1319 The invocation ``\fIvi -r\fP'' will not always list all saved files,
1320 but they can be recovered even if they are not listed.
1322 Continuous text input
1324 When you are typing in large amounts of text it is convenient to have
1325 lines broken near the right margin automatically. You can cause this
1326 to happen by giving the command
1327 \fB:se wm=10\fR\s-2CR\s0.
1328 This causes all lines to be broken at a space at least 10 columns
1329 from the right hand edge of the screen.
1331 If the editor breaks an input line and you wish to put it back together
1332 you can tell it to join the lines with \fBJ\fR. You can give \fBJ\fR
1333 a count of the number of lines to be joined as in \fB3J\fR to join 3
1334 lines. The editor supplies white space, if appropriate,
1335 at the juncture of the joined
1336 lines, and leaves the cursor at this white space.
1337 You can kill the white space with \fBx\fR if you don't want it.
1339 Features for editing programs
1341 The editor has a number of commands for editing programs.
1342 The thing that most distinguishes editing of programs from editing of text
1343 is the desirability of maintaining an indented structure to the body of
1344 the program. The editor has a
1346 facility for helping you generate correctly indented programs.
1348 To enable this facility you can give the command \fB:se ai\fR\s-2CR\s0.
1349 Now try opening a new line with \fBo\fR and type some characters on the
1350 line after a few tabs. If you now start another line, notice that the
1351 editor supplies white space at the beginning of the line to line it up
1352 with the previous line. You cannot backspace over this indentation,
1353 but you can use \fB^D\fR key to backtab over the supplied indentation.
1355 Each time you type \fB^D\fR you back up one position, normally to an
1356 8 column boundary. This amount is settable; the editor has an option
1359 which you can set to change this value.
1360 Try giving the command \fB:se sw=4\fR\s-2CR\s0
1361 and then experimenting with autoindent again.
1363 For shifting lines in the program left and right, there are operators
1367 These shift the lines you specify right or left by one
1373 which shift one line left or right, and
1377 shifting the rest of the display left and right.
1379 If you have a complicated expression and wish to see how the parentheses
1380 match, put the cursor at a left or right parenthesis and hit \fB%\fR.
1381 This will show you the matching parenthesis.
1382 This works also for braces { and }, and brackets [ and ].
1384 If you are editing C programs, you can use the \fB[[\fR and \fB]]\fR keys
1385 to advance or retreat to a line starting with a \fB{\fR, i.e. a function
1386 declaration at a time. When \fB]]\fR is used with an operator it stops
1387 after a line which starts with \fB}\fR; this is sometimes useful with
1390 Filtering portions of the buffer
1392 You can run system commands over portions of the buffer using the operator
1394 You can use this to sort lines in the buffer, or to reformat portions
1395 of the buffer with a pretty-printer.
1396 Try typing in a list of random words, one per line and ending them
1397 with a blank line. Back up to the beginning of the list, and then give
1398 the command \fB!}sort\fR\s-2CR\s0. This says to sort the next paragraph
1399 of material, and the blank line ends a paragraph.
1401 Commands for editing \s-2LISP\s0
1403 If you are editing a \s-2LISP\s0 program you should set the option
1406 \fB:se\ lisp\fR\s-2CR\s0.
1407 This changes the \fB(\fR and \fB)\fR commands to move backward and forward
1409 The \fB{\fR and \fB}\fR commands are like \fB(\fR and \fB)\fR but don't
1410 stop at atoms. These can be used to skip to the next list, or through
1415 option works differently for \s-2LISP\s0, supplying indent to align at
1416 the first argument to the last open list. If there is no such argument
1417 then the indent is two spaces more than the last level.
1419 There is another option which is useful for typing in \s-2LISP\s0, the
1423 \fB:se sm\fR\s-2CR\s0
1424 and then try typing a `(' some words and then a `)'. Notice that the
1425 cursor shows the position of the `(' which matches the `)' briefly.
1426 This happens only if the matching `(' is on the screen, and the cursor
1427 stays there for at most one second.
1429 The editor also has an operator to realign existing lines as though they
1430 had been typed in with
1434 set. This is the \fB=\fR operator.
1435 Try the command \fB=%\fR at the beginning of a function. This will realign
1436 all the lines of the function declaration.
1438 When you are editing \s-2LISP\s0,, the \fB[[\fR and \fR]]\fR advance
1439 and retreat to lines beginning with a \fB(\fR, and are useful for dealing
1440 with entire function definitions.
1445 has a parameterless macro facility, which lets you set it up so that
1446 when you hit a single keystroke, the editor will act as though
1447 you had hit some longer sequence of keys. You can set this up if
1448 you find yourself typing the same sequence of commands repeatedly.
1450 Briefly, there are two flavors of macros:
1452 Ones where you put the macro body in a buffer register, say \fIx\fR.
1453 You can then type \fB@x\fR to invoke the macro. The \fB@\fR may be followed
1454 by another \fB@\fR to repeat the last macro.
1462 with a command of the form:
1464 :map \fIlhs\fR \fIrhs\fR\s-2CR\f0
1470 There are restrictions:
1472 should be one keystroke (either 1 character or one function key)
1473 since it must be entered within one second
1476 is set, in which case you can type it as slowly as you wish,
1479 will wait for you to finish it before it echoes anything).
1482 can be no longer than 10 characters, the
1485 To get a space, tab or newline into
1489 you should escape them with a \fB^V\fR.
1490 (It may be necessary to double the \fB^V\fR if the map
1491 command is given inside
1495 Spaces and tabs inside the
1497 need not be escaped.
1499 Thus to make the \fBq\fR key write and exit the editor, you can give
1502 :map q :wq\fB^V^V\fP\s-2CR CR\s0
1504 which means that whenever you type \fBq\fR, it will be as though you
1505 had typed the four characters \fB:wq\fR\s-2CR\s0.
1506 A \fB^V\fR's is needed because without it the \s-2CR\s0 would end the
1507 \fB:\fR command, rather than becoming part of the
1516 must be typed to get one.
1517 The first \s-2CR\s0 is part of the
1519 the second terminates the : command.
1521 Macros can be deleted with
1528 of a macro is ``#0'' through ``#9'', this maps the particular function key
1529 instead of the 2 character ``#'' sequence. So that terminals without
1530 function keys can access such definitions, the form ``#x'' will mean function
1533 on all terminals (and need not be typed within one second.)
1534 The character ``#'' can be changed by using a macro in the usual way:
1538 to use tab, for example. (This won't affect the
1540 command, which still uses
1542 but just the invocation from visual mode.
1544 The undo command reverses an entire macro call as a unit,
1545 if it made any changes.
1547 Placing a `!' after the word
1549 causes the mapping to apply
1550 to input mode, rather than command mode.
1551 Thus, to arrange for \fB^T\fP to be the same as 4 spaces in input mode,
1554 :map \fB^T\fP \fB^V\fP\o'b/'\o'b/'\o'b/'\o'b/'
1559 The \fB^V\fP is necessary to prevent the blanks from being taken as
1560 white space between the
1567 A feature similar to macros in input mode is word abbreviation.
1568 This allows you to type a short word and have it expanded into
1569 a longer word or words.
1577 and have the same syntax as
1581 :ab eecs Electrical Engineering and Computer Sciences
1583 causes the word `eecs' to always be changed into the
1584 phrase `Electrical Engineering and Computer Sciences'.
1585 Word abbreviation is different from macros in that
1586 only whole words are affected.
1587 If `eecs' were typed as part of a larger word, it would
1589 Also, the partial word is echoed as it is typed.
1590 There is no need for an abbreviation to be a single keystroke,
1591 as it should be with a macro.
1595 The editor has a number of short
1596 commands which abbreviate longer commands which we
1597 have introduced here. You can find these commands easily
1598 on the quick reference card.
1599 They often save a bit of typing and you can learn them as convenient.
1601 Nitty-gritty details
1603 Line representation in the display
1605 The editor folds long logical lines onto many physical lines in the display.
1606 Commands which advance lines advance logical lines and will skip
1607 over all the segments of a line in one motion. The command \fB|\fR moves
1608 the cursor to a specific column, and may be useful for getting near the
1609 middle of a long line to split it in half. Try \fB80|\fR on a line which
1610 is more than 80 columns long.\*(dg
1612 \*(dg You can make long lines very easily by using \fBJ\fR to join together
1616 The editor only puts full lines on the display; if there is not enough
1617 room on the display to fit a logical line, the editor leaves the physical
1618 line empty, placing only an @ on the line as a place holder. When you
1619 delete lines on a dumb terminal, the editor will often just clear the
1620 lines to @ to save time (rather than rewriting the rest of the screen.)
1621 You can always maximize the information on the screen by giving the \fB^R\fR
1624 If you wish, you can have the editor place line numbers before each line
1625 on the display. Give the command \fB:se nu\fR\s-2CR\s0 to enable
1626 this, and the command \fB:se nonu\fR\s-2CR\s0 to turn it off.
1627 You can have tabs represented as \fB^I\fR and the ends of lines indicated
1628 with `$' by giving the command \fB:se list\fR\s-2CR\s0;
1629 \fB:se nolist\fR\s-2CR\s0 turns this off.
1631 Finally, lines consisting of only the character `~' are displayed when
1632 the last line in the file is in the middle of the screen. These represent
1633 physical lines which are past the logical end of file.
1639 commands will use a preceding count to affect their behavior in some way.
1640 The following table gives the common ways in which the counts are used:
1644 new window size : / ? [[ ]] \` \'
1646 line/column number z G |
1647 repeat effect \fRmost of the rest\fP
1651 The editor maintains a notion of the current default window size.
1652 On terminals which run at speeds greater than 1200 baud
1653 the editor uses the full terminal screen.
1654 On terminals which are slower than 1200 baud
1655 (most dialup lines are in this group)
1656 the editor uses 8 lines as the default window size.
1657 At 1200 baud the default is 16 lines.
1659 This size is the size used when the editor clears and refills the screen
1660 after a search or other motion moves far from the edge of the current window.
1661 The commands which take a new window size as count all often cause the
1662 screen to be redrawn. If you anticipate this, but do not need as large
1663 a window as you are currently using, you may wish to change the screen
1664 size by specifying the new size before these commands.
1665 In any case, the number of lines used on the screen will expand if you
1666 move off the top with a \fB\-\fR or similar command or off the bottom
1667 with a command such as \s-2RETURN\s0 or \fB^D\fR.
1668 The window will revert to the last specified size the next time it is
1669 cleared and refilled.\*(dg
1671 \*(dg But not by a \fB^L\fR which just redraws the screen as it is.
1674 The scroll commands \fB^D\fR and \fB^U\fR likewise remember the amount
1675 of scroll last specified, using half the basic window size initially.
1676 The simple insert commands use a count to specify a repetition of the
1677 inserted text. Thus \fB10a+\-\-\-\-\fR\s-2ESC\s0 will insert a grid-like
1679 A few commands also use a preceding count as a line or column number.
1681 Except for a few commands which ignore any counts (such as \fB^R\fR),
1682 the rest of the editor commands use a count to indicate a simple repetition
1683 of their effect. Thus \fB5w\fR advances five words on the current line,
1684 while \fB5\fR\s-2RETURN\s0 advances five lines. A very useful instance
1685 of a count as a repetition is a count given to the \fB.\fR command, which
1686 repeats the last changing command. If you do \fBdw\fR and then \fB3.\fR,
1687 you will delete first one and then three words. You can then delete
1688 two more words with \fB2.\fR.
1690 More file manipulation commands
1692 The following table lists the file manipulation commands which you can
1699 :w write back changes
1701 :x write (if necessary) and quit (same as ZZ).
1702 :e \fIname\fP edit file \fIname\fR
1703 :e! reedit, discarding changes
1704 :e + \fIname\fP edit, starting at end
1705 :e +\fIn\fP edit, starting at line \fIn\fP
1706 :e # edit alternate file
1707 :w \fIname\fP write file \fIname\fP
1708 :w! \fIname\fP overwrite file \fIname\fP
1709 :\fIx,y\fPw \fIname\fP write lines \fIx\fP through \fIy\fP to \fIname\fP
1710 :r \fIname\fP read file \fIname\fP into buffer
1711 :r !\fIcmd\fP read output of \fIcmd\fP into buffer
1712 :n edit next file in argument list
1713 :n! edit next file, discarding changes to current
1714 :n \fIargs\fP specify new argument list
1715 :ta \fItag\fP edit file containing tag \fItag\fP, at \fItag\fP
1719 All of these commands are followed by a \s-2CR\s0 or \s-2ESC\s0.
1720 The most basic commands are \fB:w\fR and \fB:e\fR.
1721 A normal editing session on a single file will end with a \fBZZ\fR command.
1722 If you are editing for a long period of time you can give \fB:w\fR commands
1723 occasionally after major amounts of editing, and then finish
1724 with a \fBZZ\fR. When you edit more than one file, you can finish
1725 with one with a \fB:w\fR and start editing a new file by giving a \fB:e\fR
1729 and use \fB:n\fP <file>.
1731 If you make changes to the editor's copy of a file, but do not wish to
1732 write them back, then you must give an \fB!\fR after the command you
1733 would otherwise use; this forces the editor to discard any changes
1734 you have made. Use this carefully.
1736 The \fB:e\fR command can be given a \fB+\fR argument to start at the
1737 end of the file, or a \fB+\fR\fIn\fR argument to start at line \fIn\fR\^.
1738 In actuality, \fIn\fR may be any editor command not containing a space,
1739 usefully a scan like \fB+/\fIpat\fR or \fB+?\fIpat\fR.
1740 In forming new names to the \fBe\fR command, you can use the character
1741 \fB%\fR which is replaced by the current file name, or the character
1742 \fB#\fR which is replaced by the alternate file name.
1743 The alternate file name is generally the last name you typed other than
1744 the current file. Thus if you try to do a \fB:e\fR and get a diagnostic
1745 that you haven't written the file, you can give a \fB:w\fR command and
1746 then a \fB:e #\fR command to redo the previous \fB:e\fR.
1748 You can write part of the buffer to a file by finding out the lines
1749 that bound the range to be written using \fB^G\fR, and giving these
1750 numbers after the \fB:\fR
1751 and before the \fBw\fP, separated by \fB,\fR's.
1752 You can also mark these lines with \fBm\fR and
1753 then use an address of the form \fB\(aa\fR\fIx\fR\fB,\fB\(aa\fR\fIy\fR
1754 on the \fBw\fR command here.
1756 You can read another file into the buffer after the current line by using
1757 the \fB:r\fR command.
1758 You can similarly read in the output from a command, just use \fB!\fR\fIcmd\fR
1759 instead of a file name.
1761 If you wish to edit a set of files in succession, you can give all the
1762 names on the command line, and then edit each one in turn using the command
1763 \fB:n\fR. It is also possible to respecify the list of files to be edited
1764 by giving the \fB:n\fR command a list of file names, or a pattern to
1765 be expanded as you would have given it on the initial
1769 If you are editing large programs, you will find the \fB:ta\fR command
1770 very useful. It utilizes a data base of function names and their locations,
1771 which can be created by programs such as
1773 to quickly find a function whose name you give.
1774 If the \fB:ta\fR command will require the editor to switch files, then
1775 you must \fB:w\fR or abandon any changes before switching. You can repeat
1776 the \fB:ta\fR command without any arguments to look for the same tag
1779 More about searching for strings
1781 When you are searching for strings in the file with \fB/\fR and \fB?\fR,
1782 the editor normally places you at the next or previous occurrence
1783 of the string. If you are using an operator such as \fBd\fR,
1784 \fBc\fR or \fBy\fR, then you may well wish to affect lines up to the
1785 line before the line containing the pattern. You can give a search of
1786 the form \fB/\fR\fIpat\fR\fB/\-\fR\fIn\fR to refer to the \fIn\fR'th line
1787 before the next line containing \fIpat\fR, or you can use \fB\+\fR instead
1788 of \fB\-\fR to refer to the lines after the one containing \fIpat\fR.
1789 If you don't give a line offset, then the editor will affect characters
1790 up to the match place, rather than whole lines; thus use ``+0'' to affect
1791 to the line which matches.
1793 You can have the editor ignore the case of words in the searches it does
1794 by giving the command \fB:se ic\fR\s-2CR\s0.
1795 The command \fB:se noic\fR\s-2CR\s0 turns this off.
1797 Strings given to searches may actually be regular expressions.
1798 If you do not want or need this facility, you should
1804 only the characters \fB\(ua\fR and \fB$\fR are special in patterns.
1805 The character \fB\e\fR is also then special (as it is most everywhere in
1806 the system), and may be used to get at the
1807 an extended pattern matching facility.
1808 It is also necessary to use a \e before a
1809 \fB/\fR in a forward scan or a \fB?\fR in a backward scan, in any case.
1810 The following table gives the extended forms when \fBmagic\fR is set.
1814 \(ua at beginning of pattern, matches beginning of line
1815 $ at end of pattern, matches end of line
1816 \fB\&.\fR matches any character
1817 \e< matches the beginning of a word
1818 \e> matches the end of a word
1819 [\fIstr\fP] matches any single character in \fIstr\fP
1820 [\(ua\fIstr\fP] matches any single character not in \fIstr\fP
1821 [\fIx\fP\-\fIy\fP] matches any character between \fIx\fP and \fIy\fP
1822 * matches any number of the preceding pattern
1825 If you use \fBnomagic\fR mode, then
1826 the \fB. [\fR and \fB*\fR primitives are given with a preceding
1829 More about input mode
1831 There are a number of characters which you can use to make corrections
1832 during input mode. These are summarized in the following table.
1836 ^H deletes the last input character
1837 ^W deletes the last input word, defined as by \fBb\fR
1838 erase your erase character, same as \fB^H\fP
1839 kill your kill character, deletes the input on this line
1840 \e escapes a following \fB^H\fP and your erase and kill
1841 \s-2ESC\s0 ends an insertion
1842 \s-2DEL\s0 interrupts an insertion, terminating it abnormally
1843 \s-2CR\s0 starts a new line
1844 ^D backtabs over \fIautoindent\fP
1845 0^D kills all the \fIautoindent\fP
1846 \(ua^D same as \fB0^D\fP, but restores indent next line
1847 ^V quotes the next non-printing character into the file
1851 The most usual way of making corrections to input is by typing \fB^H\fR
1852 to correct a single character, or by typing one or more \fB^W\fR's to
1853 back over incorrect words. If you use \fB#\fR as your erase character
1854 in the normal system, it will work like \fB^H\fR.
1856 Your system kill character, normally \fB@\fR, \fB^X\fP or \fB^U\fR,
1858 the input you have given on the current line.
1859 In general, you can neither
1860 erase input back around a line boundary nor can you erase characters
1861 which you did not insert with this insertion command. To make corrections
1862 on the previous line after a new line has been started you can hit \s-2ESC\s0
1863 to end the insertion, move over and make the correction, and then return
1864 to where you were to continue. The command \fBA\fR which appends at the
1865 end of the current line is often useful for continuing.
1867 If you wish to type in your erase or kill character (say # or @) then
1868 you must precede it with a \fB\e\fR, just as you would do at the normal
1869 system command level. A more general way of typing non-printing characters
1870 into the file is to precede them with a \fB^V\fR. The \fB^V\fR echoes
1871 as a \fB\(ua\fR character on which the cursor rests. This indicates that
1872 the editor expects you to type a control character. In fact you may
1873 type any character and it will be inserted into the file at that point.*
1875 * This is not quite true. The implementation of the editor does
1876 not allow the \s-2NULL\s0 (\fB^@\fR) character to appear in files. Also
1877 the \s-2LF\s0 (linefeed or \fB^J\fR) character is used by the editor
1878 to separate lines in the file, so it cannot appear in the middle of a
1879 line. You can insert any other character, however, if you wait for the
1880 editor to echo the \fB\(ua\fR before you type the character. In fact,
1881 the editor will treat a following letter as a request for the corresponding
1882 control character. This is the only way to type \fB^S\fR or \fB^Q\fP,
1883 since the system normally uses them to suspend and resume output
1884 and never gives them to the editor to process.
1887 If you are using \fIautoindent\fR you can backtab over the indent which
1888 it supplies by typing a \fB^D\fR. This backs up to a \fIshiftwidth\fR
1890 This only works immediately after the supplied \fIautoindent\fR.
1892 When you are using \fIautoindent\fR you may wish to place a label at
1893 the left margin of a line. The way to do this easily is to type \fB\(ua\fR
1894 and then \fB^D\fR. The editor will move the cursor to the left margin
1895 for one line, and restore the previous indent on the next. You can also
1896 type a \fB0\fR followed immediately by a \fB^D\fR if you wish to kill
1897 all the indent and not have it come back on the next line.
1899 Upper case only terminals
1901 If your terminal has only upper case, you can still use
1904 system convention for typing on such a terminal.
1905 Characters which you normally type are converted to lower case, and you
1906 can type upper case letters by preceding them with a \e.
1907 The characters { ~ } | \(ga are not available on such terminals, but you
1908 can escape them as \e( \e\(ua \e) \e! \e\(aa.
1909 These characters are represented on the display in the same way they
1912 \*(dd The \e character you give will not echo until you type another
1919 is actually one mode of editing within the editor
1921 When you are running
1923 you can escape to the line oriented editor of
1925 by giving the command
1929 commands which were introduced above are available in
1933 commands can be invoked from
1936 Just give them without the \fB:\fR and follow them with a \s-2CR\s0.
1938 In rare instances, an internal error may occur in
1940 In this case you will get a diagnostic and be left in the command mode of
1942 You can then save your work and quit if you wish by giving a command
1943 \fBx\fR after the \fB:\fR which \fIex\fR prompts you with, or you can
1944 reenter \fIvi\fR by giving
1950 There are a number of things which you can do more easily in
1954 Systematic changes in line oriented material are particularly easy.
1955 You can read the advanced editing documents for the editor
1957 to find out a lot more about this style of editing.
1959 users often mix their use of
1963 command mode to speed the work they are doing.
1965 Open mode: vi on hardcopy terminals and ``glass tty's''
1968 If you are on a hardcopy terminal or a terminal which does not have a cursor
1969 which can move off the bottom line, you can still use the command set of
1971 but in a different mode.
1974 command, the editor will tell you that it is using
1977 This name comes from the
1981 which is used to get into the same mode.
1983 The only difference between
1988 mode is the way in which the text is displayed.
1992 mode the editor uses a single line window into the file, and moving backward
1993 and forward in the file causes new lines to be displayed, always below the
2004 command does not take parameters, but rather draws a window of context around
2005 the current line and then returns you to the current line.
2007 If you are on a hardcopy terminal,
2010 command will retype the current line.
2011 On such terminals, the editor normally uses two lines to represent the
2013 The first line is a copy of the line as you started to edit it, and you work
2014 on the line below this line.
2015 When you delete characters, the editor types a number of \e's to show
2016 you the characters which are deleted. The editor also reprints the current
2017 line soon after such changes so that you can see what the line looks
2020 It is sometimes useful to use this mode on very slow terminals which
2023 in the full screen mode.
2024 You can do this by entering
2033 Bruce Englar encouraged the early development of this display editor.
2034 Peter Kessler helped bring sanity to version 2's command layout.
2035 Bill Joy wrote versions 1 and 2.0 through 2.7,
2036 and created the framework that users see in the present editor.
2037 Mark Horton added macros and other features and made the
2038 editor work on a large number of terminals and Unix systems.