7

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

  • vim 选项卡完成被破坏。 :e <Tab>生成:e ^I而不是建议文件。标签 ( :tj) 相同。关闭并重新打开 vim 可以解决此问题,但代价是丢失 vim 状态。
  • R 不能生成图形。我ssh -X -Y启用了 X11 转发 ( )。关闭和重新打开无济于事。

我不能通过关闭我的 ssh 窗口并重新连接来故意重现该问题。问题通常在重新连接之间长时间没有网络连接后观察到,并且通常分离是突然的(网络连接丢失)。

4

2 回答 2

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,也可能不来自 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 和 bashrc的答案可以提供更多帮助。


X11 转发:

当你第一次启动屏幕时,$DISPLAY 会被继承。例如,我在我的电视服务器上利用了这一点;我在本地启动屏幕 ( DISPLAY=localhost:0),然后当我通过 SSH 连接到它时,我对 X 所做的任何事情都会在电视上弹出。显然,这根本不是您的用例。我只是想向您介绍它的工作原理,以便您了解解决方案。

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

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

$ echo $DISPLAY
localhost:10.0

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

$ screen -r
$ export DISPLAY=localhost:10.0

我认为 screen 或 tmux 都不够聪明,无法走得更远(想想我的电视服务器示例;这并不总是需要的,并要求 screen/tmux 测试 $DISPLAY ,然后根据其可用性采取行动有点多),因此您必须手动执行此操作。

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

于 2014-02-14T00:56:21.903 回答
0

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

至于第一个问题,请尝试查看您的 tmux.conf (或安装中的默认设置),因为它们正在重新映射 <TAB>到开发版本中的有趣操作(如清除历史记录),因此可能在重新附加后,tmux 拥有该事件并不是 vim。

于 2012-08-16T14:19:37.787 回答