readline单词分隔符是什么?


9

当我删除Bash中的“单词”时,它将停在某些字符,例如_/。例如,如果我输入

/foo/bar

并激活backward-kill-word(通常映射到Alt- Backspace和/或Ctrl- w),其余文本为

/foo/

。这确实对应$COMP_WORDBREAKSreadlinerl_completer_word_break_characters。如何检测(最好是在正在运行的系统中,而不是代码中的默认值,因为它们可能会被覆盖),这是什么字符来确定断字?

Answers:


9

bash文档指出:

backward-kill-word (M-Rubout)

杀了这个词。单词边界与后向单词使用的边界相同。

backward-word (M-b)

移回当前或上一个单词的开头。单词由字母数字字符(字母和数字)组成。

backward-wordBash 4.2中的处理在捆绑的libreadline代码(text.c:rl_backward_word)中完成。单词break是基于的rl_alphabetic,它本身依赖于isalnum功能。这是依赖于语言环境的,但是不能直接在bash中进行配置。

请注意,Bash 4.0引入了另一个“字”类型,shell-forward-word并带有和shell-backward-word动作(并杀死等效项)。这些仅破坏在主bash代码()中处理的shell元字符(()<>;&|")和空格(可能通过取决于语言环境)。isblankbashline.c


1
很好的参考,但这是相当模糊的。难道他们的意思[^A-Za-z0-9][^[:alnum:]](本地化相关的),或者其他什么东西?
l0b0 2013年

严格来说,这可以使用语言环境(alnum字符类)进行配置,尽管这也会影响其他应用程序。
斯特凡Chazelas

好的,在代码中查找了错误的位置(shell-backward-*)...拆分基于isalnum,因此的确取决于语言环境,并且等效于第二个版本@ l0b0。
马太福音

1
@Stephane Chazelas:我的意思是说不能通过bash选项配置它。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.