屏幕被清除并且只有短消息的行为听起来像是在xterm的正常屏幕和替代屏幕之间切换的程序。 MobaXterm使用PuTTY,它可以从xterm实现这个功能。
TERM
的设置告诉termcap/terminfo/curses库使用哪个终端描述。这里就是不同之处在于:
- 在MOSH程序的情况下,该库是在本地机器上。
- 当使用ssh时,该库位于远程机器上。
它比这要复杂得多:VIM实际使用机器上的终端数据库,在那里你正在运行它,但MOSH是有过什么转义序列发送到终端说了算。所以听起来好像mosh正在看到一个本地终端描述,其中terminology功能不会告诉“xterm”切换到备用屏幕/从备用屏幕切换。
我手边没有MobaXterm检查,但您可以检查。 mosh是一个curses/ncurses程序。因此,假定MobaXterm也有infocmp
程序是合理的。 使用infocmp
程序,你可以看到它的终端数据库,对那些值,例如,
smcup=\E[?1049h,
rmcup=\E[?1049l,
或
smcup=\E[?47h,
rmcup=\E[2J\E[?47l,
后者原来的xterm序列(90年代初),前者是现代xterm(20世纪90年代后期)。有趣的是,一些“xterm”模拟器不实现新的模拟器。一些细节xterm中常见问题Why doesn't the screen clear when running vi?
如果你有infocmp
,那么你很可能将不得不tic
。您可以通过
- 使用
infocmp
修改本地终端数据库中创建包含终端描述
- 编辑文件(添加线这两个,或使用旧值,如果较新的发生无法正常工作文件)
- 使用
tic
重新编译的终端描述
(如果MobaXterm没有诅咒事业提供MOSH,没有太多可以除文件做MobaXterm一个错误报告)。
上面写着6月8日在我MobaXterm了一下昨晚有几个意见:
- MobaXterm是自包含的(应用程序中使用busybox的),所以我通常不会付出多少注意它。
- 它有一个适合xterm的适度旧的终端描述(我可以精确定位它,但是非正式的,可能是5-8岁)。
- 替代屏幕切换年龄要大得多,正如您所指出的那样,没有太多的工作要做,我没有进一步调查。
- 如果有必要,很可能你可以从Linux上复制一个编译好的terminfo条目(但这会很麻烦)。
对于Ubuntu,我快速浏览了我的14.04机器,其中vim在gnome-terminal和xterm中运行。我巧妙地回顾了前者的终端描述,并注意到我为gnome
(过时)或vte
(首选)所写的条目使用旧的xterm smcup
/rmcup
。 Ubuntu 14.04已经够老了,gnome-terminal没有正确识别新的xterm smcup
,并且没有使用TERM=xterm
切换到备用屏幕。但它确实与TERM=vte
(或TERM=gnome
)一起工作。如果安装了ncurses-term
软件包,则可以使用这些说明。
谢谢你的帮助。 MobaXterm没有infocmp。可能我会放弃Windows客户端。现在我只想在Ubuntu客户端上完成它。 infocmp为我的Ubuntu客户端和Ubuntu服务器返回现代xterm数据库。我将它们更改为原始版本,但是当我按Ctrl + Z并且bash历史记录消失时,vim屏幕变为全黑屏幕。你有更多的想法吗? – fkengun