我在 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,它們被組織起來以避免與現有控制序列混淆,例如,透過在簡單程式忽略它們的地方添加參數。
延伸閱讀:
- ECMA-48:編碼字元集的控制函數
- 插入/刪除字符(術語資訊手冊頁)