Command line editing in bash is sometimes tiring when you have long commands accepting multiple arguments etc. Its hard to edit the command line when you want to change some parameter here and there… adding some parameters in the middle or even modifying existing parameters. I’ve seen people mostly using the arrow keys to go back and forth and deleting everything and typing in again, or sometimes using copy-paste from previous lines for editing those long long commands. I used to do it myself…
But then you can set command line editing modes in bash. This is where it helps a lot in editing those long long commands that you sometimes run.
The default mode is set to emacs, and you can choose between using the default or using vi mode. If you want to switch to vi mode, use the following: <pre class="console">
$ set -o vi
In vi mode, you can edit the command line as you would normally edit using vi. Press ESC in the command line to switch to vi command mode. And you can go forward editing with all vi habits you got… moving forward-word, backward-word, delete, cut, paste…etc. Typing “i” in command mode will bring you back in vi insert mode.
If you are not into vi, you can switch back to emacs mode using:
$ set -o emacs
I have never used emacs myself and being a fan of vi, I used to have vi mode in bash. But I was never happy with that mode…. seemed like too many keystrokes needed to switch between command/insert mode. Also some of the default shortcuts didn’t work in vi mode like control-a to move to beginning of line etc.
Using emacs mode, you don’t need to switch between command/insert mode like in vi. One disadvantage is I don’t know emacs and don’t wanna learn :)
So here’s I came up with - default emacs mode and a custom key mapping for most of the common editing functions. Yes, you can specify custom key mappings using a .inputrc in your home directory. You should probably go here if you want to find out about how to edit/manage your inputrc file….
I guess the most common editing functions that ppl would mostly care about would be (well its true for me at least)
Here’s the contents of my inputrc file:
# This file controls the behaviour of line input editing for # programs that use the Gnu Readline library. Existing programs # include FTP, Bash, and Gdb. # # You can re-read the inputrc file with C-x C-r. # Lines beginning with '#' are comments. # set editing-mode emacs $if mode=emacs "\C-f": forward-word "\C-b": backward-word "\C-a": beginning-of-line "\C-e": end-of-line "\C-u": unix-line-discard "\C-w": unix-word-rubout "\C-x\C-u": undo $endif
As in the comments, if you are editing you inputrc file its helpful to know you can reload your mappings with control-x control-r
I’m pretty sure if you have a handy .inputrc file, you won’t be frustrated next time when you have one of those long command line and need to edit them, you’ll be no longer using the arrow keys :)
Enjoy your bash command editing sessions…