Bash

bash 中的 Ctrl-Backspace 和 Ctrl-Delete

  • September 16, 2021

安裝 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-ruboutCtrl+w或通過 設置stty werase),和backward-kill-wordM-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 的混淆行為

引用自:https://unix.stackexchange.com/questions/264791