Why is Ctrl-Arrow not working in bash on OS X?

OS X uses emacs key binding my default. This is true is virtually every application on OS X, it's rather nice. It means things like C-a and C-e are beginning/end of line. You also get the nifty backward-word-kill with M-backspace, oh, and kill-line with C-k.

This should mean that in your terminal forward/backward-word are bound to M-f and M-b, respectively (M = Meta = alt/option), however that is not the case. On OS X forward/backword-word are bound to M-→ and M-← by default.

You can alter this behavior by changing how the GNU Readline Library is configured for your account. This takes place in your ~/.inputrc file. You can get a big list of bindable commands with man readline as well as in the online documentation like this here..

So to answer your question, you want to remap what Readline does when it sees C-→ and C-← to do what it does on your linux server.

The syntax for a ~/.inputrc file is pretty simple for what you want to do: key-sequence: action.

This should be what you need to get the desired behavior:

"\e[5C": forward-word
"\e[5D": backward-word

Here's another page with additional useful bindings.

(You could probably get away with copying /etc/inputrc from your linux box to your OS X ~/.inputrc)


put in ~/.inputrc following lines:

"\e[5C": forward-word
"\e[5D": backward-word

UPDATE Jan 2020

On the newest versions of OSX the default shell is zsh. Therefore the magic incantation to get ctrl-arrowleft and ctrl-arrowright to work as expected is the following:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(put it into your .zshrc)


As @bhh1988 mentioned, the Mission Control configuration prevents the Ctrl-Keys working with the arrow keys in bash. I didn't want to interfere with those shortcuts, so I use the Option (i.e. Alt) key instead. Currently on Mojave using a German keyboard (don't know if that's relevant) I put the following in .inputrc to use Option-left-arrow and Option-right-arrow to move between words.

"\e\e[C": forward-word
"\e\e[D": backward-word