Terminal

st終端+shell vi模式

  • August 1, 2020

上下文: 我使用zsh並使用vi編輯模式。要進入歷史記錄,而不是按ESC進入正常模式並按k,我按alt+kwhich 發送esc字元並發送k後記(根據我的理解)

問題: 在我開始 ssh 會話之前它工作正常,即使在關閉會話之後它也不起作用。相反,按下alt+k它時會插入ë字元。

目前理解: 這與終端有關,與外殼無關。但是,打開 SSH 會話會改變終端的一些執行時屬性,這是我想不到的。

st git commit:63776c0962874dfab135a595a765b4d3b5fbcb65(目前主)

非常感謝任何有幫助的想法。

PS:我對終端內部的工作原理知之甚少。

有一種表示“元”的舊方法,它假定您使用的是 7 位字元集,並且可以隨意擺弄高位字元。它不適用於 8 位字元集,更不用說 UTF-8,如您所見,產生的字元會讓初學者感到困惑。只有一些終端仿真器支持它,包括 XTerm 和簡單終端,並且使用 ECMA-48 供應商私有設置/重置模式控制序列,參數 1034 來打開和關閉它。在 terminfo 術語中,這是“元模式”。

您通過 SSH 訪問的遠端系統上的程序出於某種原因打開了“元模式”並且沒有再次將其關閉。您可以通過直接使用 (say) 列印 DECRST 1034 控制序列來關閉元模式printf

printf '\ e [?% ul' 1034

或使用(terminfo 版本的)tput命令:

輸入 rmm

順便說一句:不要指望setmetamodekbd 包中的命令(在 Debian Linux 等作業系統上)可以工作,因為它使用一種特殊的方式來更改這種模式,這種方式特定於 Linux 內置虛擬終端。

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