2009-08-31 103 views
8

我想更改分隔符bash(或readline)用于分隔单词的分隔符。具体来说,我想让'-'而不限制的话,那么,如果我有文字在bash中更改单词分隔符

ls some-file 

,我按Alt-Backspace它会删除整个some-file文本,而不仅仅是到'-'字符。这也会导致像--group-directories-first这样的长旗子的删除更快,更容易,只需要一次按键。

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

+0

' - '字符在命令行中有特殊含义,所以默认行为并不令人惊讶。如果你能改变它,会不会有副作用?假设你输入了'ls -al some-file',你想删除所有内容吗? – pavium 2009-08-31 12:35:28

+0

@pavium在这种情况下,我希望'some-file'一开始就被删除,当再次按下时,我希望'-al'被删除。 – spatz 2009-08-31 12:48:11

+1

我刚刚在superuser.com上找到[答案](http://superuser.com/questions/547130/bash-readline-for-move-forward-by-whitespace-delimited-word)。 – Ekans 2013-11-12 15:12:53

回答

7

ctrl-w正是你想要的。

+0

我读了手册的一部分,数十亿次,我不敢相信我错过了它。谢谢:) – spatz 2009-08-31 12:49:34

+3

我只会注意到,稍微尝试一下后,它仍然不是最佳的,因为斜杠被忽略为分隔符,这在处理路径时很烦人。 我在'/ etc/inputrc'中添加了行“'\ ew”:unix-filename-rubout',现在M-e删除了一个单词而忽略了连字符,但是将斜杠当作分隔符。 – spatz 2009-08-31 13:01:08

3

有一点需要记住的是,如果您将stty werase设置分配给ctrl-W,则ctrl-W的bash键映射将不起作用。如果你运行“stty -a”,你会看到“werase =^W”,它将优先使用tty的概念来表示单词边界是什么。 tty的单词边界的概念通常是空格,而bash的反向杀词单词功能还包括 - 和/。

如果你想的Alt-Backspace键做同样的事情WERASE设置,你可以这样做: 绑定“‘\ M- \章’:UNIX的字擦去” 结合““\ M- \ C-“:UNIX的字擦去”

此外,如果你真的想使CTRL-W做的Alt-退格键,你会怎么做: 的stty WERASE民主基金#除非你这样做时,bash忽略绑定命令 bind'“\ Cw”:backwards-kill-word'

+1

与OP无关,但'stty werase undef'完全解决了我的问题!谢谢! – 2014-04-28 14:37:12

1

这可能很有用:Ctrl-r会启动一个反向搜索(对于历史和当前行),所以你可以只是打空间和逃跑,它回来了如果你想返回一个arg,你需要它,或者再次按ctrl-r(在命中第一个空格后)。然后你可以选择杀死该行的其余部分。

如果您要处理长路径参数(例如cp或diff)并且需要修改第一个arg的结尾,那么它尤其有用。

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