|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)edittut.ms 6.1 (Berkeley) 5/27/86
6: .\"
7: .EH 'USD:14-%''Edit: A Tutorial'
8: .OH 'Edit: A Tutorial''USD:14-%'
9: .LP
10: .ds u \s-2UNIX\s0
11: .ll 5i
12: .nr LL 5i
13: .ND
14: .sp 4
15: .ce
16: \f3\s+2Edit: A Tutorial\s0\f1
17: .sp
18: .ce 3
19: .I
20: Ricki Blau
21: .sp
22: James Joyce
23: .R
24: .sp
25: .ce 3
26: Computing Services
27: University of California
28: Berkeley, California 94720
29: .sp 3
30: .ce
31: .I
32: ABSTRACT
33: .R
34: .sp
35: .LP
36: This narrative introduction to the use of the text editor
37: .I edit
38: assumes no prior familiarity with computers or with text editing.
39: Its aim is to lead the beginning \s-2UNIX\(dg\s+2 user through the
40: .FS
41: \(dgUNIX is a trademark of Bell Laboratories.
42: .FE
43: fundamental steps of writing and revising a file of text.
44: Edit,
45: a version of the text editor
46: .I ex,
47: was designed to provide an informative environment
48: for new and casual users.
49: .PP
50: We welcome comments and suggestions about this tutorial
51: and the \s-2UNIX\s+2 documentation in general.
52: .sp .5v
53: September 1981
54: .bp
55: .ll 6.5i
56: .nr LL 6.5i
57: .nr LT 6.5i
58: .ds u \s-2UNIX\s0
59: .ce
60: \s+2\f3Contents\f1\s0
61: .LP
62: .nf
63: Introduction\ \ \ 3
64: .sp
65: Session 1\ \ \4
66: .in +.5i
67: Making contact with \s-2UNIX\s+2\ \ \ 4
68: Logging in\ \ \4
69: Asking for \fIedit\fR\ \ \ 4
70: The ``Command not found'' message\ \ \ 5
71: A summary\ \ \5
72: Entering text\ \ \ 5
73: Messages from \fIedit\fR\ \ \ 5
74: Text input mode\ \ \ 6
75: Making corrections\ \ \ 6
76: Writing text to disk\ \ \ 7
77: Signing off\ \ \7
78: .in -.5i
79: .sp
80: Session 2\ \ \ 8
81: .in +.5i
82: Adding more text to the file\ \ \ 8
83: Interrupt\ \ \ 8
84: Making corrections\ \ \ 8
85: Listing what's in the buffer (p)\ \ \ 9
86: Finding things in the buffer\ \ \ 9
87: The current line\ \ \ 10
88: Numbering lines (nu)\ \ \ 10
89: Substitute command (s)\ \ \ 10
90: Another way to list what's in the buffer (z)\ \ \ 11
91: Saving the modified text\ \ \ 12
92: .in -.5i
93: .sp
94: Session 3\ \ \ 13
95: .in +.5i
96: Bringing text into the buffer (e)\ \ \ 13
97: Moving text in the buffer (m)\ \ \ 13
98: Copying lines (copy)\ \ \ 14
99: Deleting lines (d)\ \ \ 14
100: A word or two of caution\ \ \ 15
101: Undo (u) to the rescue\ \ \ 15
102: More about the dot (.) and buffer end ($)\ \ \ 16
103: Moving around in the buffer (+ and \-)\ \ \ 16
104: Changing lines (c)\ \ \ 17
105: .in -.5i
106: .sp
107: Session 4\ \ \ 18
108: .in +.5i
109: Making commands global (g)\ \ \ 18
110: More about searching and substituting\ \ \ 19
111: Special characters\ \ \ 19
112: Issuing \s-2UNIX\s+2 commands from the editor\ \ \ 20
113: Filenames and file manipulation\ \ \ 20
114: The file (f) command\ \ \ 20
115: Reading additional files (r)\ \ \ 21
116: Writing parts of the buffer\ \ \ 21
117: Recovering files\ \ \ 21
118: Other recovery techniques\ \ \ 21
119: Further reading and other information\ \ \ 22
120: Using \fIex\fR\ \ \ 22
121: .in -.5i
122: .sp
123: Index\ \ \ 23
124: .bp
125: .SH
126: .ce
127: \s+2Introduction\s0
128: .PP
129: Text editing using a terminal connected to a computer
130: allows you to create, modify, and print text
131: easily.
132: A
133: .I
134: text editor
135: .R
136: is a program
137: that assists you
138: as you create and modify text.
139: The text editor you will learn here is named
140: .I edit.
141: Creating text using edit is as easy as typing it
142: on an electric typewriter.
143: Modifying text involves telling the text editor
144: what you want to add, change, or delete.
145: You can review your text
146: by typing a command
147: to print the file contents
148: as they are currently.
149: Another program (which we do not discuss in this
150: document), a text formatter,
151: rearranges your text
152: for you into ``finished form.''
153: .PP
154: These lessons assume no prior familiarity with computers
155: or with text editing.
156: They consist of a series of text editing sessions
157: which lead you through the fundamental steps
158: of creating and revising text.
159: After scanning each lesson and before beginning the next,
160: you should try the examples at a terminal to get a feeling
161: for the actual process of text editing.
162: If you set aside some time for experimentation,
163: you will soon become familiar with using the
164: computer to write and modify text.
165: In addition to the actual use of the text editor,
166: other features of \s-2UNIX\s0 will be very important to your work.
167: You can begin to
168: learn about these other features by
169: reading one of the other tutorials
170: that provide a general introduction to the system.
171: You will be ready to proceed with this lesson as soon as
172: you are familiar with (1) your terminal and its special keys,
173: (2) how to login,
174: (3) and the ways of correcting typing errors.
175: Let's first define some terms:
176: .sp .5
177: .IP program 12
178: A set of instructions, given to the computer,
179: describing the sequence of steps the computer performs
180: in order to accomplish a specific task.
181: The task must be specific,
182: such as balancing your checkbook
183: or editing your text.
184: A general task,
185: such as working for world peace,
186: is something we can all do,
187: but not something we can currently write programs to do.
188: .IP UNIX
189: \s-2UNIX\s0 is a special type of program,
190: called an operating system, that supervises the machinery
191: and all other programs comprising the total
192: computer system.
193: .IP edit
194: .I edit
195: is the name of the \s-2UNIX\s0 text editor you will be learning to use,
196: and is a program that aids you in writing or revising text.
197: Edit was designed for beginning users,
198: and is a simplified version of an editor named
199: .I ex.
200: .IP file
201: Each \s-2UNIX\s0 account is allotted
202: space for the permanent storage of information,
203: such as programs, data or text.
204: A file is a logical unit of data,
205: for example, an essay, a program,
206: or a chapter from a book,
207: which is stored on a computer system.
208: Once you create a file,
209: it is kept until you instruct the system to remove it.
210: You may create a file during one \s-2UNIX\s0 session,
211: end the session,
212: and return to use it at a later time.
213: Files contain anything you choose to write and store in them.
214: The sizes of files vary to suit your needs;
215: one file might hold only a single number,
216: yet another might contain
217: a very long document or program.
218: The only way to save
219: information from one session to the next is to store it in a file,
220: which you will learn in Session 1.
221: .IP filename
222: Filenames are used to distinguish one file from another,
223: serving the same purpose as the labels of manila
224: folders in a file cabinet.
225: In order to write or access information in a file,
226: you use the name of that file in a \s-2UNIX\s0 command,
227: and the system will automatically locate the file.
228: .IP disk
229: Files are stored on an input/output device called a disk,
230: which looks something like a stack of phonograph records.
231: Each surface is coated with a material similar to that
232: on magnetic recording tape,
233: and information is recorded on it.
234: .IP buffer
235: A temporary work space, made available to the user
236: for the duration of a session of text editing
237: and used for creating and modifying
238: the text file.
239: We can think of the buffer as a blackboard that is
240: erased after each class, where each session with the editor
241: is a class.
242: .bp
243: .SH
244: .ce 1
245: \s+2Session 1\s0
246: .sp 1
247: .SH
248: Making contact with \s-1UNIX\s0
249: .PP
250: To use the editor you must first make contact with the computer
251: by logging in to \s-2UNIX\s0.
252: We'll quickly review the standard \s-2UNIX\s0 login procedure
253: for the two ways you can make contact:
254: on a terminal that is directly linked to the computer,
255: or over a telephone line where the computer answers your call.
256: .SH
257: Directly-linked terminals
258: .PP
259: Turn on your terminal and press the \s-1RETURN\s0 key.
260: You are now ready to login.
261: .SH
262: Dial-up terminals
263: .PP
264: If your terminal connects with the computer over a telephone line,
265: turn on the terminal, dial the system access number,
266: and, when you hear a high-pitched tone, place the
267: telephone handset in the acoustic coupler, if you are using one.
268: You are now ready to login.
269: .SH
270: Logging in
271: .PP
272: The message inviting you to login is:
273: .DS I 1i
274: login:
275: .DE
276: .LP
277: Type your login name, which identifies you to \s-2UNIX\s0,
278: on the same line as the login message,
279: and press \s-2RETURN\s+2.
280: If the terminal you are using
281: has both upper and lower case,
282: .B
283: be sure you enter your login name in lower case;
284: .R
285: otherwise \s-2UNIX\s0 assumes your terminal
286: has only upper case and will not recognize lower case
287: letters you may type.
288: \s-2UNIX\s0 types ``login:'' and you reply
289: with your login name, for example ``susan'':
290: .DS I 1i
291: login: \fBsusan\fR \fI(and press the \s-2RETURN\s0 key)\fR
292: .DE
293: (In the examples, input you would type appears in
294: .B "bold face"
295: to distinguish it from the responses from \s-2UNIX\s0.)
296: .PP
297: \s-2UNIX\s0 will next respond with a request for a password
298: as an additional precaution to prevent
299: unauthorized people from using your account.
300: The password will not appear when you type it,
301: to prevent others from seeing it.
302: The message is:
303: .DS I 1i
304: Password: \fI(type your password and press \s-2RETURN\s+2)\fR
305: .DE
306: If any of the information you gave during the login
307: sequence was mistyped or incorrect,
308: \s-2UNIX\s0 will respond with
309: .DS I 1i
310: Login incorrect.
311: .if t .sp .2v
312: .if n .sp 1
313: login:
314: .DE
315: in which case you should start the login process anew.
316: Assuming that you have successfully
317: logged in, \s-2UNIX\s0
318: will print the message of the day and eventually will present
319: you with a % at the beginning of a fresh line.
320: The % is the \s-2UNIX\s0 prompt symbol
321: which tells you that \s-2UNIX\s0 is ready to accept a command.
322: .bd I 3
323: .SH
324: Asking for \fIedit\fP
325: .fl
326: .bd I
327: .PP
328: You are ready to tell \s-2UNIX\s0 that you
329: want to work with edit, the text editor.
330: Now is a convenient time to choose
331: a name for the file of text you are about to create.
332: To begin your editing session,
333: type
334: .B edit
335: followed by a space and then the filename
336: you have selected; for example, ``text''.
337: After that,
338: press the \s-2RETURN\s0 key and wait for edit's response:
339: .DS I 1i
340: % \fBedit text\fP \fI(followed by a \s-2RETURN\s+2)\fR
341: "text" No such file or directory
342: :
343: .DE
344: If you typed the command correctly,
345: you will now be in communication with edit.
346: Edit has set aside a buffer for use as
347: a temporary working space during your current editing session.
348: Since ``text'' is a new file we are about to create
349: the editor was unable to find that file, which it
350: confirms by saying:
351: .DS I 1i
352: "text" No such file or directory
353: .DE
354: On the next line appears edit's prompt ``:'',
355: announcing that you are in \f2command mode\f1 and
356: edit expects a command from you.
357: You may now begin to create the new file.
358: .SH
359: The ``Command not found'' message
360: .PP
361: If you misspelled edit by typing, say, ``editor'',
362: this might appear:
363: .DS I 1i
364: % \fBeditor\fP
365: editor: Command not found
366: %
367: .DE
368: Your mistake in calling edit ``editor'' was
369: treated by \s-2UNIX\s0 as a request
370: for a program named ``editor''.
371: Since there is no program
372: named ``editor'',
373: \s-2UNIX\s0 reported that the program was ``not found''.
374: A new % indicates that \s-2UNIX\s0 is ready for another command,
375: and you may then enter the correct command.
376: .SH
377: A summary
378: .PP
379: Your exchange with \s-2UNIX\s0 as you logged in and made contact with edit
380: should look something like this:
381: .DS I 1i
382: login: \fBsusan\fP
383: Password:
384: \&... A Message of General Interest ...
385: % \fBedit text\fP
386: "text" No such file or directory
387: :
388: .DE
389: .SH
390: Entering text
391: .PP
392: You may now begin entering text into the buffer.
393: This is done by \fIappending\fP (or adding) text to whatever
394: is currently in the buffer.
395: Since there is nothing in the buffer at the moment,
396: you are appending text to nothing;
397: in effect,
398: since you are adding text to nothing
399: you are creating text.
400: Most edit commands have two equivalent forms:
401: a word that suggests what the command does,
402: and a shorter abbreviation of that word.
403: Many beginners find the full command names
404: easier to remember at first,
405: but once you are familiar with editing you may
406: prefer to type the shorter abbreviations.
407: The command to input text is ``append''.
408: (It may be abbreviated ``a''.)
409: Type
410: .B append
411: and press the \s-2RETURN\s0 key.
412: .DS I 1i
413: % \fBedit text
414: \fR:\|\fBappend
415: .R
416: .DE
417: .SH
418: .bd I 3
419: Messages from
420: .I edit
421: .fl
422: .bd I
423: .PP
424: If you make a mistake in entering a command and
425: type something that edit does not recognize,
426: edit will respond with a message
427: intended to help you diagnose your error.
428: For example, if you misspell the command to input text by typing,
429: perhaps, ``add'' instead of ``append'' or ``a'',
430: you will receive this message:
431: .DS I 1i
432: :\|\fBadd\fR
433: add: Not an editor command
434: :
435: .DE
436: When you receive a diagnostic message,
437: check what you typed in order to determine what
438: part of your command confused edit.
439: The message above means that edit
440: was unable to recognize your mistyped command
441: and, therefore, did not execute it.
442: Instead, a new ``:''
443: appeared to let you know that
444: edit is again ready to execute a command.
445: .SH
446: Text input mode
447: .PP
448: By giving the command ``append'' (or using the abbreviation ``a''),
449: you entered
450: .I
451: text input mode,
452: .R
453: also known as
454: .I
455: append mode.
456: .R
457: When you enter text input mode,
458: edit stops sending you a prompt.
459: You will not receive any prompts
460: or error messages
461: while in text input mode.
462: You can enter
463: pretty much anything you want on the lines.
464: The lines are transmitted one by one to the buffer
465: and held there during the editing session.
466: You may append as much text as you want, and
467: .I
468: when you wish to stop entering text lines you should
469: type a period as the only character on the line
470: and press the \s-2RETURN\s0 key.
471: .R
472: When you type the period and press \s-2RETURN\s0,
473: you signal that you want to stop appending text,
474: and edit responds by allowing
475: you to exit text input mode and reenter command mode.
476: Edit will again
477: prompt you for a command by printing ``:''.
478: .PP
479: Leaving append mode does not destroy the text in
480: the buffer.
481: You have to leave append
482: mode to do any of the other kinds of editing,
483: such as changing, adding, or printing text.
484: If you type a period as the first character and
485: type any other character on the same line,
486: edit will believe you want to remain in append mode
487: and will not let you out.
488: As this can be very frustrating,
489: be sure to type
490: .B only
491: the period and the \s-2RETURN\s0 key.
492: .PP
493: This is a good place to learn an important
494: lesson about computers and text: a blank space is
495: a character as far as a computer is concerned.
496: If you so much as type a period followed by a blank
497: (that is, type a period and then the space bar on the keyboard),
498: you will remain in append mode with the last line of text
499: being:
500: .DS I 1i
501: .B
502: .ps +2
503: \&.
504: .ps -2
505: .R
506: .DE
507: Let's say that you enter the lines
508: (try to type
509: .B exactly
510: what you see, including ``thiss''):
511: .DS I 1i
512: .B
513: This is some sample text.
514: And thiss is some more text.
515: Text editing is strange, but nice.
516: \&.
517: .R
518: .DE
519: The last line is the period followed by a \s-2RETURN\s0
520: that gets you out of append mode.
521: .SH
522: Making corrections
523: .PP
524: If you have read a general introduction to \s-2UNIX\s0,
525: you will recall that it is possible to erase individual
526: letters that you have typed.
527: This is done by typing the designated erase character
528: as many times as there are characters
529: you want to erase.
530: .PP
531: The usual erase character varies from place to place and
532: user to user. Often it
533: is the backspace (control-H),
534: so you can correct typing errors
535: in the line you are typing
536: by holding down the \s-1CTRL\s+1 key
537: and typing the ``H'' key. (Sometimes it is the DEL key.)
538: If you type the erase character
539: you will notice
540: that the terminal backspaces in the line you are on.
541: You can backspace over your error,
542: and then type what you want to be the rest of the line.
543: .PP
544: If you make a bad start
545: in a line
546: and would like to begin again,
547: you can either backspace to the beginning of the line
548: or you can use the at-sign ``@'' to erase everything on the line:
549: .DS I 1i
550: .B
551: Text edtiing is strange, but@
552: Text editing is strange, but nice.
553: .R
554: .fl
555: .bd S
556: .DE
557: When you type the at-sign (@), you erase
558: the entire line typed so far
559: and are given a fresh line to type on.
560: You may immediately begin to retype the line.
561: This, unfortunately, does not work after you type the
562: line and press \s-2RETURN\s+2.
563: To make corrections in lines that have been completed,
564: it is necessary to use the editing commands
565: covered in the next sessions.
566: .SH
567: Writing text to disk
568: .PP
569: You are now ready to edit the text. One common operation
570: is to write the text to disk as a file for safekeeping
571: after the session is over.
572: This is the only way to save information from one session to the next,
573: since the editor's buffer is temporary and will last only until the
574: end of the editing session.
575: Learning how to write a file to disk is second in
576: importance only to entering the text.
577: To write the contents of the buffer to a disk
578: file, use the command ``write''
579: (or its abbreviation ``w''):
580: .DS I 1i
581: :\|\fBwrite
582: .R
583: .DE
584: Edit will copy the contents of the buffer to a disk file.
585: If the file does not yet exist,
586: a new file will be created automatically
587: and the presence of a ``[New file]'' will be noted.
588: The newly-created file will be given the name specified when
589: you entered the editor, in this case ``text''.
590: To confirm that the disk file has been successfully written,
591: edit will repeat the filename and give
592: the number of lines and the total
593: number of characters in the file.
594: The buffer remains unchanged by the ``write'' command.
595: All of the lines that were written to disk will still be
596: in the buffer,
597: should you want to modify or add to them.
598: .PP
599: Edit must have a name for the file to be written.
600: If you forgot to indicate the name of the file
601: when you began to edit,
602: edit will print in response to your write command:
603: .DS I 1i
604: No current filename
605: .DE
606: If this happens, you can specify the filename in a new write command:
607: .DS I 1i
608: :\|\fBwrite text
609: .R
610: .DE
611: After the ``write'' (or ``w''), type a space and then the name of the file.
612: .SH
613: Signing off
614: .PP
615: We have done enough for this first lesson on using the
616: \s-2UNIX\s0 text editor, and are ready to quit the session with edit.
617: To do this we type ``quit'' (or ``q'') and press \s-2RETURN\s+2:
618: .DS I 1i
619: :\|\fBwrite
620: .R
621: "text" [New file] 3 lines, 90 characters
622: :\|\fBquit\fR
623: %
624: .DE
625: The % is from \s-2UNIX\s0 to tell you that your session with edit is
626: over and you may command \s-2UNIX\s0 further.
627: Since we want
628: to end the entire session at the terminal, we also need to
629: exit from \s-2UNIX\s0.
630: In response to the \s-2UNIX\s0 prompt of ``\|%\|''
631: type the command
632: .DS I 1i
633: %\|\fBlogout\fR
634: .DE
635: This will end your session with \s-2UNIX\s0, and will ready the
636: terminal for the next user.
637: It is always important to type \fBlogout\fR at the end of a session
638: to make absolutely sure no one
639: could accidentally stumble into your abandoned
640: session and thus gain access to your files,
641: tempting even the most honest of souls.
642: .sp 1
643: .PP
644: This is the end of the first session on \s-2UNIX\s0 text editing.
645: .bp
646: .TL
647: Session 2
648: .sp
649: .PP
650: Login with \s-2UNIX\s0 as in the first session:
651: .DS I 1i
652: login: \fBsusan\fP \fI(carriage return)\fR
653: Password: \fI(give password and carriage return)\fR
654: .if t .sp .2v
655: .if n .sp 1
656: \&... A Message of General Interest ...
657: %
658: .DE
659: When you indicate you want to edit,
660: you can specify the name of the file you worked on last time.
661: This will
662: start edit working, and it will fetch the contents of the
663: file into the buffer, so that you can resume editing the same file.
664: When edit has copied the file into the buffer, it
665: will repeat its name and tell
666: you the number of lines and characters it contains.
667: Thus,
668: .DS I 1i
669: .B
670: % edit text
671: .R
672: "text" 3 lines, 90 characters
673: :
674: .DE
675: means you asked edit to fetch
676: the file named ``text'' for editing,
677: causing it to copy the
678: 90 characters of text into the buffer.
679: Edit awaits
680: your further instructions,
681: and indicates this by its prompt character, the colon (:).
682: In this session, we will append more text to our file,
683: print the contents of the buffer, and learn to change the text of a line.
684: .SH
685: Adding more text to the file
686: .PP
687: If you want to add more to the end of your
688: text you may do so by using the append command to enter text input mode.
689: When ``append'' is the first command
690: of your editing session,
691: the lines you enter
692: are placed at the end of the buffer.
693: Here we'll use the abbreviation for the append command, ``a'':
694: .DS I 1i
695: :\|\fBa
696: This is text added in Session 2.
697: It doesn't mean much here, but
698: it does illustrate the editor.
699: \|\fB\s+2\&.\s-2
700: .R
701: .DE
702: You may recall that once you enter append mode
703: using the ``a'' (or ``append'') command,
704: you need to type a line containing only a period (.)
705: to exit append mode.
706: .SH
707: Interrupt
708: .PP
709: Should you press the \s-2RUB\s+2 key (sometimes labelled \s-2DELETE\s+2)
710: while working with edit,
711: it will send this message to you:
712: .DS I 1i
713: Interrupt
714: :
715: .DE
716: Any command that edit might be executing
717: is terminated by rub or delete,
718: causing edit to prompt you for a new command.
719: If you are appending text at the time,
720: you will exit from append mode
721: and be expected to give another command.
722: The line of text you were typing
723: when the append command was interrupted
724: will not be entered into the buffer.
725: .SH
726: Making corrections
727: .PP
728: If while typing the line you hit an incorrect key,
729: recall that
730: you may delete the incorrect character
731: or cancel the entire line of input by erasing in the usual way.
732: Refer either
733: to the last few pages of Session 1
734: if you need to review
735: the procedures for making a correction.
736: The most important idea to remember is that
737: erasing a character or cancelling a line must be done
738: before you press the \s-2RETURN\s+2 key.
739: .SH
740: Listing what's in the buffer (p)
741: .PP
742: Having appended text to what you wrote in Session 1,
743: you might want to see all the lines in the buffer.
744: To print the contents of the buffer, type the command:
745: .DS I 1i
746: :\|\fB1,$p
747: .R
748: .DE
749: The ``1''\(dg
750: .FS
751: \(dgThe numeral ``one'' is the top left-most key,
752: and should not be confused with the letter ``el''.
753: .FE
754: stands for line 1 of the buffer,
755: the ``$'' is a special symbol designating the last line
756: of the buffer,
757: and ``p'' (or \fBprint\fR) is the command to print from line 1
758: to the end of the buffer.
759: The command ``1,$p'' gives you:
760: .DS I 1i
761: This is some sample text.
762: And thiss is some more text.
763: Text editing is strange, but nice.
764: This is text added in Session 2.
765: It doesn't mean much here, but
766: it does illustrate the editor.
767: .DE
768: Occasionally, you may accidentally
769: type a character that can't be printed,
770: which can be done by striking a key
771: while the \s-2CTRL\s0 key is pressed.
772: In printing lines, edit uses a special notation to
773: show the existence of non-printing characters.
774: Suppose you had introduced the non-printing character ``control-A''
775: into the word ``illustrate''
776: by accidently pressing the \s-2CTRL\s0 key while
777: typing ``a''.
778: This can happen on many terminals
779: because the \s-2CTRL\s+2 key and the ``A'' key
780: are beside each other.
781: If your finger presses between the two keys,
782: control-A results.
783: When asked to print the contents of the buffer,
784: edit would display
785: .DS I 1i
786: it does illustr^Ate the editor.
787: .DE
788: To represent the control-A, edit shows ``^A''.
789: The sequence ``^'' followed by a capital
790: letter stands for the one character
791: entered by holding down the \s-2CTRL\s0 key and typing the letter
792: which appears after the ``^''.
793: We'll soon discuss the commands that can be used
794: to correct this typing error.
795: .PP
796: In looking over the text we see that
797: ``this'' is typed as ``thiss'' in the second line,
798: a deliberate error so we can learn to make corrections.
799: Let's correct the spelling.
800: .SH
801: Finding things in the buffer
802: .PP
803: In order to change something in the buffer we first need to
804: find it.
805: We can find ``thiss'' in the text we have
806: entered by looking at a listing
807: of the lines.
808: Physically speaking, we search the lines
809: of text looking for ``thiss'' and stop searching when
810: we have found it.
811: The way to tell edit to search for something
812: is to type it inside slash marks:
813: .DS I 1i
814: :\|\fB/thiss/
815: .R
816: .DE
817: By typing
818: .B /thiss/
819: and pressing \s-1RETURN\s0,
820: you instruct edit to search for ``thiss''.
821: If you ask edit to look for a pattern of characters
822: which it cannot find in the buffer,
823: it will respond ``Pattern not found''.
824: When edit finds
825: the characters ``thiss'', it will print the line of text
826: for your inspection:
827: .DS I 1i
828: And thiss is some more text.
829: .DE
830: Edit is now positioned in the buffer at the
831: line it just printed,
832: ready to make a change in the line.
833: .bp
834: .SH
835: The current line
836: .PP
837: Edit keeps track of the line in the buffer where it is located
838: at all times during an editing session.
839: In general, the line that has been most recently
840: printed, entered, or changed
841: is the current location in the buffer.
842: The editor is prepared to make changes
843: at the current location in the buffer,
844: unless you direct it to another location.
845: .PP
846: In particular,
847: when you bring a file into the buffer,
848: you will be located at the last line in the file,
849: where the editor left off copying the lines
850: from the file to the buffer.
851: If your first editing command is ``append'',
852: the lines you enter are added
853: to the end of the file,
854: after the current line \(em
855: the last line in the file.
856: .PP
857: You can refer to your current location in the buffer by the
858: symbol
859: period (.) usually known by the name ``dot''.
860: If you type ``.'' and carriage
861: return you will be instructing edit to print the current line:
862: .DS I 1i
863: :\|\fB\s+2\&.\s-2
864: .R
865: And thiss is some more text.
866: .DE
867: .PP
868: If you want to know the number of the current line,
869: you can type
870: .B \&.=
871: and press \s-2RETURN\s+2,
872: and edit will respond with the line number:
873: .DS I 1i
874: :\|\fB\s+2.\s-2=
875: .R
876: 2
877: .DE
878: If you type the number of any line and press \s-2RETURN\s+2,
879: edit will position you at that line and
880: print its contents:
881: .DS I 1i
882: :\|\fB2
883: .R
884: And thiss is some more text.
885: .DE
886: You should experiment with these commands
887: to gain experience in using them to make changes.
888: .SH
889: Numbering lines (nu)
890: .PP
891: The
892: .B
893: number (nu)
894: .R
895: command is similar to print,
896: giving both the number and the text of each printed line.
897: To see the number and the text of the current line type
898: .DS I 1i
899: :\|\fBnu
900: .R
901: \0\0\0\0\02\0\0And thiss is some more text.
902: .DE
903: Note that the shortest abbreviation for the number command is
904: ``nu'' (and not ``n'', which is used for a different command).
905: You may specify a range of lines
906: to be listed by the number command in the same way that lines
907: are specified for print.
908: For example, \f31,$nu\f1 lists all lines in the buffer with their
909: corresponding line numbers.
910: .SH
911: Substitute command (s)
912: .PP
913: Now that you have found the misspelled word,
914: you can change it from ``thiss'' to ``this''.
915: As far as edit is concerned,
916: changing things is a matter of
917: substituting one thing for another.
918: As
919: .I a
920: stood for
921: .I append,
922: so
923: .I s
924: stands for
925: .I substitute.
926: We will use the abbreviation ``s'' to reduce the chance
927: of mistyping the substitute command.
928: This command will instruct edit to make the change:
929: .DS I 1i
930: \f32s/thiss/this/\f1
931: .DE
932: We first indicate the line to be changed, line 2,
933: and then
934: type an ``s'' to indicate we want
935: edit to make a substitution.
936: Inside the first set of slashes
937: are the characters that we want to change,
938: followed by the characters to replace them,
939: and then a closing slash mark.
940: To summarize:
941: .DS I 1i
942: 2s/ \fIwhat is to be changed\fR / \fIwhat to change it to \fR/
943: .DE
944: If edit finds an exact match of the characters to be
945: changed it will make the change
946: .B only
947: in the first occurrence of the characters.
948: If it does not find the characters
949: to be changed, it will respond:
950: .DS I 1i
951: Substitute pattern match failed
952: .DE
953: indicating that your instructions could not be carried out.
954: When edit does find the characters that you want to change,
955: it will make the substitution and automatically print
956: the changed line, so that you can check that the correct substitution
957: was made.
958: In the example,
959: .DS I 1i
960: :\|\fB2s/thiss/this/
961: .R
962: And this is some more text.
963: .DE
964: line 2 (and line 2 only) will be searched for the characters
965: ``thiss'', and when the first exact match is found, ``thiss''
966: will be changed to ``this''.
967: Strictly speaking, it was not necessary above to
968: specify the number of the line to be changed.
969: In
970: .DS I 1i
971: :\|\fBs/thiss/this/
972: .R
973: .DE
974: edit will assume that we mean to change
975: the line where we are currently located (``.'').
976: In this case,
977: the command without a line number would have produced the same result
978: because we were already located
979: at the line we wished to change.
980: .PP
981: For another illustration of the substitute command,
982: let us choose the line:
983: .DS I 1i
984: Text editing is strange, but nice.
985: .DE
986: You can make this line a bit more positive
987: by taking out the characters ``strange, but\ '' so the line
988: reads:
989: .DS I 1i
990: Text editing is nice.
991: .DE
992: A command that will first position edit at the desired line
993: and then make the substitution is:
994: .DS I 1i
995: :\|\fB/strange/s/strange, but //
996: .R
997: .DE
998: .LP
999: What we have done here is combine our search with
1000: our substitution.
1001: Such combinations are perfectly legal,
1002: and speed up editing quite a bit
1003: once you get used to them.
1004: That is, you do not necessarily have to use
1005: line numbers to identify a line to edit.
1006: Instead, you may identify the line you want to change
1007: by asking edit to search for a specified pattern of letters
1008: that occurs in that line.
1009: The parts of the above command are:
1010: .TS
1011: .in +1i
1012: .nr 35 \n(.u
1013: .nf
1014: .ds #d .d
1015: .if \(ts\n(.z\(ts\(ts .ds #d nl
1016: .nr 80 0
1017: .nr 38 \w\f3/strange/\fP
1018: .if \n(80<\n(38 .nr 80 \n(38
1019: .nr 38 \w\f3s\fP
1020: .if \n(80<\n(38 .nr 80 \n(38
1021: .nr 38 \w\f3/strange, but //\fP
1022: .if \n(80<\n(38 .nr 80 \n(38
1023: .nr 81 0
1024: .nr 38 \wtells edit to find the characters ``strange'' in the text
1025: .if \n(81<\n(38 .nr 81 \n(38
1026: .nr 38 \wtells edit to make a substitution
1027: .if \n(81<\n(38 .nr 81 \n(38
1028: .nr 38 \wsubstitutes nothing at all for the characters ``strange, but ''
1029: .if \n(81<\n(38 .nr 81 \n(38
1030: .nr 38 1n
1031: .nr 79 0
1032: .nr 40 \n(79+(0*\n(38)
1033: .nr 80 +\n(40
1034: .nr 41 \n(80+(3*\n(38)
1035: .nr 81 +\n(41
1036: .nr TW \n(81
1037: .if t .if (\n(TW+\n(.o)>7.75i .tm Table at line 307 file ed2.tbl is too wide - \n(TW units
1038: .fc
1039: .nr #T 0
1040: .eo
1041: .de T#
1042: .ds #d .d
1043: .if \(ts\n(.z\(ts\(ts .ds #d nl
1044: .mk ##
1045: .nr ## -1v
1046: ..
1047: .ec
1048: .ta \n(80u \n(81u
1049: \&\h'|\n(40u'\f3/strange/\fP\h'|\n(41u'tells edit to find the characters ``strange'' in the text
1050: .ta \n(80u \n(81u
1051: \&\h'|\n(40u'\f3s\fP\h'|\n(41u'tells edit to make a substitution
1052: .ta \n(80u \n(81u
1053: \&\h'|\n(40u'\f3/strange, but //\fP\h'|\n(41u'substitutes nothing at all for the characters ``strange, but ''
1054: .fc
1055: .nr T. 1
1056: .T# 1
1057: .if \n(35>0 .fi
1058: .in -1i
1059: .TE
1060: .PP
1061: You should note the space after ``but'' in ``/strange, but /''.
1062: If you do not indicate that the space is to be taken out,
1063: your line will read:
1064: .DS I 1i
1065: .if t Text editing is nice.
1066: .if n Text editing is nice.
1067: .DE
1068: which looks a little funny
1069: because of the extra space between ``is'' and ``nice''.
1070: Again, we realize from this that a blank space
1071: is a real character to a computer, and in editing text
1072: we need to be aware of spaces
1073: within a line just as we would be aware of an ``a'' or
1074: a ``4''.
1075: .SH
1076: Another way to list what's in the buffer (z)
1077: .PP
1078: Although the print command is useful for looking at specific lines
1079: in the buffer,
1080: other commands may be more convenient for
1081: viewing large sections of text.
1082: You can ask to see a screen full of text at a time
1083: by using the command
1084: .B z.
1085: If you type
1086: .DS I 1i
1087: :\|\fB1z
1088: .R
1089: .DE
1090: edit will start with line 1 and continue printing lines,
1091: stopping either when the screen of
1092: your terminal is full
1093: or when the last line in the buffer has been printed.
1094: If you want to read the next segment of text, type the command
1095: .DS I 1i
1096: :\|\fBz
1097: .DE
1098: If no starting line number is given for the z command,
1099: printing will start at the ``current'' line, in this case the
1100: last line printed.
1101: Viewing lines in the buffer one screen full at a time
1102: is known as \fIpaging\fR.
1103: Paging can also be used to print
1104: a section of text on a hard-copy terminal.
1105: .SH
1106: Saving the modified text
1107: .PP
1108: This seems to be a good place to pause in our work,
1109: and so we should end the second session.
1110: If you (in haste) type ``q'' to quit the session
1111: your dialogue with edit will be:
1112: .DS I 1i
1113: :\|\fBq
1114: .R
1115: No write since last change (:quit! overrides)
1116: :
1117: .DE
1118: This is edit's warning that you have not written
1119: the modified contents of the buffer to disk.
1120: You run the risk of losing the work you did
1121: during the editing session since you typed the latest write
1122: command.
1123: Because in this lesson we have not written
1124: to disk at all, everything we have done
1125: would have been lost
1126: if edit had obeyed the \fBq\fR command.
1127: If you did not want to save the work done during
1128: this editing session, you would have to type ``q!''
1129: or (``quit!'')
1130: to confirm that you indeed wanted to end the session
1131: immediately,
1132: leaving the file as it was
1133: after the most recent ``write'' command.
1134: However,
1135: since you want to save what
1136: you have edited, you need to type:
1137: .DS I 1i
1138: :\|\fBw
1139: .R
1140: "text" 6 lines, 171 characters
1141: .DE
1142: and then follow with the commands to quit and logout:
1143: .DS I 1i
1144: :\|\fBq
1145: % \fBlogout\fR
1146: .DE
1147: and hang up the phone or turn off the terminal when
1148: \s-2UNIX\s0 asks for a name.
1149: Terminals connected to the port selector
1150: will stop after the logout command,
1151: and pressing keys on the keyboard will do nothing.
1152: .sp 1
1153: .PP
1154: This is the end of the second session on \s-2UNIX\s0 text editing.
1155: .bp
1156: .TL
1157: Session 3
1158: .SH
1159: Bringing text into the buffer (e)
1160: .PP
1161: Login to \s-2UNIX\s0 and make contact with edit.
1162: You should try to login without
1163: looking at the notes, but if you must
1164: then by all means do.
1165: .PP
1166: Did you remember to give the name of the file
1167: you wanted to edit?
1168: That is, did you type
1169: .DS I 1i
1170: % \fBedit text\fR
1171: .DE
1172: or simply
1173: .DS I 1i
1174: % \fBedit\fR
1175: .DE
1176: Both ways get you in contact with edit, but the first way
1177: will bring a copy of the file named ``text'' into
1178: the buffer.
1179: If you did forget to tell edit the name of your file,
1180: you can get it into the buffer by
1181: typing:
1182: .DS I 1i
1183: :\|\fBe text
1184: .R
1185: "text" 6 lines, 171 characters
1186: .DE
1187: The command
1188: .B edit,
1189: which may be abbreviated \fBe\fR,
1190: tells edit that you want
1191: to erase anything that might already be in
1192: the buffer and bring a copy of the file ``text'' into the buffer
1193: for editing.
1194: You may also use the edit (e) command to change files in
1195: the middle of an editing session,
1196: or to give edit the name of a new file that you want to create.
1197: Because the edit command clears the buffer,
1198: you will receive a warning if you try to edit a new file without
1199: having saved a copy of the old file.
1200: This gives you a chance to write the contents of the buffer to disk
1201: before editing the next file.
1202: .SH
1203: Moving text in the buffer (m)
1204: .PP
1205: Edit allows you to move lines of text
1206: from one location in the buffer to another
1207: by means of the
1208: .B move
1209: (\fBm\fR) command.
1210: The first two examples are for illustration only,
1211: though after you have read this Session
1212: you are welcome to return to them for practice.
1213: The command
1214: .DS I 1i
1215: :\|\fB2,4m$
1216: .R
1217: .DE
1218: directs edit to move lines 2, 3, and 4
1219: to the end of the buffer ($).
1220: The format for the move command is that you specify
1221: the first line to be moved, the last line to be moved,
1222: the move command ``m'', and the line after which
1223: the moved text is to be placed.
1224: So,
1225: .DS I 1i
1226: :\|\fB1,3m6
1227: .R
1228: .DE
1229: would instruct edit to move lines 1 through 3 (inclusive)
1230: to a location after line 6 in the buffer.
1231: To move only one line, say, line 4,
1232: to a location in the buffer after line 5,
1233: the command would be ``4m5''.
1234: .PP
1235: Let's move some text using the command:
1236: .DS I 1i
1237: :\|\fB5,$m1
1238: .R
1239: 2 lines moved
1240: it does illustrate the editor.
1241: .DE
1242: After executing a command that moves more than one line of the buffer,
1243: edit tells how many lines were affected by the move
1244: and prints the last moved line for your inspection.
1245: If you want to see more than just the last line,
1246: you can then
1247: use the print (p), z, or number (nu) command to view more text.
1248: The buffer should now contain:
1249: .DS I 1i
1250: This is some sample text.
1251: It doesn't mean much here, but
1252: it does illustrate the editor.
1253: And this is some more text.
1254: Text editing is nice.
1255: This is text added in Session 2.
1256: .DE
1257: You can restore the original order by typing:
1258: .DS I 1i
1259: :\|\fB4,$m1
1260: .R
1261: .DE
1262: or, combining context searching and the move command:
1263: .DS I 1i
1264: :\|\fB/And this is some/,/This is text/m/This is some sample/
1265: .R
1266: .DE
1267: (Do not type both examples here!)
1268: The problem with combining context searching
1269: with the move command
1270: is that your chance of making a typing error
1271: in such a long command is greater than
1272: if you type line numbers.
1273: .SH
1274: Copying lines (copy)
1275: .PP
1276: The
1277: .B copy
1278: command
1279: is used to make a second copy of specified lines,
1280: leaving the original lines where they were.
1281: Copy
1282: has the same format as the move command, for example:
1283: .DS I 1i
1284: :\|\fB2,5copy $
1285: .R
1286: .DE
1287: makes a copy of lines 2 through 5,
1288: placing the added lines after the buffer's end ($).
1289: Experiment with the copy command
1290: so that you can become familiar with how it works.
1291: Note that the shortest abbreviation for copy is
1292: \f3co\f1 (and
1293: not the letter ``c'', which has another meaning).
1294: .SH
1295: Deleting lines (d)
1296: .PP
1297: Suppose you want to delete
1298: the line
1299: .DS I 1i
1300: This is text added in Session 2.
1301: .DE
1302: from the buffer.
1303: If you know the number of the line to be deleted,
1304: you can type
1305: that number followed by
1306: \fBdelete\fR or \fBd\fR.
1307: This example deletes line 4,
1308: which is ``This is text added in Session 2.''
1309: if you typed the commands
1310: suggested so far.
1311: .DS I 1i
1312: :\|\fB4d
1313: .R
1314: It doesn't mean much here, but
1315: .DE
1316: Here ``4'' is the number of the line to be deleted,
1317: and ``delete'' or ``d'' is the command to delete the line.
1318: After executing the delete command,
1319: edit prints the line that has become the current line (``.'').
1320: .PP
1321: If you do not happen to know the line number
1322: you can search for the line and then delete it using this
1323: sequence of commands:
1324: .DS I 1i
1325: :\|\fB/added in Session 2./
1326: .R
1327: This is text added in Session 2.
1328: :\|\fBd
1329: .R
1330: It doesn't mean much here, but
1331: .DE
1332: The ``/added in Session 2./''
1333: asks edit to locate and print
1334: the line containing the indicated text,
1335: starting its search at the current line
1336: and moving line by line
1337: until it finds the text.
1338: Once you are sure that you have correctly specified the line
1339: you want to delete,
1340: you can enter the delete (d) command.
1341: In this case it is not necessary to
1342: specify a line number before the ``d''.
1343: If no line number is given,
1344: edit deletes the current line (``.''),
1345: that is, the line found by our search.
1346: After the deletion, your buffer should contain:
1347: .DS I 1i
1348: This is some sample text.
1349: And this is some more text.
1350: Text editing is nice.
1351: It doesn't mean much here, but
1352: it does illustrate the editor.
1353: And this is some more text.
1354: Text editing is nice.
1355: This is text added in Session 2.
1356: It doesn't mean much here, but
1357: .DE
1358: To delete both lines 2 and 3:
1359: .DS I 1i
1360: And this is some more text.
1361: Text editing is nice.
1362: .DE
1363: you type
1364: .DS I 1i
1365: :\|\f32,3d\f1
1366: 2 lines deleted
1367: .DE
1368: which specifies the range of lines from 2 to 3,
1369: and the operation on those lines \(em ``d'' for delete.
1370: If you delete more than one line
1371: you will receive a message
1372: telling you the number of lines deleted,
1373: as indicated in the example above.
1374: .PP
1375: The previous example assumes that you know the line numbers for
1376: the lines to be deleted.
1377: If you do not you might combine the search command
1378: with the delete command:
1379: .DS I 1i
1380: :\|\fB/And this is some/,/Text editing is nice./d
1381: .R
1382: .DE
1383: .SH
1384: A word or two of caution
1385: .PP
1386: In using the search function to locate lines to
1387: be deleted you should be
1388: .B
1389: absolutely sure
1390: .R
1391: the characters you give as the basis for the search
1392: will take edit to the line you want deleted.
1393: Edit will search for the first
1394: occurrence of the characters starting from where
1395: you last edited \-
1396: that is, from the line you see printed if you type dot (.).
1397: .PP
1398: A search based on too few
1399: characters may result in the wrong lines being deleted,
1400: which edit will do as easily as if you had meant it.
1401: For this reason, it is usually safer
1402: to specify the search and then delete in two separate steps,
1403: at least until you become familiar enough with using the editor
1404: that you understand how best to specify searches.
1405: For a beginner it is not a bad idea to double-check
1406: each command before pressing \s-2RETURN\s+2 to send the command on its way.
1407: .SH
1408: Undo (u) to the rescue
1409: .PP
1410: The
1411: .B
1412: undo (u)
1413: .R
1414: command has the ability to
1415: reverse the effects of the last command that changed the buffer.
1416: To undo the previous command, type
1417: ``u'' or ``undo''.
1418: Undo can rescue
1419: the contents of the buffer from many an unfortunate mistake.
1420: However, its powers are not unlimited,
1421: so it is still wise to be reasonably
1422: careful about the commands you give.
1423: .PP
1424: It is possible to undo only commands which
1425: have the power to change the buffer \(em for example,
1426: delete, append, move, copy, substitute, and even undo itself.
1427: The commands write (w) and edit (e), which interact with disk files,
1428: cannot be undone, nor can commands that do not change
1429: the buffer, such as print.
1430: Most importantly,
1431: the
1432: .B only
1433: command that can be reversed by undo
1434: is the
1435: last ``undo-able'' command you typed.
1436: You can use control-H and @ to change
1437: commands while you are typing them,
1438: and undo to reverse the effect of the commands
1439: after you have typed them and pressed \s-2RETURN\s+2.
1440: .PP
1441: To illustrate,
1442: let's issue an undo command.
1443: Recall that the last buffer-changing command we gave deleted
1444: the lines formerly numbered 2 and 3.
1445: Typing undo at this moment will reverse the effects
1446: of the deletion, causing those two lines to be
1447: replaced in the buffer.
1448: .DS I 1i
1449: :\|\fBu
1450: .R
1451: 2 more lines in file after undo
1452: And this is some more text.
1453: .DE
1454: Here again, edit informs you if the command affects more
1455: than one line,
1456: and prints
1457: the text of the line which is now ``dot'' (the current line).
1458: .SH
1459: More about the dot (.) and buffer end ($)
1460: .PP
1461: The function assumed by the symbol dot depends on its context.
1462: It can be used:
1463: .IP
1464: 1. to exit from append mode; we type dot (and only a dot) on
1465: a line and press \s-2RETURN\s+2;
1466: .IP
1467: 2. to refer to the line we are at in the buffer.
1468: .LP
1469: Dot can also be combined with the equal sign to get
1470: the number of the line currently being edited:
1471: .DS I 1i
1472: :\|\fB\&.=
1473: .R
1474: .DE
1475: If we type ``\fB.\fR='' we are asking for the number of the line,
1476: and if we type ``\fB.\fR'' we are asking for the text of the line.
1477: .PP
1478: In this editing session and the last, we used the dollar
1479: sign to indicate the end of the buffer
1480: in commands such as print, copy, and move.
1481: The dollar sign as a command asks edit to print the last
1482: line in the buffer.
1483: If the dollar sign is combined with the equal sign (\f3$=\f1)
1484: edit will print the line number corresponding to the
1485: last line in the buffer.
1486: .PP
1487: ``\fB.\fR'' and ``$'', then, represent line numbers.
1488: Whenever appropriate, these symbols can be used in
1489: place of line numbers in commands.
1490: For example
1491: .DS I 1i
1492: :\|\fB\s+2.\s-2,$d
1493: .R
1494: .DE
1495: instructs edit to delete all lines from the current line (\fB.\fR)
1496: to the end of the buffer.
1497: .SH
1498: Moving around in the buffer (+ and \-)
1499: .PP
1500: When you are editing
1501: you often want
1502: to go back and re-read a previous line.
1503: You could specify a context search for a line you want to
1504: read if you remember some of its text,
1505: but if you simply want to see what was written a few, say 3, lines
1506: ago, you can type
1507: .DS I 1i
1508: \-3p
1509: .DE
1510: This tells edit to move back to a position 3 lines
1511: before the current line (.)
1512: and print that line.
1513: You can move forward in the buffer similarly:
1514: .DS I 1i
1515: +2p
1516: .DE
1517: instructs edit to print the line that is 2
1518: ahead of your current position.
1519: .PP
1520: You may use ``+'' and ``\-'' in any command where edit
1521: accepts line numbers.
1522: Line numbers specified with ``+'' or ``\-''
1523: can be combined to print a range of lines.
1524: The command
1525: .DS I 1i
1526: :\|\fB\-1,+2copy$
1527: .R
1528: .DE
1529: makes a copy of 4 lines: the current line, the line before it,
1530: and the two after it.
1531: The copied lines will be placed after the last line
1532: in the buffer ($),
1533: and the original lines referred to by ``\-1'' and ``+2''
1534: remain where they are.
1535: .PP
1536: Try typing only ``\-''; you will move back one line just as
1537: if you had typed ``\-1p''.
1538: Typing the command ``+'' works similarly.
1539: You might also try typing a few plus or minus signs in a row
1540: (such as ``+++'') to see edit's response.
1541: Typing \s-2RETURN\s+2 alone on a line is the equivalent
1542: of typing ``+1p''; it will move you one line ahead in the buffer
1543: and print that line.
1544: .PP
1545: If you are at the last line of the buffer and try
1546: to move further ahead, perhaps by typing a ``+'' or
1547: a carriage return alone on the line,
1548: edit will remind you that you are at the end of the buffer:
1549: .sp
1550: .nf
1551: .ti 1i
1552: At end-of-file
1553: .br
1554: or
1555: .ti 1i
1556: Not that many lines in buffer
1557: .fi
1558: .LP
1559: Similarly, if you try to move to a position before the first line,
1560: edit will print one of these messages:
1561: .sp
1562: .nf
1563: .ti 1i
1564: Nonzero address required on this command
1565: .br
1566: or
1567: .ti 1i
1568: Negative address \- first buffer line is 1
1569: .fi
1570: .LP
1571: The number associated with a buffer line is the line's ``address'',
1572: in that it can be used to locate the line.
1573: .SH
1574: Changing lines (c)
1575: .PP
1576: You can also delete certain lines and
1577: insert new text in their place.
1578: This can be accomplished easily with the
1579: .B "change (c)"
1580: command.
1581: The change command instructs edit to delete specified lines
1582: and then switch to text input mode to
1583: accept the text that will replace them.
1584: Let's say you want to change the first two lines in the buffer:
1585: .DS I 1i
1586: This is some sample text.
1587: And this is some more text.
1588: .DE
1589: to read
1590: .DS I 1i
1591: This text was created with the \s-2UNIX\s0 text editor.
1592: .DE
1593: To do so, you type:
1594: .DS I 1i
1595: :\|\fB1,2c
1596: .R
1597: 2 lines changed
1598: .B
1599: This text was created with the \s-2UNIX\s0 text editor.
1600: \s+2\&.\s-2
1601: .R
1602: :
1603: .DE
1604: In the command
1605: .B 1,2c
1606: we specify that we want to change
1607: the range of lines beginning with 1 and ending with 2
1608: by giving line numbers as with the print command.
1609: These lines will be deleted.
1610: After you type \s-2RETURN\s+2 to end the change command,
1611: edit notifies you if more than one line will be changed
1612: and places you in text input mode.
1613: Any text typed on the following lines will be inserted into
1614: the position where lines were deleted by the change command.
1615: .B
1616: You will remain in text input mode until you exit in the usual way,
1617: by typing a period alone on a line.
1618: .R
1619: Note that the number of lines added to the buffer need not be
1620: the same as the number of lines deleted.
1621: .sp 1
1622: .PP
1623: This is the end of the third session on text editing with \s-2UNIX\s0.
1624: .bp
1625: .SH
1626: .ce 1
1627: \s+2Session 4\s0
1628: .sp
1629: .PP
1630: This lesson covers several topics, starting with
1631: commands that apply throughout the buffer,
1632: characters with special meanings,
1633: and how to issue \s-2UNIX\s0 commands while in the editor.
1634: The next topics deal with files:
1635: more on reading and writing,
1636: and methods of recovering files lost in a crash.
1637: The final section suggests sources of further information.
1638: .SH
1639: Making commands global (g)
1640: .PP
1641: One disadvantage to the commands we have used for
1642: searching or substituting is that if you
1643: have a number of instances of a word to change
1644: it appears that you have to type the command
1645: repeatedly, once for
1646: each time the change needs to be made.
1647: Edit, however, provides a way to make commands
1648: apply to the entire contents of the buffer \-
1649: the
1650: .B
1651: global (g)
1652: .R
1653: command.
1654: .PP
1655: To print all lines
1656: containing a certain sequence of characters
1657: (say, ``text'')
1658: the command is:
1659: .DS I 1i
1660: :\|\fBg/text/p
1661: .R
1662: .DE
1663: The ``g'' instructs edit to
1664: make a global search for all lines
1665: in the buffer containing the characters ``text''.
1666: The ``p'' prints the lines found.
1667: .PP
1668: To issue a global command, start by typing a ``g'' and then a search
1669: pattern identifying
1670: the lines to be affected.
1671: Then, on the same line, type the command to be
1672: executed for the identified lines.
1673: Global substitutions are frequently useful.
1674: For example,
1675: to change all instances of the word ``text'' to the word ``material''
1676: the command would be a combination of the global search and the
1677: substitute command:
1678: .DS I 1i
1679: :\|\fBg/text/s/text/material/g
1680: .R
1681: .DE
1682: Note the ``g'' at the end of the global command,
1683: which instructs edit to change
1684: each and every instance of ``text'' to ``material''.
1685: If you do not type the ``g'' at the end of the command
1686: only the
1687: .I first
1688: instance of ``text'' \fIin each line\fR will be changed
1689: (the normal result of the substitute command).
1690: The ``g'' at the end of the command is independent of the ``g''
1691: at the beginning.
1692: You may give a command such as:
1693: .DS I 1i
1694: :\|\fB5s/text/material/g
1695: .R
1696: .DE
1697: to change every instance of ``text'' in line 5 alone.
1698: Further, neither command will change ``text'' to ``material''
1699: if ``Text'' begins with a capital rather than a lower-case
1700: .I t.
1701: .PP
1702: Edit does not automatically print the lines modified by a
1703: global command.
1704: If you want the lines to be printed, type a ``p''
1705: at the end of the global command:
1706: .DS I 1i
1707: :\|\fBg/text/s/text/material/gp
1708: .R
1709: .DE
1710: You should be careful
1711: about using the global command in combination with any other \-
1712: in essence, be sure of what you are telling edit to do
1713: to the entire buffer.
1714: For example,
1715: .DS I 1i
1716: :\|\fBg/ /d
1717: .R
1718: 72 less lines in file after global
1719: .DE
1720: will delete every line containing a blank anywhere in it.
1721: This could adversely affect
1722: your document, since most lines have spaces between words
1723: and thus would be deleted.
1724: After executing the global command,
1725: edit will print a warning if the command added or deleted more than one line.
1726: Fortunately, the undo command can reverse
1727: the effects of a global command.
1728: You should experiment with the global command
1729: on a small file of text to see what it can do for you.
1730: .SH
1731: More about searching and substituting
1732: .PP
1733: In using slashes to identify a character string
1734: that we want to search for or change,
1735: we have always specified the exact characters.
1736: There is a less tedious way to
1737: repeat the same string of characters.
1738: To change ``text'' to ``texts'' we may type either
1739: .DS I 1i
1740: :\|\fB/text/s/text/texts/
1741: .R
1742: .DE
1743: as we have done in the past,
1744: or a somewhat abbreviated command:
1745: .DS I 1i
1746: :\|\fB/text/s//texts/
1747: .R
1748: .DE
1749: In this example, the characters to be changed
1750: are not specified \-
1751: there are no characters, not even a space,
1752: between the two slash marks
1753: that indicate what is to be changed.
1754: This lack of characters between the slashes
1755: is taken by the editor to mean
1756: ``use the characters we last searched for as the characters to be changed.''
1757: .PP
1758: Similarly, the last context search may be repeated
1759: by typing a pair of slashes with nothing between them:
1760: .DS I 1i
1761: :\|\fB/does/
1762: .R
1763: It doesn't mean much here, but
1764: :\|\fB//
1765: .R
1766: it does illustrate the editor.
1767: .DE
1768: (You should note that the search command found the characters ``does''
1769: in the word ``doesn't'' in the first search request.)
1770: Because no characters are specified for the second search,
1771: the editor scans the buffer for the next occurrence of the
1772: characters ``does''.
1773: .PP
1774: Edit normally searches forward through the buffer,
1775: wrapping around from the end of the buffer to the beginning,
1776: until the specified character string is found.
1777: If you want to search in the reverse direction,
1778: use question marks (?) instead of slashes
1779: to surround the characters you are searching for.
1780: .PP
1781: It is also possible
1782: to repeat the last substitution
1783: without having to retype the entire command.
1784: An ampersand (&) used as a command
1785: repeats the most recent substitute command,
1786: using the same search and replacement patterns.
1787: After altering the current line by typing
1788: .DS I 1i
1789: :\|\fBs/text/texts/
1790: .R
1791: .DE
1792: you type
1793: .DS I 1i
1794: :\|\fB/text/&
1795: .R
1796: .DE
1797: or simply
1798: .DS I 1i
1799: :\|\fB//&
1800: .R
1801: .DE
1802: to make the same change on the next line in the buffer
1803: containing the characters ``text''.
1804: .SH
1805: Special characters
1806: .PP
1807: Two characters have special meanings when
1808: used in specifying searches: ``$'' and ``^''.
1809: ``$'' is taken by the editor to mean ``end of the line''
1810: and is used to identify strings
1811: that occur at the end of a line.
1812: .DS I 1i
1813: :\|\fBg/text.$/s//material./p
1814: .R
1815: .DE
1816: tells the editor to search for all lines ending in ``text.''
1817: (and nothing else, not even a blank space),
1818: to change each final ``text.'' to ``material.'',
1819: and print the changed lines.
1820: .PP
1821: The symbol ``^'' indicates the beginning of a line.
1822: Thus,
1823: .DS I 1i
1824: :\|\fBs/^/1. /
1825: .R
1826: .DE
1827: instructs the editor to insert ``1.'' and a space at the beginning
1828: of the current line.
1829: .PP
1830: The characters ``$'' and ``^'' have special meanings only in the context
1831: of searching.
1832: At other times, they are ordinary characters.
1833: If you ever need to search for a character that has a special meaning,
1834: you must indicate that the
1835: character is to lose temporarily
1836: its special significance by typing another special character,
1837: the backslash (\\), before it.
1838: .DS I 1i
1839: :\|\fBs/\\\\\&$/dollar/
1840: .R
1841: .DE
1842: looks for the character ``$'' in the current
1843: line and replaces it by the word ``dollar''.
1844: Were it not for the backslash, the ``$'' would have represented
1845: ``the end of the line'' in your search
1846: rather than the character ``$''.
1847: The backslash retains its special significance
1848: unless it is preceded by another backslash.
1849: .SH
1850: Issuing \s-2UNIX\s0 commands from the editor
1851: .PP
1852: After creating several files with the editor,
1853: you may want to delete files
1854: no longer useful to you or ask for a list of your files.
1855: Removing and listing files are not functions of the editor,
1856: and so they require the use of \s-2UNIX\s0 system commands
1857: (also referred to as ``shell'' commands, as
1858: ``shell'' is the name of the program that processes \s-2UNIX\s0 commands).
1859: You do not need to quit the editor to execute a \s-2UNIX\s0 command
1860: as long as you indicate that it
1861: is to be sent to the shell for execution.
1862: To use the \s-2UNIX\s0 command
1863: .B rm
1864: to remove the file named ``junk'' type:
1865: .DS I 1i
1866: :\|\fB!rm junk
1867: .R
1868: !
1869: :
1870: .DE
1871: The exclamation mark (!)
1872: indicates that the rest of the line is to be processed as a shell command.
1873: If the buffer contents have not been written since the last change,
1874: a warning will be printed before the command is executed:
1875: .DS I 1i
1876: [No write since last change]
1877: .DE
1878: The editor prints a ``!'' when the command is completed.
1879: Other tutorials describe useful features of the system,
1880: of which an editor is only one part.
1881: .SH
1882: Filenames and file manipulation
1883: .PP
1884: Throughout each editing session,
1885: edit keeps track of the name of the file being edited as the
1886: .I "current filename."
1887: Edit remembers as the current filename the name given
1888: when you entered the editor.
1889: The current filename changes whenever the edit (e) command
1890: is used to specify a new file.
1891: Once edit has recorded a current filename,
1892: it inserts that name into any command where a filename has been omitted.
1893: If a write command does not specify a file,
1894: edit, as we have seen, supplies the current filename.
1895: If you are editing a file named ``draft3'' having 283 lines in it,
1896: you can have the editor write onto a different file
1897: by including its name in the write command:
1898: .DS I 1i
1899: :\fB\|w chapter3
1900: .R
1901: "chapter3" [new file] 283 lines, 8698 characters
1902: .DE
1903: The current filename remembered by the editor
1904: .I
1905: will not be changed as a result of the write command.
1906: .R
1907: Thus, if the next write command
1908: does not specify a name,
1909: edit will write onto the current file (``draft3'')
1910: and not onto the file ``chapter3''.
1911: .SH
1912: The file (f) command
1913: .PP
1914: To ask for the current filename, type
1915: .B file
1916: (or
1917: .B f ).
1918: In response, the editor provides current information about the buffer,
1919: including the filename, your current position, the number of
1920: lines in the buffer,
1921: and the percent of the distance through the file
1922: your current location is.
1923: .DS I 1i
1924: :\|\fBf
1925: .R
1926: "text" [Modified] line 3 of 4 --75%--
1927: .DE
1928: .\"The expression ``[Edited]'' indicates that the buffer contains
1929: .\"either the editor's copy of the existing file ``text''
1930: .\"or a file which you are just now creating.
1931: If the contents of the buffer have changed
1932: since the last time the file was written,
1933: the editor will tell you that the file has been ``[Modified]''.
1934: After you save the changes by writing onto a disk file,
1935: the buffer will no longer be considered modified:
1936: .DS I 1i
1937: :\|\fBw
1938: .R
1939: "text" 4 lines, 88 characters
1940: :\|\fBf
1941: .R
1942: "text" line 3 of 4 --75%--
1943: .DE
1944: .SH
1945: Reading additional files (r)
1946: .PP
1947: The
1948: \f3read (r)\f1 command allows you to add the contents of a file
1949: to the buffer
1950: at a specified location,
1951: essentially copying new lines
1952: between two existing lines.
1953: To use it, specify the line after which the new text will be placed,
1954: the \f3read (r)\f1 command,
1955: and then the name of the file.
1956: If you have a file named ``example'', the command
1957: .DS I 1i
1958: :\|\fB$r example
1959: .R
1960: "example" 18 lines, 473 characters
1961: .DE
1962: reads the file ``example''
1963: and adds it to the buffer after the last line.
1964: The current filename is not changed by the read command.
1965: .SH
1966: Writing parts of the buffer
1967: .PP
1968: The
1969: .B
1970: write (w)
1971: .R
1972: command can write all or part of the buffer
1973: to a file you specify.
1974: We are already familiar with
1975: writing the entire contents of the
1976: buffer to a disk file.
1977: To write only part of the buffer onto a file,
1978: indicate the beginning and ending lines before the write command,
1979: for example
1980: .DS I 1i
1981: :\|\fB45,$w ending
1982: .R
1983: .DE
1984: Here all lines from 45 through the end of the buffer
1985: are written onto the file named
1986: .I ending.
1987: The lines remain in the buffer
1988: as part of the document you are editing,
1989: and you may continue to edit the entire buffer.
1990: Your original file is unaffected
1991: by your command to write part of the buffer
1992: to another file.
1993: Edit still remembers whether you have saved changes to the buffer
1994: in your original file or not.
1995: .SH
1996: Recovering files
1997: .PP
1998: Although it does not happen very often,
1999: there are times \s-2UNIX\s+2 stops working
2000: because of some malfunction.
2001: This situation is known as a \fIcrash\fR.
2002: Under most circumstances,
2003: edit's crash recovery feature
2004: is able to save work to within a few lines of changes
2005: before a crash (or an accidental phone hang up).
2006: If you lose the contents of an editing buffer in a system crash,
2007: you will normally receive mail when you login that gives
2008: the name of the recovered file.
2009: To recover the file,
2010: enter the editor and type the command
2011: .B recover
2012: (\fBrec\fR),
2013: followed by the name of the lost file.
2014: For example,
2015: to recover the buffer for an edit session
2016: involving the file ``chap6'', the command is:
2017: .DS I 1i
2018: .R
2019: :\|\fBrecover chap6
2020: .R
2021: .DE
2022: Recover is sometimes unable to save the entire buffer successfully,
2023: so always check the contents of the saved buffer carefully
2024: before writing it back onto the original file.
2025: For best results,
2026: write the buffer to a new file temporarily
2027: so you can examine it without risk to the original file.
2028: Unfortunately,
2029: you cannot use the recover command
2030: to retrieve a file you removed
2031: using the shell command \f3rm\f1.
2032: .SH
2033: Other recovery techniques
2034: .PP
2035: If something goes wrong when you are using the editor,
2036: it may be possible to save your work by using the command
2037: .B preserve
2038: (\fBpre\fR),
2039: which saves the buffer as if the system had crashed.
2040: If you are writing a file and you get the message
2041: ``Quota exceeded'', you have tried to use more disk storage
2042: than is allotted to your account.
2043: .I
2044: Proceed with caution
2045: .R
2046: because it is likely that only a part
2047: of the editor's buffer is now present in the file you tried to write.
2048: In this case you should use the shell escape from the editor (!)
2049: to remove some files you don't need and try to write
2050: the file again.
2051: If this is not possible and you cannot find someone to help you,
2052: enter the command
2053: .DS I 1i
2054: :\|\fBpreserve
2055: .R
2056: .DE
2057: and wait for the reply,
2058: .DS I 1i
2059: File preserved.
2060: .DE
2061: If you do not receive this reply,
2062: seek help immediately.
2063: Do not simply leave the editor.
2064: If you do, the buffer will be lost,
2065: and you may not be able to save your file.
2066: If the reply is ``File preserved.''
2067: you can leave the editor
2068: (or logout)
2069: to remedy the situation.
2070: After a preserve, you can use the recover command
2071: once the problem has been corrected,
2072: or the \fB\-r\fR option of the edit command
2073: if you leave the editor and want to return.
2074: .PP
2075: If you make an undesirable change to the buffer
2076: and type a write command before discovering your mistake,
2077: the modified version will replace any previous version of the file.
2078: Should you ever lose a good version of a document in this way,
2079: do not panic and leave the editor.
2080: As long as you stay in the editor,
2081: the contents of the buffer remain accessible.
2082: Depending on the nature of the problem,
2083: it may be possible
2084: to restore the buffer to a more complete
2085: state with the undo command.
2086: After fixing the damaged buffer, you can again write the file
2087: to disk.
2088: .SH
2089: Further reading and other information
2090: .PP
2091: Edit is an editor designed for beginning and casual users.
2092: It is actually a version of a more powerful editor called
2093: .I ex.
2094: These lessons are intended to introduce you to the editor
2095: and its more commonly-used commands.
2096: We have not covered all of the editor's commands,
2097: but a selection of commands
2098: that should be sufficient to accomplish most of your editing tasks.
2099: You can find out more about the editor in the
2100: .I
2101: Ex Reference Manual,
2102: .R
2103: which is applicable to both
2104: .I ex
2105: and
2106: .I edit.
2107: One way to become familiar with the manual is to begin by reading
2108: the description of commands that you already know.
2109: .bd I 3
2110: .SH
2111: Using
2112: .I ex
2113: .fl
2114: .bd I
2115: .PP
2116: As you become more experienced with using the editor,
2117: you may still find that edit continues to meet your needs.
2118: However, should you become interested in using
2119: .I ex,
2120: it is easy to switch.
2121: To begin an editing session with
2122: .I ex,
2123: use the name
2124: .B ex
2125: in your command instead of
2126: .B edit.
2127: .PP
2128: Edit commands also work in
2129: .I ex,
2130: but the editing environment is somewhat different.
2131: You should be aware of a few differences
2132: between
2133: .I ex
2134: and
2135: .I edit.
2136: In edit, only the characters ``^'', ``$'', and ``\\'' have
2137: special meanings in searching the buffer
2138: or indicating characters to be changed by a substitute command.
2139: Several additional characters have special
2140: meanings in ex, as described in the
2141: .I
2142: Ex Reference Manual.
2143: .R
2144: Another feature of the edit environment prevents users from
2145: accidently entering two alternative modes of editing,
2146: .I open
2147: and
2148: .I visual,
2149: in which
2150: the editor behaves quite differently from normal command mode.
2151: If you are using ex and you encounter strange behavior,
2152: you may have accidently entered open mode by typing ``o''.
2153: Type the \s-2ESC\s0 key and then a ``Q''
2154: to get out of open or visual mode and back into
2155: the regular editor command mode.
2156: The document
2157: .I
2158: An Introduction to Display Editing with Vi\|\|
2159: .R
2160: provide full details of visual mode.
2161: .bp
2162: .SH
2163: .ce 1
2164: \s+2Index\s0
2165: .LP
2166: .sp 2
2167: .2C
2168: .nf
2169: addressing, \fIsee\fR line numbers
2170: ampersand, 20
2171: append mode, 6-7
2172: append (a) command, 6, 7, 9
2173: ``At end of file'' (message), 18
2174: backslash (\\), 21
2175: buffer, 3
2176: caret (^), 10, 20
2177: change (c) command, 18
2178: command mode, 5-6
2179: ``Command not found'' (message), 6
2180: context search, 10-12, 19-21
2181: control characters (``^'' notation), 10
2182: control-H, 7
2183: copy (co) command, 15
2184: corrections, 7, 16
2185: current filename, 21
2186: current line (\|.\|), 11, 17
2187: delete (d) command, 15-16
2188: dial-up, 5
2189: disk, 3
2190: documentation, 3, 23
2191: dollar ($), 10, 11, 17, 20-21
2192: dot (\f3\|.\|\f1) 11, 17
2193: edit (text editor), 3, 5, 23
2194: edit (e) command, 5, 9, 14
2195: editing commands:
2196: .in +.25i
2197: append (a), 6, 7, 9
2198: change (c), 18
2199: copy (co), 15
2200: delete (d), 15-16
2201: edit (text editor), 3, 5, 23
2202: edit (e), 5, 9, 14
2203: file (f), 21-22
2204: global (g), 19
2205: move (m), 14-15
2206: number (nu), 11
2207: preserve (pre), 22-23
2208: print (p), 10
2209: quit (q), 8, 13
2210: read (r), 22
2211: recover (rec), 22, 23
2212: substitute (s), 11-12, 19, 20
2213: undo (u), 16-17, 23
2214: write (w), 8, 13, 21, 22
2215: z, 12-13
2216: ! (shell escape), 21
2217: $=, 17
2218: +, 17
2219: \-, 17
2220: //, 12, 20
2221: ??, 20
2222: \&., 11, 17
2223: \&.=, 11, 17
2224: .in -.25i
2225: entering text, 3, 6-7
2226: erasing
2227: .in +.25i
2228: characters (^H), 7
2229: lines (@), 7
2230: .in -.25i
2231: error corrections, 7, 16
2232: ex (text editor), 23
2233: \fIEx Reference Manual\fR, 23
2234: exclamation (!), 21
2235: file, 3
2236: file (f) command, 21-22
2237: file recovery, 22-23
2238: filename, 3, 21
2239: global (g) command, 19
2240: input mode, 6-7
2241: Interrupt (message), 9
2242: line numbers, \fIsee also\fR current line
2243: .in +.25i
2244: dollar sign ($), 10, 11, 17
2245: dot (\|.\|), 11, 17
2246: relative (+ and \-), 17
2247: .in -.25i
2248: list, 10
2249: logging in, 4-6
2250: logging out, 8
2251: ``Login incorrect'' (message), 5
2252: minus (\-), 17
2253: move (m) command, 14-15
2254: ``Negative address\(emfirst buffer line is 1'' (message), 18
2255: ``No current filename'' (message), 8
2256: ``No such file or directory'' (message), 5, 6
2257: ``No write since last change'' (message), 21
2258: non-printing characters, 10
2259: ``Nonzero address required'' (message), 18
2260: ``Not an editor command'' (message), 6
2261: ``Not that many lines in buffer'' (message), 18
2262: number (nu) command, 11
2263: password, 5
2264: period (\|.\|), 11, 17
2265: plus (+), 17
2266: preserve (pre) command, 22-23
2267: print (p) command, 10
2268: program, 3
2269: prompts
2270: .in .25i
2271: % (\s-2UNIX\s0), 5
2272: : (edit), 5, 6, 7
2273: \0 (append), 7
2274: .in -.25i
2275: question (?), 20
2276: quit (q) command, 8, 13
2277: read (r) command, 22
2278: recover (rec) command, 22, 23
2279: recovery, \fIsee\fR\| file recovery
2280: references, 3, 23
2281: remove (rm) command, 21, 22
2282: reverse command effects (undo), 16-17, 23
2283: searching, 10-12, 19-21
2284: shell, 21
2285: shell escape (!), 21
2286: slash (/), 11-12, 20
2287: special characters (^, $, \\), 10, 11, 17, 20-21
2288: substitute (s) command, 11-12, 19, 20
2289: terminals, 4-5
2290: text input mode, 7
2291: undo (u) command, 16-17, 23
2292: \s-1UNIX\s0, 3
2293: write (w) command, 8, 13, 21, 22
2294: z command, 12-13
2295:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.