当我在 Bash 中删除一个“单词”时,它会在某些字符处停止,例如_
和/
。例如,如果我输入
/foo/bar
Run Code Online (Sandbox Code Playgroud)
并激活backward-kill-word
(通常映射到Alt-Backspace和/或Ctrl- w),剩余的文本是
/foo/
Run Code Online (Sandbox Code Playgroud)
. 这确实不对应$COMP_WORDBREAKS
或readline
的rl_completer_word_break_characters
。我如何检测(最好是在正在运行的系统中,而不是代码中的默认值,因为它们可能会被覆盖)哪些字符用于确定断字?
bash 文档指出:
Run Code Online (Sandbox Code Playgroud)backward-kill-word (M-Rubout)
杀死点后面的词。词边界与后向词使用的边界相同。
和
Run Code Online (Sandbox Code Playgroud)backward-word (M-b)
移回当前或上一个单词的开头。单词由字母数字字符(字母和数字)组成。
backward-word
Bash 4.2 中的处理是在捆绑的 libreadline 代码 ( text.c:rl_backward_word
) 中完成的。单词 break 是基于 的rl_alphabetic
,它本身依赖于isalnum
函数。这取决于语言环境,但不能直接在 bash 中进行配置。
请注意,Bash 4.0 引入了另一种带有shell-forward-word
和shell-backward-word
动作(和kill 等效项)的“词”类型。这些仅在 shell 元字符 ( ()<>;&|"
) 和空格(可能依赖isblank
于语言环境通过)上中断,在主 bash 代码 ( bashline.c
) 中处理。