2009-08-31 104 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做到這一點,但它停止在斜線。