重新连接到tmux / screen后键盘IO坏了

时间:2012-07-05 08:58:55

标签: r vim x11 tmux gnu-screen

通过ssh重新连接屏幕或tmux会话后,我经常会遇到两个问题:

  • vim标签完成被破坏。 :e <Tab>生成:e ^I而不是建议文件。标签(:tj)也是如此。关闭并重新打开vim修复此问题,但代价是失去了vim状态。
  • R无法生成图形。我启用了X11转发(ssh -X -Y)。关闭和重新开放没有帮助。

我不能通过关闭我的ssh窗口并重新附加来故意重现问题。在重新连接之间长时间没有网络连接的情况下通常会出现问题,并且通常分离是突然的(网络连接丢失)。

2 个答案:

答案 0 :(得分:3)

Vim标签已完成:

这是screen / tmux终端仿真器的问题。如果制表符在你的shell中工作(例如bash),那很可能是shell的功劳;它知道为你映射控制序列而vim没有。据推测,你可以用类似的方式在vim中解决这个问题,但是你会在其他一些交互式程序中遇到这个问题。

我不能和tmux说话,但是对于屏幕,你应该看看更新你的〜/ .screenrc。我的,从Redhat附带的默认值(我不再使用......)复制,包括:

#xterm understands both im/ic and doesn't have a status line.
#Note: Do not specify im and ic in the real termcap/info file as
#some programs (e.g. vi) will not work anymore.
termcap  xterm hs@:cs=\E[%i%d;%dr:im=\E[4h:ei=\E[4l
terminfo xterm hs@:cs=\E[%i%p1%d;%p2%dr:im=\E[4h:ei=\E[4l

注意该评论,它可能表明您的问题。

对vi的另一个引用,可能是也可能不是来自Redhat的screenrc,是:

# Yet another hack:
# Prepend/append register [/] to the paste if ^a^] is pressed.
# This lets me have autoindent mode in vi.
register [ "\033:se noai\015a"
register ] "\033:se ai\015a"
bind ^] paste [.]

希望其中一个或两个都有帮助,否则我已经指出了正确的方向来研究你需要什么来纠正你的屏幕/ tmux终端仿真。也许LinuxQuestions.org上screen, vimrc, and bashrc的答案可以进一步帮助。


X11转发:

当您第一次启动屏幕时,继承$ DISPLAY。例如,我在电视服务器上利用了这一点;我在本地启动屏幕(DISPLAY=localhost:0),然后当我通过SSH连接到它时,我在电视上弹出任何关于X的事情。显然,这根本不是你的用例;我只是想教你如何运作,这样你才能理解解决方案。

如果您要重新连接到由旧SSH连接启动的screen / tmux会话,您可能会很幸运并将其连接到相同的X显示器(SSH默认为localhost:10.0,然后每次发现冲突时递增) ,但这听起来并不像是发生在你身上。 (“localhost”部分是可选的,“。0”部分也是可选的。这些部分与您的目的无关。DISPLAY=:10DISPLAY=localhost:10.0相同

之前连接到你的屏幕/ tmux会话,看看你的$ DISPLAY。

$ echo $DISPLAY
localhost:10.0

然后,登录screen / tmux并将$ DISPLAY设置为您之前看到的内容。

$ screen -r
$ export DISPLAY=localhost:10.0

我认为无论是屏幕还是tmux都不够聪明,可以走得更远(想想我的电视服务器示例;这并不总是需要,并要求screen / tmux测试$ DISPLAY然后行动它的可用性有点多,所以你必须手动完成。

(如果你像我一样在你的〜/ .bashrc中添加screen -r >/dev/null 2>&1,这可能很烦人。我没有遇到这个问题,因为我试图尽可能避免X11转发,因为它很慢作为糖蜜,当然不能保持SSH断开。)

答案 1 :(得分:0)

第二个问题看起来像一个DISPLAY变量。尝试 首次登录时echo $DISPLAY,重新连接会话时再次{。}}。 如果它们不同(这是我怀疑的),setenvexport它是正确的值。

至于第一个问题,请尝试查看一下tmux.conf(或安装中的默认设置) 因为他们正在重新映射 <TAB>对开发版本中的有趣动作(如清晰历史)也许如此 重新安装后,tmux拥有该事件而不是vim。