Annotation of 43BSDReno/share/doc/usd/13.edadv/ae6, revision 1.1.1.1

1.1       root        1: .\"    @(#)ae6 6.1 (Berkeley) 6/5/86
                      2: .\"
                      3: .NH
                      4: CUT AND PASTE WITH THE EDITOR
                      5: .PP
                      6: Now we move on to manipulating pieces of files _
                      7: individual lines or groups of lines.
                      8: This is another area where new users seem
                      9: unsure of themselves.
                     10: .SH
                     11: Filenames
                     12: .PP
                     13: The first step is to ensure that you know the
                     14: .UL ed
                     15: commands for reading and writing files.
                     16: Of course you can't go very far without knowing
                     17: .UL r
                     18: and
                     19: .UL w .
                     20: Equally useful, but less well known, is the `edit' command
                     21: .UL e .
                     22: Within
                     23: .UL ed ,
                     24: the command
                     25: .P1
                     26: e  newfile
                     27: .P2
                     28: says `I want to edit a new file called
                     29: .ul
                     30: newfile,
                     31: without leaving the editor.'
                     32: The
                     33: .UL e
                     34: command discards whatever you're currently working on
                     35: and starts over on 
                     36: .ul
                     37: newfile.
                     38: It's exactly the same as if you had quit with the
                     39: .UL q
                     40: command, then re-entered
                     41: .UL ed
                     42: with a new file name,
                     43: except that if you have a pattern remembered, then a command
                     44: like
                     45: .UL //
                     46: will still work.
                     47: .PP
                     48: If you enter
                     49: .UL ed
                     50: with the command
                     51: .P1
                     52: ed  file
                     53: .P2
                     54: .UL ed 
                     55: remembers the name of the file,
                     56: and any subsequent
                     57: .UL e ,
                     58: .UL r
                     59: or
                     60: .UL w
                     61: commands that don't contain a filename
                     62: will refer to this remembered file.
                     63: Thus
                     64: .P1 2
                     65: .ta .5i .6i .7i
                     66: ed  file1
                     67:  ... (editing) ...
                     68: w      (writes back in file1)
                     69: e  file2       (edit new file, without leaving editor)
                     70:  ... (editing on file2) ...
                     71: w      (writes back on file2)
                     72: .P2
                     73: (and so on) does a series of edits on various files
                     74: without ever leaving
                     75: .UL ed
                     76: and without typing the name of any file more than once.
                     77: (As an aside, if you examine the sequence of commands here,
                     78: you can see why many
                     79: UNIX
                     80: systems use
                     81: .UL e
                     82: as a synonym
                     83: for
                     84: .UL ed .)
                     85: .PP
                     86: You can find out the remembered file name at any time
                     87: with the
                     88: .UL f
                     89: command;
                     90: just type
                     91: .UL f
                     92: without a file name.
                     93: You can also change the name of the remembered file name with
                     94: .UL f ;
                     95: a useful sequence is
                     96: .P1
                     97: ed  precious
                     98: f  junk
                     99:  ... (editing) ...
                    100: .P2
                    101: which gets a copy of a precious file,
                    102: then uses
                    103: .UL f
                    104: to guarantee that a careless 
                    105: .UL w
                    106: command won't clobber the original.
                    107: .SH
                    108: Inserting One File into Another
                    109: .PP
                    110: Suppose you have a file called
                    111: `memo',
                    112: and you want the file called
                    113: `table'
                    114: to be inserted just after the reference to
                    115: Table 1.
                    116: That is, in
                    117: `memo'
                    118: somewhere is a line that says
                    119: .IP
                    120: Table 1 shows that ...
                    121: .LP
                    122: and the data contained in
                    123: `table'
                    124: has to go there,
                    125: probably so it will be formatted
                    126: properly by
                    127: .UL nroff
                    128: or
                    129: .UL troff .
                    130: Now what?
                    131: .PP
                    132: This one is easy.
                    133: Edit
                    134: `memo',
                    135: find
                    136: `Table 1',
                    137: and add the file
                    138: `table'
                    139: right there:
                    140: .P1
                    141: ed  memo
                    142: /Table 1/
                    143: .ft I
                    144: Table 1 shows that ... [response from ed]
                    145: .ft
                    146: \&\*.r  table
                    147: .P2
                    148: The critical line is the last one.
                    149: As we said earlier, the
                    150: .UL r
                    151: command reads a file;
                    152: here you asked for it to be read in right after
                    153: line dot.
                    154: An
                    155: .UL r
                    156: command without any address
                    157: adds lines at the end,
                    158: so it is the same as
                    159: .UL $r .
                    160: .SH
                    161: Writing out Part of a File
                    162: .PP
                    163: The other side of the coin is writing out part of
                    164: the document you're editing.
                    165: For example, maybe
                    166: you want to copy out into a separate file
                    167: that table from the previous example,
                    168: so it can be formatted and tested separately.
                    169: Suppose that in the file being edited 
                    170: we have
                    171: .P1
                    172: \&\*.TS
                    173:  ...[lots of stuff]
                    174: \&\*.TE
                    175: .P2
                    176: which is the way a table is set up for the
                    177: .UL tbl
                    178: program.
                    179: To isolate
                    180: the table
                    181: in a separate file called
                    182: `table',
                    183: first find the start of the table
                    184: (the `.TS' line), then write out the interesting part:
                    185: .P1
                    186: /^\*e\*.TS/
                    187: .ft I
                    188: \&\*.TS  [ed prints the line it found]
                    189: .ft R
                    190: \&\*.,/^\*e\*.TE/w table
                    191: .P2
                    192: and the job is done.
                    193: If you are confident, you can do it all at once with
                    194: .P1
                    195: /^\*e\*.TS/;/^\*e\*.TE/w table
                    196: .P2
                    197: and now you have two copies, one in the file you're still editing,
                    198: one in the file `table' you've just written.
                    199: .PP
                    200: The point is that the
                    201: .UL w
                    202: command can
                    203: write out a group of lines, instead of the whole file.
                    204: In fact, you can write out a single line if you like;
                    205: just give one line number instead of two.
                    206: For example, if you have just typed a horribly complicated line
                    207: and you know that it (or something like it) is going to be needed later,
                    208: then save it _ don't re-type it.
                    209: In the editor, say
                    210: .P1
                    211: a
                    212: \&...lots of stuff...
                    213: \&...horrible line...
                    214: \&\*.
                    215: \&\*.w  temp
                    216: a
                    217: \&\*.\*.\*.more stuff\*.\*.\*.
                    218: \&\*.
                    219: \&\*.r temp
                    220: a
                    221: \&\*.\*.\*.more stuff\*.\*.\*.
                    222: \&\*.
                    223: .P2
                    224: This last example is worth studying, to be sure you appreciate
                    225: what's going on.
                    226: .SH
                    227: Moving Lines Around
                    228: .PP
                    229: Suppose you want to 
                    230: move a paragraph from its present position in a paper
                    231: to the end.
                    232: How would you do it?
                    233: As a concrete example, suppose each paragraph in the paper
                    234: begins with the formatting command
                    235: `.PP'.
                    236: Think about it and write down the details before reading on.
                    237: .PP
                    238: The brute force way
                    239: (not necessarily bad)
                    240: is to write the paragraph onto a temporary file,
                    241: delete it from its current position,
                    242: then read in the temporary file at the end.
                    243: Assuming that you are sitting on the 
                    244: `.PP' command that begins
                    245: the paragraph, this is the sequence of commands:
                    246: .P1
                    247: \&\*.,/^\*e\*.PP/-w temp
                    248: \&\*.,//-d
                    249: $r temp
                    250: .P2
                    251: That is, from where you are now
                    252: (`\*.')
                    253: until one line before the next `\*.PP'
                    254: (`/^\*e\*.PP/\-')
                    255: write onto
                    256: `temp'.
                    257: Then delete the same lines.
                    258: Finally, read
                    259: `temp'
                    260: at the end.
                    261: .PP
                    262: As we said, that's the brute force way.
                    263: The easier way (often)
                    264: is to use the
                    265: .ul
                    266: move
                    267: command
                    268: .UL m
                    269: that 
                    270: .UL ed
                    271: provides _
                    272: it lets you do the whole set of operations
                    273: at one crack,
                    274: without any temporary file.
                    275: .PP
                    276: The 
                    277: .UL m
                    278: command
                    279: is like many other
                    280: .UL ed
                    281: commands in that it takes up to two line numbers in front
                    282: that tell what lines are to be affected.
                    283: It is also
                    284: .ul
                    285: followed
                    286: by a line number that tells where the lines are to go.
                    287: Thus
                    288: .P1
                    289: line1, line2 m line3
                    290: .P2
                    291: says to move all the lines between
                    292: `line1'
                    293: and
                    294: `line2'
                    295: after
                    296: `line3'.
                    297: Naturally, any of
                    298: `line1'
                    299: etc., can be patterns between slashes,
                    300: $
                    301: signs, or other ways to specify lines.
                    302: .PP
                    303: Suppose again that you're sitting at the first line of the
                    304: paragraph.
                    305: Then you can say
                    306: .P1
                    307: \&\*.,/^\*e\*.PP/-m$
                    308: .P2
                    309: That's all.
                    310: .PP
                    311: As another example of a frequent operation,
                    312: you can reverse the order of two adjacent lines
                    313: by moving the first one
                    314: to after the second.
                    315: Suppose that you are positioned at the first.
                    316: Then
                    317: .P1
                    318: m+
                    319: .P2
                    320: does it.
                    321: It says to move line dot to after one line after line dot.
                    322: If you are positioned on the second line,
                    323: .P1
                    324: m--
                    325: .P2
                    326: does the interchange.
                    327: .PP
                    328: As you can see, the
                    329: .UL m
                    330: command is more succinct and direct than
                    331: writing, deleting and re-reading.
                    332: When is brute force better anyway?
                    333: This is a matter of personal taste _
                    334: do what you have most confidence in.
                    335: The main difficulty with the
                    336: .UL m
                    337: command
                    338: is that if you use patterns to specify both the lines
                    339: you are moving and the target,
                    340: you have to take care that you specify them properly,
                    341: or you may well not move the lines you thought you did.
                    342: The result of a botched
                    343: .UL m
                    344: command can be a ghastly mess.
                    345: Doing the job a step at a time
                    346: makes it easier for you to verify at each step
                    347: that you accomplished what you wanted to.
                    348: It's also a good idea to issue a 
                    349: .UL w
                    350: command
                    351: before doing anything complicated;
                    352: then if you goof, it's easy to back up
                    353: to where you were.
                    354: .SH
                    355: Marks
                    356: .PP
                    357: .UL ed
                    358: provides a facility for marking a line
                    359: with a particular name so you can later reference it
                    360: by name
                    361: regardless of its actual line number.
                    362: This can be handy for moving lines,
                    363: and for keeping track of them even after they've been moved.
                    364: The
                    365: .ul
                    366: mark
                    367: command is
                    368: .UL k ;
                    369: the command
                    370: .P1
                    371: kx
                    372: .P2
                    373: marks the current line with the name `x'.
                    374: If a line number precedes the
                    375: .UL k ,
                    376: that line is marked.
                    377: (The mark name must be a single lower case letter.)
                    378: Now you can refer to the marked line with the address
                    379: .P1
                    380: \(fmx
                    381: .P2
                    382: .PP
                    383: Marks are most useful for moving things around.
                    384: Find the first line of the block to be moved, and mark it
                    385: with
                    386: .ul
                    387: \(fma.
                    388: Then find the last line and mark it with
                    389: .ul
                    390: \(fmb.
                    391: Now position yourself at the place where the stuff is to go
                    392: and say
                    393: .P1
                    394: \(fma,\(fmbm\*.
                    395: .P2
                    396: .PP
                    397: Bear in mind that only one line can have a particular
                    398: mark name associated with it
                    399: at any given time.
                    400: .SH
                    401: Copying Lines
                    402: .PP
                    403: We mentioned earlier the idea of saving a line
                    404: that was hard to type or used often,
                    405: so as to cut down on typing time.
                    406: Of course this could be more than one line;
                    407: then the saving is presumably even greater.
                    408: .PP
                    409: .UL ed
                    410: provides another command,
                    411: called
                    412: .UL t
                    413: (for `transfer')
                    414: for making a copy of a group of one or more lines
                    415: at any point.
                    416: This is often easier than writing and reading.
                    417: .PP
                    418: The 
                    419: .UL t
                    420: command is identical to the
                    421: .UL m
                    422: command, except that instead of moving lines
                    423: it simply duplicates them at the place you named.
                    424: Thus
                    425: .P1
                    426: 1,$t$
                    427: .P2
                    428: duplicates the entire contents that you are editing.
                    429: A more common use for
                    430: .UL t
                    431: is for creating a series of lines that differ only slightly.
                    432: For example, you can say
                    433: .P1
                    434: .ta 1i
                    435: a
                    436: \&..........  x  ......... (long line)
                    437: \&\*.
                    438: t\*.   (make a copy)
                    439: s/x/y/ (change it a bit)
                    440: t\*.   (make third copy)
                    441: s/y/z/ (change it a bit)
                    442: .P2
                    443: and so on.
                    444: .SH
                    445: The Temporary Escape `!'
                    446: .PP
                    447: Sometimes it is convenient to be able
                    448: to temporarily escape from the editor to do
                    449: some other
                    450: .UX
                    451: command,
                    452: perhaps one of the file copy or move commands
                    453: discussed in section 5,
                    454: without leaving the editor.
                    455: The `escape' command 
                    456: .UL !
                    457: provides a way to do this.
                    458: .PP
                    459: If you say
                    460: .P1
                    461: !any UNIX command
                    462: .P2
                    463: your current editing state is suspended,
                    464: and the
                    465: .UX
                    466: command you asked for is executed.
                    467: When the command finishes,
                    468: .UL ed
                    469: will signal you by printing another
                    470: .UL ! ;
                    471: at that point you can resume editing.
                    472: .PP
                    473: You can really do
                    474: .ul
                    475: any
                    476: .UX
                    477: command, including another 
                    478: .UL ed .
                    479: (This is quite common, in fact.)
                    480: In this case, you can even do another
                    481: .UL ! .
                    482: .PP
                    483: On Berkeley 
                    484: .UX
                    485: systems, there is an additional (and preferable) mechanism called
                    486: .ul
                    487: job control
                    488: which lets you suspend your edit session (or, for that matter,
                    489: any program), return to the shell from 
                    490: which you invoked that program, and issue any commands, then resume
                    491: the program from the point where it was stopped.  See
                    492: .ul
                    493: An Introduction to the C Shell
                    494: for more details.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.