bash readline – What Are the Readline Word Separators

bashreadline

When I delete a "word" in Bash, it will stop at certain characters like _ and /. For example, if I type

/foo/bar

and activate backward-kill-word (typically mapped to AltBackspace and/or Ctrlw), the remaining text is

/foo/

. This does not correspond to $COMP_WORDBREAKS or readline's rl_completer_word_break_characters. How can I detect (preferably in a running system, rather than the defaults in the code, since they presumably can be overridden) which characters are used to determine word breaks?

Best Answer

The bash documentation states:

backward-kill-word (M-Rubout)

Kill the word behind point. Word boundaries are the same as those used by backward-word.

And

backward-word (M-b)

Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits).

The handling of backward-word in Bash 4.2 is done in the bundled libreadline code (text.c:rl_backward_word). The word break is based on rl_alphabetic, which itself relies on the isalnum function. This is locale-dependent, but not configurable directly in bash.

Note that Bash 4.0 introduced another "word" type with the shell-forward-word and shell-backward-word actions (and kill equivalents). These break only on shell meta-characters (()<>;&|") and blanks (possibly locale dependant via isblank), handled in the main bash code (bashline.c).

Related Question