Bash CTRL to move cursor between words/strings

Bash

Bash Problem Overview


I am use to using the CTRL key to move faster when using the left and right arrow keys (goes to end of a word, instead of one char at a time).

Can I do that in bash somehow?

I could probably code it, but I was wondering if there is something easier / already done.

Bash Solutions


Solution 1 - Bash

With the default readline key bindings, ALT+B goes back one word, ALT+F goes forward one word.

The default Ubuntu setup additionally provides CTRL+arrows like you're used to. These are in /etc/inputrc and specified as follows:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Not sure why we need three of them...

Solution 2 - Bash

As Thomas explained, you can add the bindings to /etc/inputrc.

Another alternative so it loads every time you log in, is putting them in ~/.bashrc like this:

#use ctl keys to move forward and back in words
bind '"\eOC":forward-word'
bind '"\eOD":backward-word'

I learned that you can use cat > /dev/null to look at the characters that your keyboard is sending, e.g., CTRL + right arrow shows:

^[OC

where ^[ is the same as \e so that's where the code comes from in the bind command.

You can also look up bindings like this:

bind -p | grep forward-word

All of this is pretty damn awesome and I'm glad I found out some more power of bash.

Solution 3 - Bash

A .inputrc in your home directory will cause ctrl+left to stop working on Ubuntu (for example).

To get everything working, add the following to ~/.inputrc:

# Include system-wide inputrc, which is ignored by default when
# a user has their own .inputrc file.
$include /etc/inputrc

credit to f.kowal

Solution 4 - Bash

Add $include /etc/inputrc

in ~/.inputrc

Worked for CentOS Linux release 8.2.2004 (Core)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBryan RuizView Question on Stackoverflow
Solution 1 - BashThomasView Answer on Stackoverflow
Solution 2 - BashBryan RuizView Answer on Stackoverflow
Solution 3 - BashConstantin De La RocheView Answer on Stackoverflow
Solution 4 - BashPabloheView Answer on Stackoverflow