我正在使用 mosh 来访问我的远程Ubuntu计算机。我在Windows上使用的客户端是MobaXterm,它有一个mosh插件。我在Ubuntu上使用的那个只是我从apt-get获得的mosh客户端。 问题是我通常在bash中打开一个vim来编辑我的代码并使用 Ctrl + Z 返回bash。我使用 fg 将vim带回来。但是,当我按下Ctrl + Z时,我的代码内容仍然在我的终端窗口,bash位于它下方。 SSH工作得很好。代码消失了,只有这样的东西出现了。
[1]+ Stopped vim .bashrc
我想这与我的终端设置有关。我使用Ubuntu的默认设置。 $ TERM 返回 xterm 。我在MobaXterm中使用的终端也是 xterm 。 任何人都可以告诉我如何获得与SSH连接相同的结果?
答案 0 :(得分:0)
清除屏幕并且只留下短消息的行为听起来像是在xterm的普通和替代屏幕之间切换的程序。 MobaXterm使用PuTTY,它实现了xterm的这一功能。
TERM
的设置告诉termcap / terminfo / curses库使用哪个终端描述。这就是差异所在:
比这更复杂: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序列(20世纪90年代初),前者是现代xterm(20世纪90年代末)。有趣的是,有些" xterm"模拟器不实现新的模拟器。有些详细信息在xterm常见问题解答 Why doesn't the screen clear when running vi?
中如果您有infocmp
,那么您可能会tic
。您可以通过
infocmp
创建包含终端描述的文件tic
重新编译终端说明(如果MobaXterm在没有curses实用程序的情况下提供mosh,除了使用MobaXterm提交错误报告之外,您无能为力。)
以上是6月8日写的。我昨晚看了一下MobaXterm并发表了一些评论:
对于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
包,您将获得这些描述。