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 中存活断开连接。)