bash 中的 Ctrl-Backspace 和 Ctrl-Delete
安裝 Debian 8.3
stty werase '^H'
或在 Arch Linux 2/2016 上
stty werase '^?'
in
.bashrc
(例如)使Ctrl
-Backspace
刪除終端中的最後一個單詞。它仍然與現代 GUI 應用程序(例如 Firefox)中的行為不同:它刪除最後一個空格分隔的單詞,而不是最後一個由空格或字元分隔的單詞,如. : , ; " ' & / ( )
.是否有可能使
Ctrl
-Backspace
在終端中的行為類似於現代 GUI 應用程序?另外,有什麼方法可以使Ctrl
-Delete
刪除游標之前的單詞?
這裡有兩個行編輯器:核心提供的基本行編輯器(規範模式 tty 行編輯器)和 bash 的行編輯器(通過 readline 庫實現)。這兩個都有一個擦除到前一個單詞的命令,預設情況下綁定到
Ctrl
+W
。可以通過 ; 為規範模式 tty 行編輯器配置密鑰stty werase
;bash 模仿它在 tty 設置中找到的鍵綁定,除非在它自己的配置中被覆蓋。
werase
無法配置 tty 行編輯器中的操作。它總是擦除 (ASCII) 空格分隔的單詞。很少與 tty 行編輯器互動——這是你得到的,例如當你cat
不帶參數輸入時。如果你想要花哨的鍵綁定,你可以在像rlwrap這樣使用 readline 的工具下執行命令。Bash 提供了兩個命令來刪除前一個單詞:
unix-word-rubout
(Ctrl
+w
或通過 設置stty werase
),和backward-kill-word
(M-DEL
,即Esc
Backspace
)將單詞視為目前語言環境中的字母數字字元序列和_
. 如果您想Ctrl
+Backspace
擦除前面的字母數字字元序列,請不要設置stty werase
,而是將以下行放入您的.inputrc
:"\C-h": backward-kill-word
請注意,這假定您的終端為
Ctrl
+發送 Ctrl+H 字元Backspace
。不幸的是,它是那些沒有標準綁定的鍵之一(Backspace
特別是由於歷史原因是一團糟)。還有一個對稱命令
kill-word
,預設情況下綁定到M-d
(Alt
+D
)。要將其綁定到Ctrl
+Delete
,您首先需要確定終端發送的轉義序列,然後在您的.inputrc
. 輸入Ctrl
+V
然後Ctrl
+Delete
; 這將插入類似於^[[3;5~
初始^[
字元是轉義字元的視覺表示的地方。然後綁定是"\e[3;5~": kill-word
如果您對任何一個詞的定義都不滿意,您可以在 bash 中提供自己的定義:請參閱 bash中 emacs-style keybindings 的混淆行為