2015-06-08 29 views
0

我正在使用mosh来访问我的远程Ubuntu机器。我在Windows上使用的客户端是MobaXterm,它有一个mosh插件。我在Ubuntu上使用的只是我从apt-get获得的mosh客户端。 问题是我通常在bash中打开一个vim编辑我的代码并使用Ctrl + Z返回bash。我用fg带回vim。但是,当我按Ctrl + Z时,我的代码的内容仍然在我的终端窗口中,并且bash在它的下面。 SSH完美运作。代码消失,只有这样的东西出现。如果我经常在前台和后台之间切换mosh,终端设置是什么

[1]+ Stopped     vim .bashrc 

我想这与我的终端设置有关。我使用Ubuntu的默认设置。 $ TERM返回xterm。我在MobaXterm中使用的终端也是xterm。 谁能告诉我如何获得与SSH连接相同的结果?

回答

0

屏幕被清除并且只有短消息的行为听起来像是在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软件包,则可以使用这些说明。

+0

谢谢你的帮助。 MobaXterm没有infocmp。可能我会放弃Windows客户端。现在我只想在Ubuntu客户端上完成它。 infocmp为我的Ubuntu客户端和Ubuntu服务器返回现代xterm数据库。我将它们更改为原始版本,但是当我按Ctrl + Z并且bash历史记录消失时,vim屏幕变为全黑屏幕。你有更多的想法吗? – fkengun

相关问题