在bash中更改单词分隔符

时间:2009-08-31 12:17:40

标签: bash readline

我想更改分隔符bash(或readline)用于分隔单词。具体来说,我想让'-'不分隔单词,这样如果我有文本

ls some-file

然后按Alt-Backspace它会删除整个some-file文字,而不仅仅是'-'字符。这也会导致--group-directories-first等长标记的删除变得更快更容易,只需按一次按键。

我相信这就是zsh的行为方式,我想以同样的方式使bash表现出来。

3 个答案:

答案 0 :(得分:7)

ctrl-w完全符合您的要求。

答案 1 :(得分:3)

要记住的一件事是,如果你有分配给ctrl-W的stty werase设置,ctrl-W的bash键映射将不起作用。如果您运行“stty -a”并且您看到“werase = ^ W”将优先使用并使用tty想法的单词边界是什么。 tty关于单词边界的想法通常是空白,而bash的后向杀词功能也包括 - 和/.

如果你想让Alt-Backspace与werase设置做同样的事情,你可以这样做:   bind'“\ M- \ C-h”:unix-word-rubout'   bind'“\ M- \ C-?”:unix-word-rubout'

另外,如果你真的想让ctrl-W做Alt-Backspace做的事情,你会做:   stty werase undef#除非你这样做,否则bash会忽略follow bind命令   bind'“\ C-w”:backwards-kill-word'

答案 2 :(得分:1)

这可能很有用:Ctrl-r将启动反向搜索(对于历史记录和当前行),因此您可以点击空格并转义它并返回到您想要的位置,或者再次按ctrl-r(在击中第一个空间后)如果你想再回到一个arg。然后你可以选择杀死该行的其余部分。

如果您处理长路径参数(例如在cp或diff中),并且需要修改第一个arg的结尾,则特别有用。

试图让\ M-b做到这一点,但它停在斜线上。