用於向後/向前刪除單字的 XTerm 控制序列?

用於向後/向前刪除單字的 XTerm 控制序列?

我相信本文應該可以幫助我找到向後/向前刪除單字的控制序列。

我的理解是控制序列\u001b[將從“控制序列引入器”(我從這個另一個答案),但並不真正知道完整的字串應該是什麼。

上下文(根據另一個 SO 問題):我的目標是發出用於從鍵盤快捷鍵(鍵綁定)刪除 VSCode 終端中的單字的控制序列

答案1

沒有這樣的東西,你可以看看ctlseq文件沒有任何提及單字單字。還有一個問題是使用什麼背景顏色來擦除以及是否將單字右側的內容移至左側。您可能必須考慮在終端右側邊緣換行的單字。

您的一些選擇是:

  • 發送與要刪除的單字中的單元格一樣多的 BS 字符,然後發送盡可能多的 SPC(注意它使用當前背景顏色),然後再次發送盡可能多的 BS 字符(將遊標再次移回):

    $ printf 'foo bar\b\b\b   \b\b\b+\n'
    foo +
    

    該軟體幾乎可以在所有終端上運行。

  • 相同,但使用tput cub x(其中x是單元格數)將遊標向後移動該量,而不是使用 BS 序列。您可以使用tput ech x刪除這些儲存格(使用目前背景顏色或不使用目前背景顏色,取決於終端)

    $ printf 'foo bar'; tput cub 3; tput ech 3; printf '+\n'
    foo +
    
  • 而不是tput ech x,您可以使用擦除到tput el行尾,或者tput dch x刪除x 個儲存格(並將其後的內容向左移動)。

tput這裡是 terminfo 資料庫的 shell 接口,其想法是避免硬編碼轉義序列,使用適合您的語言的等效內容)。

看看backward-kill-word一些 shell 的小部件(script例如用於記錄其輸出),我看到readline使用 BS 進行運動和dch刪除,同時zsh使用 BS 和 和 重寫的組合cubtcsh似乎正在做一些絕對列定位(hba)並用於dch刪除,ksh93 發送一個 CR 並重寫整行。

答案2

我從來沒有見過這樣的順序。如果你仔細想想,刪除一個單字是相當複雜的,比其他操作更複雜,而且我認為任何其他操作都不會以任何方式關心螢幕上的內容。例如,什麼是單字的結尾? '_'? '-'? '.'?

相關內容