如何防止 OS X Terminal.app 覆盖远程系统上的 vim 颜色?

如何防止 OS X Terminal.app 覆盖远程系统上的 vim 颜色?

我的主要工作站是一台运行 OS X 10.5 的 Mac。我每天花很多时间通过 ssh 连接到远程系统,并研究 vim。我想做的事情之一是尝试不同的配色方案。

我遇到的问题是,我的 Terminal.app 设置会覆盖 vim 配色方案中指定的颜色。一个非常简单的例子就是背景颜色。如果我在远程服务器上的 vim 中选择“沙漠”配色方案,背景应该是黑色。如果我使用终端首选项将背景颜色设置为深橙色,则我的终端首选项会胜出。

我希望我的终端首选项在本地 shell 中生效,但我希望我在远程系统上指定的任何内容也能在它们上生效。这可能吗?

答案1

[更新:从 Mac OS X Lion 10.7 开始,终端同时支持 BCE 和 256 色。]

您可能遇到两个问题:

  1. 终端不支持背景颜色擦除(BCE)模型†。vim 需要 BCE 终端才能填充空白区域的背景颜色。

  2. 终端仅支持 16 种 ANSI 颜色,不支持扩展的 256 色模型。某些 vim 配色方案(例如“desert256”)需要 256 色支持才能选择特定颜色。

如果您在 Xterm 中使用相同的设置(在远程机器上使用您选择的配色方案运行 vim)并且它的行为符合预期,则其中一个或两个就是您遇到的情况。

† BCE 意味着某些终端控制序列(如“擦除至行尾”和“清除屏幕”)将使用当前选定的文本背景颜色填充清除的区域。非 BCE 终端仿真器将显示它们通常显示的任何静态背景。某些程序将检测终端是否支持 BCE(通过 terminfo)并“手动”用空格字符填充空白区域,但 vim 不会。

(例如,BCE 的存在是为了更有效地填充显示屏大面积的背景颜色,以及在从模拟器中复制文本时消除不需要的空格字符。据我所知,没有物理终端支持 BCE,它完全是一些现代终端模拟器的功能。)

相关内容