通过ssh重新连接屏幕或tmux会话后,我经常会遇到两个问题:
:e <Tab>
生成:e ^I
而不是建议文件。标签(:tj
)也是如此。关闭并重新打开vim修复此问题,但代价是失去了vim状态。ssh -X -Y
)。关闭和重新开放没有帮助。我不能通过关闭我的ssh窗口并重新附加来故意重现问题。在重新连接之间长时间没有网络连接的情况下通常会出现问题,并且通常分离是突然的(网络连接丢失)。
答案 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=:10
与DISPLAY=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
,重新连接会话时再次{。}}。
如果它们不同(这是我怀疑的),setenv
或export
它是正确的值。
至于第一个问题,请尝试查看一下tmux.conf(或安装中的默认设置)
因为他们正在重新映射
<TAB>
对开发版本中的有趣动作(如清晰历史)也许如此
重新安装后,tmux拥有该事件而不是vim。