重新连接到tmux/screen后键盘输入无法使用

7
在通过ssh重新连接屏幕或tmux会话后,我通常遇到两个问题:
- vim的tab自动补全无法正常工作。输入:e <Tab>时,会输出:e ^I而不是建议文件名。标签也是同样的问题(:tj)。关闭并重新打开vim可以解决此问题,但代价是失去vim状态。 - R无法生成图形。我启用了X11转发(ssh -X -Y)。关闭并重新打开没有帮助。
我无法故意重现这个问题,通常在重新连接之间长时间没有网络连接,并且通常分离是突然的(网络连接中断)。
2个回答

3

Vim标签自动补全:

这是与screen/tmux终端仿真器有关的问题。如果在您的shell(例如bash)中可以使用选项卡,那很可能是由于shell的功劳; 它知道为您映射控制序列,而vim则不知道。据推测,您可以以类似的方式在vim中修复此问题,但然后您将在其他交互式程序中遇到此问题。

我无法对tmux发表意见,但对于screen,您应该查看更新您的~/.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和bashrc的答案可以进一步帮助。


X11转发:

当您首次启动screen时,$DISPLAY被继承。例如,我在我的电视服务器上利用此功能;我在本地启动屏幕(DISPLAY=localhost:0),然后通过SSH连接到它时,我在电视上弹出有关X的所有内容。显然,这根本不是您的用例;我只是试图让您了解它的工作原理,以便您能够了解解决方案。

如果您正在重新连接到由旧SSH连接启动的屏幕/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

我认为无论是screen还是tmux都没有足够智能去超越这一点(想想我的电视服务器示例;这并不总是需要的,并且要求screen/tmux测试$DISPLAY然后根据其可用性采取行动有点过分),所以你必须手动操作。
(如果像我一样在~/.bashrc中添加了screen -r >/dev/null 2>&1,这可能会很烦人。我没有遇到这个问题,因为我尽可能避免X11转发,因为它很慢,当然也不能在SSH断开连接后继续运行。)

0
第二个问题看起来像是DISPLAY变量的问题。尝试在首次登录时和重新附加会话时运行echo $DISPLAY命令。如果它们不同(我怀疑是这样的),则使用setenvexport将其设置为正确的值。
至于第一个问题,请查看您的tmux.conf文件(或安装的默认文件),因为它们可能会重新映射<TAB>键到开发版本中的有趣操作(如清除历史记录),所以也许在重新附加后,tmux拥有该事件而不是vim。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接