I use !$
(11.3) a lot.
But my favorite bash (and csh)
history substitution is !:
n
*
,
where n
is a number from 0 to 9.
It means "take arguments n
through the last
argument on the previous command line."
Since I tend to use more than one argument with UNIX commands, this
lets me type the arguments (usually filenames) only once.
For example, to use
RCS (20.14)
and make an edit to article files named 1171, 6830,
and 2340 for this book, I did:
%co -l 1171 6830 2340
RCS/1171,v -> 1171 ... RCS/2340,v -> 2340 revision 1.8 (locked) done %vi !:2*
vi 1171 6830 2340 3 files to edit ... %ci -m"Changed TERM xref." !*
ci -m"Changed TERM xref." 1171 6830 2340 ...
In the first command line (co
), I typed the filenames as arguments 2,
3, and 4.
In the second command line (vi
), I used !:2*
;
that grabbed arguments 2 through the last (in this case, argument 4) from
the first command line.
The result was a second command line that had those three filenames as its
arguments 1, 2, and 3.
So, in the third command line (ci
), I used !*
to
pick arguments 1 through the last from the previous (second) command line.
(!*
is shorthand for !:1*
.)
You can also grab arguments from previous command lines.
For example, !em:2*
grabs the second through last arguments on
the previous emacs command line (command line starting with "em").
There are lots more of these in article
11.7.
If those look complicated, they won't be for long. Just learn to count to the first argument you want to grab. It took me years to start using these substitutions - but they've saved me so much typing that I'm sorry I didn't get started earlier!
-