11

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 Alt-Backspace and/or Ctrl-w), 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?

1 Answer 1

11

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).

4
  • 1
    Good references, but that's rather vague. Do they mean [^A-Za-z0-9], [^[:alnum:]] (localization dependent) or something else?
    – l0b0
    Jun 11, 2013 at 10:47
  • Strictly speaking, that's configurable with locales (the alnum character class) though that would affect other applications as well. Jun 11, 2013 at 11:25
  • Ok, was looking at the wrong place in the code (shell-backward-*)... The split is based on isalnum, so indeed locale-dependent and equivalent to your second version, @l0b0.
    – Mat
    Jun 11, 2013 at 11:38
  • 2
    @Stephane Chazelas: I meant that it couldn't be configured via bash options, rephrased that bit.
    – Mat
    Jun 11, 2013 at 11:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .