Terminal
st終端+shell vi模式
上下文: 我使用zsh並使用vi編輯模式。要進入歷史記錄,而不是按
ESC
進入正常模式並按k
,我按alt+k
which 發送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
順便說一句:不要指望
setmetamode
kbd 包中的命令(在 Debian Linux 等作業系統上)可以工作,因為它使用一種特殊的方式來更改這種模式,這種方式特定於 Linux 內置虛擬終端。