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

What's the terminal setting if I often switch mosh between foreground and background

我正在使用 mosh 访问我的远程 Ubuntu 机器。我在 Windows 上使用的客户端是 MobaXterm,它有一个 mosh 插件。我在 Ubuntu 上使用的只是我从 apt-get 获得的 mosh 客户端。 问题是我通常在 bash 中打开一个 vim 来编辑我的代码,然后使用 Ctrl+Z 返回到 bash。我使用 fg 带回 vim。但是,当我按下 Ctrl+Z 时,我的代码内容仍然在我的终端 window 上,bash 在它下面。 SSH 完美运行。代码消失了,只有这样的东西出现了。

[1]+  Stopped                 vim .bashrc

我猜这与我的终端设置有关。我使用 Ubuntu 的默认设置。 $TERM returns xterm。我在 MobaXterm 中使用的终端也是 xterm。 谁能告诉我怎样才能得到与 SSH 连接相同的结果?

清除屏幕并且只保留一条短消息的行为听起来像是在 xterm 的正常屏幕和备用屏幕之间切换的程序。 MobaXterm 使用 PuTTY,它确实从 xterm 实现了这个特性。

TERM 的设置告诉 termcap/terminfo/curses 库使用哪个终端描述。这是不同之处:

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

比这更复杂:vim实际上是在你所在的机器上使用终端数据库运行,但 mosh 对发送到的转义序列有最终决定权终点站。所以听起来好像 mosh 正在看到本地终端描述,其中 smcuprmcup terminfo 功能不会告诉 "xterm" 切换 to/from 备用屏幕。

我没有 MobaXterm at hand to check, but you can check this. mosh is a curses/ncurses program. So it is reasonable to suppose that MobaXterm also has the infocmp 程序。 使用 infocmp 程序,您可以查看其终端数据库对这些值有何看法,例如,

smcup=\E[?1049h,
rmcup=\E[?1049l,

smcup=\E[?47h,
rmcup=\E[2J\E[?47l,

后者是原始 xterm 序列(1990 年代初),前者是现代 xterm(1990 年代末)。有趣的是,一些 "xterm" 模拟器没有实现更新的模拟器。一些细节在 xterm FAQ Why doesn't the screen clear when running 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 软件包,您将获得这些描述。