Bash

如何在終端中從“/”刪除到“/”?

  • August 31, 2022

我正在使用 Kitty 模擬器和 bash shell。

我知道Ctrl+我可以在終端w中刪除一個單詞Ctrl(如+ Backspace)。但是如果我有這樣的東西怎麼辦:

sh /home/user/dir1/dir2/file.sh

我只想刪除file.sh

我不能用Ctrl+刪除,w因為這樣整行都會被刪除,我不想手動刪除它。

任何建議如何從一個路徑元素中刪除?

如果我理解正確,您使用的是帶有預設 Emacs 樣式編輯的 bash。然後Emacs 備忘單可能會有所幫助 - 您可以Alt+Backspace(backward-kill-word) 刪除回最後一個單詞的開頭。

bash和其他用作行編輯器的應用程序中,readline綁定到werasetty 行規則設置的任何字元(參見 的輸出stty -a)最終都會綁定到unix-word-rubout行為相似的 readline 小元件(向後刪除空格分隔的單詞),在這種情況下,只要字元綁定到werase,任何將其綁定到不同小元件的嘗試都會被忽略 AFAICT。

在大多數係統上,werase^W在預設的 tty 設置中。

因此,為了能夠重新綁定^W到 readline 中的其他內容,您首先需要更改該 tty 設置:

stty werase '^O'

werase改為綁定^O或:

stty werase ''

完全禁用它。

然後你就可以做到:

bind '"\C-w": backward-kill-word'

或添加"\C-w": backward-kill-word到您~/.inputrc的,以適用於所有應用程序使用readline,而不僅僅是bash.

然後, ^W 會以您喜歡的方式刪除單詞(嗯,單詞被定義為字母或數字序列,甚至沒有下劃線)。

這意味著您將無法使用 ^W 刪除沒有自己的行編輯器的應用程序中的單詞。

或者,您可以使用zsh而不是bash所有單詞動作/殺死小元件都是完全可配置的。

或者正如@AndreBeaud 已經提到的那樣,使用Alt+ Backspace(通常發送^[^Hor ^[^?,後者 in kitty)在 readline 的 emacs 模式下已經backward-kill-word預設綁定。

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