Annotation of 43BSDTahoe/new/help/src/cshell/history, revision 1.1.1.1

1.1       root        1: .TI CSHELL/HISTORY
                      2: Reusing Previous Commands and Command Parts [DRAFT]
                      3: 
                      4: 
                      5: History substitution allows you to include special, easily-typed
                      6: constructs within a command and have the C shell replace them
                      7: with parts of previous command lines, or events,
                      8: possibly with small changes.
                      9: Previous command lines are called events instead of commands
                     10: in order to emphasize that events contain all the special constructs
                     11: you entered originally (except history constructs).
                     12: The history feature makes it easy for you to redo a previous command,
                     13: to redo a previous command with a correction, and to re-use
                     14: previous command parts.
                     15: 
                     16: Although these interactive applications predominate,
                     17: there are two non-interactive uses:  defining the arguments to shell
                     18: aliases and setting the shell's prompt to contain the current event number.
                     19: To use alias arguments extensively requires the thorough grounding
                     20: in history subtleties that only a systematic approach can give,
                     21: and as the mechanisms involved are very complex and not particularly
                     22: powerful I will postpone a systematic approach until the end.
                     23: 
                     24: Setting the shell's prompt is such a special and simple case that I will
                     25: deal with it now.
                     26: If you set your prompt (usually "% ") to any string containing !
                     27: (which you must quote using \\!),
                     28: the shell will replace the ! with the current event number when it
                     29: prints the prompt.
                     30: For instance, to set your prompt to contain the event number
                     31: followed by a string of your choosing, you might do
                     32: .IP
                     33: set prompt = "\\! Command Me O Great One: "
                     34: .LP
                     35: Note that ! can only be prevented its special meaning by placing a \\
                     36: before it; no other kind of quoting will work.
                     37: 
                     38: 
                     39: History for the Lazy Typist
                     40: 
                     41: A pre-requisite for gaining access to events (previous command lines)
                     42: prior to the very last one is to tell the C shell how many events
                     43: to keep track of.
                     44: Do this by setting the C shell variable "history" to a
                     45: number greater than one.
                     46: Thus the command
                     47: .IP
                     48: set history = 20
                     49: .LP
                     50: will cause the shell to keep a record of your previous 20 events
                     51: in an internal list called the history list.
                     52: You can display the current history list at any time
                     53: by typing the command "history".
                     54: If you want to the history list to be saved when you logout,
                     55: and then be reinstated when you login next,
                     56: set the variable "savehist" to the same number.
                     57: To have the these variables set automatically upon logging-in,
                     58: enter the appropriate commands into your ".cshrc" file.
                     59: 
                     60: All history substitutions are triggered on a command line
                     61: when the user enters special constructs using the
                     62: characters ! and ^ (circumflex).
                     63: Whenever the shell makes a history substitution, it always
                     64: displays the resulting command as you would have entered it
                     65: without using the history feature.
                     66: So if the result is other than you expected,
                     67: you have a chance to interrupt the command before it does harm.
                     68: 
                     69: The ^ has only one purpose, and that is to re-do the last command
                     70: with a correction using a command of the form
                     71: .IP
                     72: \fI^oldstring^newstring\fP
                     73: .LP
                     74: It works something like the substitute command in the editor,
                     75: but with the restriction that \fIoldstring\fP
                     76: be entirely contained in a command word and that none of the
                     77: special characters significant to the editor have any meaning here.
                     78: For example,
                     79: .IP
                     80: .nf
                     81: % nroff -ms -Tdtc intro chap1 chap2
                     82: Cannot open intro
                     83: % ^tro^troduction
                     84: nroff -ms -Tdtc introduction chap1 chap2
                     85: .LP
                     86: corrects a mistaken file name (the shell printed the resulting command
                     87: before executing it), but the following fails:
                     88: .IP
                     89: .nf
                     90: % ^o c^oduction c
                     91: Modifier failed
                     92: .LP
                     93: As with the editor, substitutions of this type occur at the
                     94: first possible point in the command line:
                     95: .IP
                     96: .nf
                     97: % ^ro^roduction
                     98: nroductionff -ms -Tdtc intro chap1 chap2
                     99: nroductionff: Command not found.
                    100: .LP
                    101: The restrictions on this construct make some kinds of corrections
                    102: impossible using history.
                    103: 
                    104: Another very useful aspect of history is the ability to re-use the
                    105: last word of the last command using the !$ construct.
                    106: Typically, a command takes a filename as the last argument,
                    107: and the next command will likely include the filename again
                    108: as the last argument, and the next, etc.
                    109: The command sequence below demonstrates this labor-saving device.
                    110: .LP
                    111: .nf
                    112: .ta 3.5i
                    113: % vi chapter15.4.new   % myCprogram
                    114: % spell !$     % vi !$.c
                    115: spell chapter15.4.new  vi myCprogram.c
                    116: % nroff -ms !$ > out   % cc !$
                    117: nroff -ms chapter15.4.new > out        cc myCprogram.c
                    118: % more !$      % pr !$ | lpr
                    119: more out       pr myCprogram.c | lpr
                    120: .LP
                    121: A previous event (command) can be redone without changes by
                    122: using the !\fIevent\fP construct, where you replace
                    123: \fIevent\fP with the first few letters of a previous event.
                    124: Typically, useful work during a terminal session consists of
                    125: refining a project with the editor, testing it out, refining some more,
                    126: then testing some more, etc., and often this means revisiting the same
                    127: commands time and again.
                    128: Here is a sample terminal session illustrating how you can take advantage 
                    129: of such behavior.
                    130: .LP
                    131: .nf
                    132: % more mytext  % !v
                    133: mytext: No such file or directory      vi mytext
                    134: % cd confidential      % !s
                    135: % !mor spell mytext
                    136: more mytext    % nroff-ms !$ | more
                    137: mytext: Permission denied      nroff-ms mytext
                    138: % chmod 644 !$ nroff-ms: Command not found.
                    139: chmod 644 mytext       % ^ff-^ff -
                    140: % !m   nroff -ms mytext | more
                    141: more mytext    % !v
                    142: % vi !$        vi mytext
                    143: vi mytext      % !n
                    144: % spell !$     nroff -ms mytext | more
                    145: spell mytext   % logout
                    146: .LP
                    147: Previous commands may also be specified after ! by using an event
                    148: number, a numerical offset from the current event, or with the
                    149: ?\fIstring\fP construct, which finds the last event containing
                    150: \fIstring\fP not necessarily at the beginning.
                    151: You can find out event numbers with the "history" command, and
                    152: just type, say !14, to redo event number 14.
                    153: A numerical offset such as !-2 will redo the next to last event.
                    154: As a special case, !! redoes the last event.
                    155: 
                    156: Sometimes you want to redo a previous command with one of the
                    157: above constructs, but only after making a change.
                    158: This is possible by placing a \fB:s^\fIoldstring\fB^\fInewstring\fR
                    159: construct after the \fB!\fIevent\fR event specifier.
                    160: Moreover, the change can be made throughout the event by
                    161: putting a \fBg\fR before the \fBs\fR.
                    162: If the history list contained
                    163: .IP
                    164: .nf
                    165: 53 more /usr/man/man1/csh.1
                    166: 54 readnews -n net.general net.micro net.announce
                    167: 55 nroff -ms -Tlpr mytext | lpr
                    168: 56 nroff -ms paper > outfile
                    169: 57 cp chap1 chap1.old
                    170: .LP
                    171: the following commands could exercise these ideas as shown:
                    172: .IP
                    173: .nf
                    174: % !54
                    175: readnews -n net.general net.micro net.announce
                    176: % !nro
                    177: nroff -ms paper > outfile
                    178: % !?-Tlpr
                    179: nroff -ms -Tlpr mytext | lpr
                    180: % !more:s^man1^cat1
                    181: more /usr/man/cat1/csh.1
                    182: % !-2:s^mytext^paper
                    183: nroff -ms -Tlpr paper | lpr
                    184: % !cp:gs^chap1^chap2
                    185: cp chap2 chap2.old
                    186: .LP
                    187: This concludes the section describing those history features
                    188: relevant to most normal practices.
                    189: 
                    190: 
                    191: History for Masochists
                    192: 
                    193: Any history construct whatever is a special case, very often
                    194: abbreviated, of the following form for the general history construct:
                    195: .IP
                    196: .BI ! event-specifier : word-specifier : modifier : modifier ...
                    197: 
                    198: 
                    199: [to be continued ... jak]

unix.superglobalmegacorp.com

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