在bash中更改单词分隔符

drr*_*lvn 8 bash readline

我想更改分隔符bash(或readline)用于分隔单词.具体来说,我想'-'不分界词,所以如果我有文字

ls some-file
Run Code Online (Sandbox Code Playgroud)

我按Alt-Backspace它删除整个some-file文本而不只是删除'-'字符.这也将导致删除长标志,如--group-directories-first更快更容易,只需要一次按键.

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

Wil*_*ell 7

ctrl-w完全符合你的要求.

  • 我只是注意到,经过一些实验后它仍然不是最佳的,因为斜杠被忽略为分隔符,这在处理路径时很烦人.我在`/ etc/inputrc`中添加了行""\ ew":unix-filename-rubout`,现在我删除了一个单词而忽略了连字符,但确实将斜杠视为分隔符. (3认同)

Eri*_*ric 5

要记住的一件事是,如果您将 stty werase 设置分配给 ctrl-W,则 ctrl-W 的 bash 键映射将不起作用。如果你运行“stty -a”并且看到“werase = ^W”,它将优先并使用 tty 的单词边界概念。tty 的单词边界概念通常是空格,而 bash 的向后终止单词功能还包括 - 和 /。

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

另外,如果你真的想让 ctrl-W 做 Alt-Backspace 所做的事情,你可以这样做: stty werase undef # 除非你这样做,bash 会忽略下面的绑定命令 bind '"\Cw":backwards-kill-word'