屏幕被清除并且只剩下一条短消息的行为听起来像是在 xterm 的正常屏幕和备用屏幕之间切换的程序。MobaXterm 使用 PuTTY,它确实从 xterm 实现了此功能。
的设置TERM
告诉 termcap/terminfo/curses 库使用哪个终端描述。这就是区别所在:
- 对于 mosh 程序,该库位于您的本地计算机上。
- 使用 ssh 时,该库位于远程计算机上。
它比这更复杂:vim 实际上是在您运行它的机器上使用终端数据库,但 mosh 对发送到终端的转义序列拥有最终决定权。所以听起来好像 mosh 正在查看本地终端描述,其中smcup
和rmcup
terminfo 功能不会告诉“xterm”切换到/从备用屏幕。
我手头没有MobaXterm可以检查,但你可以检查一下。mosh 是一个curses/ncurses 程序。所以有理由假设 MobaXterm 也有这个infocmp
程序。使用该infocmp
程序,您可以查看其终端数据库中的这些值,例如,
smcup=\E[?1049h,
rmcup=\E[?1049l,
或者
smcup=\E[?47h,
rmcup=\E[2J\E[?47l,
后者是原始的 xterm 序列(1990 年代初期),前者是现代 xterm(1990 年代后期)。有趣的是,一些“xterm”模拟器并没有实现较新的模拟器。一些细节在 xterm 常见问题解答为什么运行 vi 时屏幕不清晰?
如果你有infocmp
,那么你很可能会有tic
。您可以通过以下方式修改本地终端数据库
- 用于
infocmp
创建包含终端描述的文件
- 编辑文件(为这两个添加行,或者如果新值碰巧不起作用,则使用旧值)
- 用于
tic
重新编译终端描述
(如果 MobaXterm 提供的 mosh 没有 curses 实用程序,那么除了使用 MobaXterm 提交错误报告之外,您无能为力)。
以上是 6 月 8 日写的。昨晚看了 MobaXterm,有几点意见:
- MobaXterm 是自包含的(使用busybox 的应用程序),所以我通常不会太关注它。
- 它对 xterm 有一个中等老旧的终端描述(我可以指出它,但随便说一下,可能有 5 到 8 年的历史)。
- 备用屏幕切换要旧得多,正如您所指出的,没有太多工作要做,我没有进一步调查。
- 如果有必要,您可能可以从 Linux 复制已编译的 terminfo 条目(但这会很麻烦)。
对于 Ubuntu,我快速浏览了在 gnome-terminal 和 xterm 中运行 vim 的 14.04 机器。巧合的是,我最近正在查看前者的终端描述,并注意到我为gnome
(过时)或vte
(首选)编写的条目使用了旧的 xterm smcup
/ rmcup
。Ubuntu 14.04 已经足够老了,以至于 gnome-terminal 无法正确识别较新的 xterm smcup
,并且没有使用TERM=xterm
. 但它确实适用于TERM=vte
(或TERM=gnome
)。ncurses-term
如果安装了软件包,您将拥有这些描述。