Terminal problem with Ctrl + Arrow and Shift + Arrow keys
I am running Mavericks on a new Macbook Pro. When I use the Ctrl and Shift keys together with the arrow keys, I get some sort of key codes as output in the terminal. I am pretty sure that this problem is new and that it didn't happen a few days ago. But I am not 100% sure. Anyway, this is what happens:
If I press Ctrl+← (Left arrow), ;5D
is output in the terminal. Similarly:
-
Ctrl+→ (Right arrow) outputs
;5C
-
Shift+← (Left arrow) outputs
;2D
-
Shift+→ (Right arrow) outputs
;2C
As I mentioned, I am pretty sure that before today I could use those shortcuts to move between words and select text. Has anyone seen this before? I have already looked through some of the existing questions about arrow key shortcuts, but I have found no references to this exact problem.
Also, note that I have turned off the keyboard shortcut that moves between desktops using the Ctrl + arrow keys.
Solution 1:
The same thing happens on my 10.9 and 10.8 VMs. Control-arrows and shift-arrows don't do anything by default in bash. Where were you even using shift-arrows to select text? emacs or vim?
If you want to use control-left and control-right to move between words in bash, add these lines to ~/.inputrc
:
"\e[1;5C": forward-word
"\e[1;5D": backward-word
To use shift-arrows in Emacs, map shift-up to \e[1;2A
, shift-down to \e[1;2B
, shift-right to \e[1;2C
, and shift-left to \e[1;2D
. If pressing shift-up results in a message like <select> is undefined
, try setting TERM
to xterm-vt220
.
Solution 2:
Ctrl+Left/Right are present in Terminal (macOS 10.12) by default (Preferences → Profiles → Keyboard). I tried adding Shift-Up/Down in ~/.inputrc
but nothing happened.
~/.inputrc:
"\e[1;2A": shift-up
"\e[1;2B": shift-down
Instead I added Shift Up/Down programatically in Terminal Preferences. The problem is that this is stored per profile, of which macOS has a dozen by default, so you have to loop over all the profiles (one named Ocean
here) to add the keys for all available profiles. I don't know if plutil
or defaults
have some magic to make this easy, or if you have to use an XML parser.
~/Library/Preferences/com.apple.Terminal.plist:
"Window Settings" = {
Ocean = {
keyMapBoundKeys = {
"$F700" = "\033[1;2A";
"$F701" = "\033[1;2B";