How do I make ctrl-arrow keys move forward/backward a word at a time in Cygwin bash?
In the default Cygwin installation, using CTRL-LEFTARROW or CTRL-RIGHTARROW simply prints 5C or 5D instead of skipping a word at a time as expected.
Home/End keys work properly, so remapping should be possible.
Solution 1:
Found a solution, posting it here for posterity.
Add the following lines to ~/.inputrc
(C:\cygwin\home\<username>\.inputrc
):
"\e[1;5C": forward-word # ctrl + right
"\e[1;5D": backward-word # ctrl + left
When done you can press C-x C-r
to re-read the .inputrc
file for the current session.
Things to note if you want other similar customisations: Use 5A
and 5B
for up and down arrows, and 2x
for shifted versions.
The "official" key mappings are described in the Bash Reference Manual, but for a quick way to find a key mapping, in bash:
- type Ctrl+V
- type the key sequence you are interested in (e.g., Alt+→). This would print
^[[1;3C
- remove the leading
^[
and replace it with\e
to make\e[1;3C
- place this value in your
.inputrc
file.
Solution 2:
You can reload file .inputrc via:
bind -f ~/.inputrc
Source
Solution 3:
In case you want something that'll work without custom environment settings, for instance when working on a shared account on a server or just to limit the amount of custom configuration being used, Bash has built-ins for this that work in Cygwin.
Namely Alt+f to move forward and Alt+b to move backward.
http://www.gnu.org/software/bash/manual/html_node/Commands-For-Moving.html
Solution 4:
When using rxvt with cygwin I found the solution at this link worked for me: control_arrow_keys_in_rxvt.
Add the following lines to ~/.inputrc
:
"\eOd": backward-word
"\eOc": forward-word