使用 tmux 时 ssh 会破坏 vim 配色方案

使用 tmux 时 ssh 会破坏 vim 配色方案

在 中tmux,我的终端的vim配色方案在通过 连接后立即与远程服务器断开连接后发生变化ssh。确切的命令序列是:

tmux
vim <my_file>  # vim colors correct
ssh <my server> 
exit  # Immediately disconnect
vim <my_file> # vim colors WRONG

笔记tmux:和之间没有观察到差异tmux -2。我也没有看到tmux infossh 连接之前和之后有什么区别。

我无法确定为什么通过 连接/断开连接会影响本地机器上的运行ssh方式。这种情况只发生在 上。在我的普通终端上不会发生这种情况。vimtmux

颜色比较

终端图像对比

设置信息

平均能量损失.zshrc

"     Vundle Start
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'morhetz/gruvbox'
call vundle#end() 
filetype plugin indent on
"     Vundle END

syntax on

colorscheme gruvbox
set background=dark

(添加set t_Co=256似乎.vimrc没有效果)

.tmux.conf

set-option -g default-shell /usr/local/bin/zsh
set -g default-terminal "screen-256color"

答案1

这可能是由于ANSI 转义序列在远程服务器的提示中,这也许是将终端置于某种模式,并且在完成后不会将其重置回正常状态。

很难说清楚究竟哪个序列导致了这种情况...也许ESC [ 2m是“低强度模式”?

这种情况只发生在内部的原因tmux是 tmux 实现了其自己的大部分转义序列,因此有时它的行为会与终端本身不同。

为了进一步解决此问题,请首先尝试捕获连接到远程服务器时获得的转义序列。您可以使用脚本(1)命令来做到这一点:

$ script
$ ssh <my_server>
my_server$ exit
$ exit
Saved output in file `typescript`
$

您需要一个额外的命令exit来停止脚本会话。字符将保存在文件中typescript

然后您可以使用以下命令检查文件的内容:

$ cat -v typescript

这将以可打印的方式显示转义序列,这样它们就不会被激活,而您可以看到它们。ESC 键显示为^[。因此,如果您看到一个序列^[[2m,那就是我上面提到的“低强度”序列。

即使这不是真正触发此问题的因素,您也可以编辑您的问题,使用您看到的确切转义序列来更新它,这将有助于我们缩小触发此特定行为的范围。

如果它确实是由远程服务器的转义序列引起的,那么请检查该机器上的提示,看看是否是它发送了这些特定序列。(在 bash 中,查看$PS1和可能$PROMPT_COMMAND。)您可能需要修复它们以停止使用该特定序列,或者重置设置或在完成后撤消特定序列的效果。


更新:在使用上述步骤诊断问题后,我们注意到问题的原因是服务器端.zshrc文件gruvbox_256palette_osx.sh,执行时会修改终端的调色板。

服务器端已$TMUX取消设置,因此gruvbox脚本未使用正确的转义序列,导致调色板不同步并产生此处观察到的颜色差异。

相关内容