You're viewing a comment by Amos Shapira and its responses.

Amos Shapira Permalink
June 15, 2008, 12:35

Response to cjk:
1. Usually a command you want to fix in this way (or just generally want to build up on top of a previous command) is pretty recent in the history so you'll see what your "!" notation is going to catch.

2. If you are not sure what's going to happen after your fix then you can always add ":p" to the end of the command to cause the changed command to be printed and added to the history without actually executing it, then if you are happy with it then do "!!" (or ^R Enter if you insist).

For example:

$ echo a b c d
a b c d
$ ^d^replaced^:p
echo a b c replaced
$

Notice that the second echo was printed by the shell but wasn't actually executed. Then you can do:

$ !!
echo a b c replaced
a b c replaced
$

And now it was executed.

I'm not discarding the use of interactive editing altogether - I use it a lot. But there are instances when the "!" notation is more useful. e.g. when you want to use the same argument(s) from a previous command but with a completely different command - interactive editing will require you to erase the old command before you edit the new one, skipping backwards and forwards around the parts you want to keep. With "!" and the various ways to refer to previous command's arguments it's easier and saves lots of repetitive typing (I'm saying this from personal experience, not as a theoretical claim).

Reply To This Comment

(why do I need your e-mail?)

(Your twitter name, if you have one. (I'm @pkrumins, btw.))

Type the first letter of your name: (just to make sure you're a human)

Please preview the comment before submitting to make sure it's OK.