More and more often I find myself doing my work on the command line because it’s faster and more efficient. However, most users find that they end up spending a lot of time typing and re-typing commands, editting them, and then having to fix them. This is especially true if you’re new to the command line.
In addition, many times you want to run multiple commands with only slight variations. Perhaps you are benchmarking your Web server with ApacheBench and want to change some of its settings. Whatever you are trying to do, many shells actually offer a full suite of command-line editting shortcuts.
Some of them are built into the shell itself and others are configured elsewhere. Unfortunately, different distributions and different operating systems sometimes don’t have the same shortcut configuration. There are lots of lists out there for Bash keyboard shortcuts for Linux, and many of these work on Mac OS X, but they don’t all work.
So here’s a list as complete as I can make it of the default keyboard editting shortcuts configured on a Mac OS X machine running bash. An extra goodie is that some of these movement shortcuts work in any Coacoa text field, which means you don’t have to keep switching between bash’s command line movement shortcuts and the +arrow keys shortcuts anymore.
- CTRL+a
- Move cursor to beginning of the line. (I think of this as anchoring my cursor to the start.)
- CTRL+e
- Move cursor to the end of the line.
- CTRL+k
- Delete everything from under the cursor to the end of the line. (I think of this as killing the rest of my line.)
- CTRL+f
- Move forward one character. Identical to →.
- CTRL+b
- Move backward one character. Identical to ←.
- ESC+f
- Move forward one word.
- ESC+b
- Move backward one word.
- CTRL+u
- Delete everything from under the cursor the beginning of the line.
- CTRL+w
- Delete from under the cursor to the beginning of the word.
- CTRL+r
- Recall previous commands by searching for them.
- CTRL+t
- Transpose (swap) the two characters before the cursor with one another.
- ESC+t
- Transpose (swap) the two words before the cursor with one another.
- CTRL+y
- Paste the most previously-deleted string. Basically a sort of command-line editting “undo.”
- CTRL+z
- Stop the current process and send it to the background.
- CTRL+c
- Send an SIG_HUP to the current process. The net effect of doing this on the command line is that you cancel your current command and are presented with a blank new line.
- CTRL+d
- Send an end-of-file special character to the current process. Doing this at the command line is identical to closing your terminal window.
- CTRL+p
- Recall previous command executed. Identical to ↑.
- CTRL+d
- Forward delete.
- CTRL+h
- Backspace.
- CTRL+j
- Carriage return. Identical to hitting the return key.
- CTRL+m
- Newline. Identical to return.
- CTRL+l
- Repaint screen. This is useful if a program’s output is overwriting some text on your terminal. The effect of doing this on a command line is that you clear the screen. Note than in Apple’s Terminal.app, you can also press +K to clear the screen.
- CTRL-x + CTRL-x
- Mark current location in line and jump to beginning of line or second mark if defined. Repeat to jump to between both marks.
- CTRL+v
- Insert next character verbatim. This is how you escape control sequences. For instance, to literally send a
- CTRL+[
- Identical to ESC.
- ESC+c
- Capitolize word under cursor and move to next word.
- ESC+u
- Uppercase word under cursor and move to next word.
- ESC+l
- Lowercase word under cursor and move to next word.
- ESC+.
- Insert last word from previous command after cursor.
- TAB
- Auto-completes file, folder, and program names.
- ESC-?
- List the possible completions
- CTRL-x /
- List the possible filename completions
- ESC-/
- Attempt filename completion
- CTRL-x ~
- List the possible variable completions
- ESC- ~
- Attempt username completion
- CTRL-x $
- List the possible variable completions
- ESC-$
- Attempt variable completion
- CTRL-x @
- List the possible hostname completion
- ESC-@
- Attempt hostname completion
- CTRL-x !
- List the possible command completions
- ESC-!
- Attempt command completion
- ESC-TAB
- Attempt completion from previous commands in the history list
Note that this list assumes you’ve not reconfigured any of these shortcuts. Again, they’re the default keyboard assignments. Furthermore, they’re the default keyboard assignments for the default command-line editting mode, which is emacs mode. If you’re familiar with the vi
editor, you can change this to use all the cursor movement and deletion keys you’re familiar with by saying set -o vi
to your shell.
External references
Here’s some other people’s lists. They’re basically the same, but what the hey.
- BASH Command-Line Editing at lxpages – Also has a listing of vi-mode key shortcuts.
- The BASH Reference Manual for Command Line Editing
- Bash Features – Command Line Editing – discusses even more commands that
Readline
can do for you when using bash.
Very useful, if you “comline”, that is. Is there an advantage to comline to someone like me, who wants to efficiencise working with, say, CS3? and if yes, where can I learn that.
I’m almost certain there is something you do repetitvely that could be made more efficient if only you knew how.
Thanks for sharing this. :)
Thank you, thank you, thank you.
If you know emacs…. the key bindings are pulled directly from the emacs keybindings.
“set -o vi” will set the key bindings to the same as the vi editor if you know that and are more comfortable with that
“set -o emacs” will set it back to what you document above