st 终端 + shell vi 模式

st 终端 + shell vi 模式

语境: 我使用zsh并使用vi编辑模式。要在历史记录中上升,而不是按ESC进入正常模式并按k,我按alt+k发送esc字符并发送k后记(根据我的理解)

问题: 它工作正常,直到我启动 ssh 会话,即使关闭会话后它也不起作用。相反,当按下alt+k它时会插入ë字符。

目前的理解: 这与终端有关,与 shell 无关。但是,打开 SSH 会话会更改终端的某些运行时属性,这是我无法想到的。

st git 提交:63776c0962874dfab135a595a765b4d3b5fbcb65(当前主版本)

任何有帮助的想法将不胜感激。

PS:我对终端内部的工作原理知之甚少。

答案1

有一种旧的方式来表示“元”,它假设您使用的是 7 位字符集,并且可以自由地修改字符的高位。它实际上不能很好地处理 8 位字符集,更不用说 UTF-8,产生的字符会让外行人感到困惑,正如您所看到的。只有一些终端仿真器支持它,包括 XTerm 和 Simple Terminal,并且它通过 ECMA-48 供应商专用设置/重置模式控制序列(参数 1034)打开和关闭。在 terminfo 术语中,这是“元模式”。

您通过 SSH 访问的远程系统上的程序由于某种原因打开了“元模式”,并且没有再次将其关闭。您可以通过直接打印 DECRST 1034 控制序列来关闭元模式printf

printf '\e[?%ul' 1034
或使用(terminfo 版本的)tput命令:

输出功率

顺便说一句:不要指望setmetamodekbd 包(在 Debian Linux 等操作系统上)中的命令能够工作,因为它使用一种特殊的方式来更改特定于 Linux 内置虚拟终端的模式。

相关内容