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!