The command fc will allow visual editing of the previous command. If I change my mind in the editor, how do I stop the command from being executed. In vim, typing q! or q both result in the command being executed and CTRL-C doesn't work either. Is the only option to delete the command in the editor and then wq?
2 Answers
From vi you can type :cq
to exit without saving and with a non-zero return code. In this case the command will not be repeated.
Alternatively, you can usually suspend the editor with ctrl-z which gets you back to the shell without redoing the command. You still have to fg
to restart the editor, but the tmp file will no longer be around, so you can safely quit the editor. Or you can kill -9 %
this suspended editor.
I agree, it could be easier. Of course, you can always edit lines within bash using vi or emacs commands.
-
-
-
Unfortunately, vim is not POSIX compliant (besides enhancements there are deviations). For a generic help, it is usually a good idea not to depend on local or vendor unique enhancements. BTW: :q! is sufficient as a POSIX vi will exit != 0 in this case.– schilyAug 30, 2015 at 17:24
-
@schily Depending on vim being installed is probably safe in most cases, and in this case the asker specifically said
q!
didn't work for them Aug 30, 2015 at 20:17 -
2This is because there was no error and thus the exit code is 0. In vi it works to type :c (results in an illegal command message) and then to type :q! and the remembered error results in an exit code != 0. This however does not work in vim. My previous assumption that :q! always results in an exit code != 0 was wrong.– schilyAug 30, 2015 at 22:20
Perhaps, an easier way to remember is to delete the command (dd should do) and quit (ZZ
or any other way to quit with saving should do). IMHO, :cq
is quite arcane.