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 相同)
在您连接到 screen/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 断开连接。)