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