19

In OSX I can just hold down the option key and press the left cursor key until I get to the word I need to edit (or in Vi I can just hit b, but I haven't been able to figure out how to do this in Terminal yet...

nipponese
  • 387

3 Answers3

30

To set the key binding: You first have to find out what key codes the Ctrl+Left key sequence creates. Just use the command cat to switch off any interference with existing key bindings, and then type the key sequence. In my system (Linux), this looks like that:

$ cat
^[[1;5D

Press Ctrl+d to exit cat. Now you have found out that Ctrl-Left issues 6 key codes:

  • Escape (^[)
  • [
  • 1
  • ;
  • 5
  • D

Now you can issue the bind command:

bind '"\e[1;5D": backward-word'
Pablo A
  • 2,712
daniel kullmann
  • 9,527
  • 11
  • 39
  • 46
16

The bash function you want is backward-word. You can run bind -q backward-word to get a list of keys bound to that function. One common binding is Esc+b

Also, many terminals support Ctrl+Left (the same hotkey you can use in X to jump backwards by word)

Michael Mrozek
  • 93,103
  • 40
  • 240
  • 233
  • 1
    Ok, it returns backward-word can be invoked via "\eb". but how do I bind control+Left instead of Esc+b? Also, one drawback to Esc+b I can already see is that I have to let up on the Esc key every time I can to go back a word, isn't there a better way? – nipponese Jul 09 '12 at 07:13
  • 1
    Is there a better way? Naturally: set editing-mode vi :) – jasonwryan Jul 09 '12 at 08:00
  • 5
    @nipponese "esc b" can also be used on the keyboard as ALT-b. This may need to be specifically the left or right alt depending on your configuration, so try both. – Random832 Jul 09 '12 at 13:00
9

The default key shortcut in Bash for backword-word is Alt + b . The same result can be achived with Esc + b . You should give those a try before editing your keybindings.

Use bind command to edit or bind -q [name] to get the current keybind of a specific action.