Fish 中的插入/覆蓋模式

Fish 中的插入/覆蓋模式

我在 MacBook 上使用 Linux Mint,在其鍵盤上,相當於 INSERT 鍵的組合是Fn + RETURN

目前我只能在 GNU-Emacs 中看到這個組合的預期行為:在那裡,覆蓋模式綁定到<insertchar><insert>

例如,在網頁瀏覽器中它沒有效果。在 Linux 終端機以及我嘗試過的任何終端模擬器(例如 konsole、xterm)中,轉義序列[2~都會列印到螢幕上,而不是切換到插入模式。

因為我認為它是一個有用的東西,所以我想讓它發揮作用。有人知道,在哪裡可以解決這個問題?

順便說一句:Fn + Backspace,代表"DELETE"在上述應用程式中工作得很好。

順便說一句,沒有。 2:我用的是魚殼。在 bash shell 中,不會列印轉義序列,但組合鍵也不起作用。

答案1

終端模擬器無法自行編輯文本,因此此層級不存在插入模式與覆蓋模式的概念。

它們只是將按鍵發送到正在運行的應用程式(透過核心的 tty 驅動程式),並接收(再次透過核心 tty 驅動程式)並解釋來自應用程式的資料並相應地更新螢幕。

對於 Insert 鍵,正確的操作確實是發送\e[2~轉義序列。

由應用程式(fish/bash/etc. shell、emacs/etc. 文字編輯器等)來解釋它並在插入和覆蓋模式之間切換(如果它們實現後者)。

答案2

終端模擬器具有用於在螢幕上插入和刪除字元(和行)的控制序列。但是當你運行一個應用程式時(無論是或一個文字編輯器),您可以輸入的控制序列通常是不是回顯到終端。應用程式讀取這些特殊鍵並決定將哪些控制序列傳送到終端。效果(插入、刪除-以及重打)只是一個圖片應用程式的功能。真實資料位於應用程式的記憶體(或資料檔案)中。

大多數終端都有特殊鍵(例如Insert),可以透過習俗發送與類似名稱的控制序列相符的字元(將被發送終點站)。那是因為原本,本地模式是人們使用的東西。

任何相容於 ANSI 的終端都可以運行當地的模式(忽略一些不相關的破壞了此功能的模式)。這就是所謂的發送/接收模式SRM標準中的( )。在較舊的終端機中,您可能必須考慮另一種模式插入。在裡面術語資訊(5)提到的手冊頁:

   move_insert_mode          mir    mi   safe to move while
                                         in insert mode

除了約定之外,並非所有終端都使其特殊鍵與控制序列相符。例如,

  • rxvt,插入鍵可能會發送escape[2~,而插入字符控制序列escape[@and (對於多個字元),插入模式是escape[4m
  • 修改的特殊鍵(例如controlInsert)可能不會發送匹配的字符任何控制序列。使用 xterm,它們被組織起來以避免與現有控制序列混淆,例如,透過在簡單程式忽略它們的地方添加參數。

延伸閱讀:

相關內容