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

bashmacos

I use Ctrl and Ctrl on every Linux system I work on, but these key combinations don't work in bash on my Macbook Pro. It is running Snow Leopard, and I'm using the built in Terminal application.

The key combinations don't seem to be captured by anything before or by Terminal, because if I ssh to one of my Linux servers, I can use Ctrl/ to jump to the next/previous word on the command line. However, when I try this key combination in bash on my Macbook, I just get "C" for right arrow and "D" for left arrow.

Any ideas on how I can get these keys to work in darwin bash?

Best Answer

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)