1

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

4

1 回答 1

1

屏幕被清除并且只剩下一条短消息的行为听起来像是在 xterm 的正常屏幕和备用屏幕之间切换的程序。MobaXterm 使用 PuTTY,它确实从 xterm 实现了此功能。

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

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

它比这更复杂:vim 实际上是在您运行它的机器上使用终端数据库,但 mosh 对发送到终端的转义序列拥有最终决定权。所以听起来好像 mosh 正在查看本地终端描述,其中smcuprmcupterminfo 功能不会告诉“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如果安装了软件包,您将拥有这些描述。

于 2015-06-08T08:52:25.453 回答