如果我经常在前景和背景之间切换mosh,那么终端设置是什么

时间:2015-06-08 02:18:55

标签: terminal mosh

我正在使用 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连接相同的结果?

1 个答案:

答案 0 :(得分:0)

清除屏幕并且只留下短消息的行为听起来像是在xterm的普通和替代屏幕之间切换的程序。 MobaXterm使用PuTTY,它实现了xterm的这一功能。

TERM的设置告诉termcap / terminfo / curses库使用哪个终端描述。这就是差异所在:

  • 对于mosh程序,该库位于您的本地计算机上。
  • 使用ssh时,该库位于远程计算机上。

比这更复杂:vim实际上是在你运行它的机器上使用终端数据库,但是mosh对于发送到终端的转义序列有最终决定权。所以听起来好像mosh正在看一个本地终端描述,smcuprmcup 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并发表了一些评论:

  • 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包,您将获得这些描述。