Bash (command line) shortcuts

Until today, I only used the following shortcuts on the command line:

  • ctrl+a → go to beginning of line
  • ctrl+e → go to end of line
  • ctrl+k → delete to end of line

And even though I was very frustrated by the fact that I had to use the mouse to select/copy/paste etc, it never really occured to me to google for "bash command line shortcuts"...

To make it short: bash uses the readline library.

The user documentation for readline is at:
http://cnswww.cns.cwru.edu/php/chet/readline/rluserman.html

All the shortcuts that exist on your machine can be found by using the 'bind' command:
$ bind -P | more

You'll have more shortcuts with:
$ bind -p | more

If you want to know how to use 'bind' to add shortcuts, check its help file:
$ help bind

Select/cut/paste require to first bind a shortcut to "kill-region":
$ bind "\C-xx": kill-region
(ctrl+x followed by x)

Now we need to select the string (create a "region").

A region is automatically created between a "mark" and the cursor. So, we only need to put the mark at one end of the region and to move the cursor to the other end.

To create a mark use: ctrl+@ or ctrl+space, then move the cursor, then hit ctrl+xx to "kill" the region.

Pasting requires ctrl+y.

But, the ctrl-y (Yank/paste) command works only within the application from where the string was "killed". The "kill-ring" is not shared by other applications (even though they may accept ctrl-y as a Yank command).

So, if you want to get a string from terminal and paste it outside (like select a command and paste it into a mail for ex), here is something that may not be the most efficient way to go, but it works:
echo string | pbcopy
or
echo "complex string" | pbcopy

For ex, to put the above line in the pastebpard, I'd do:
echo "echo \"complex string\" | pbcopy" | pbcopy