在使用Solarized主题的iTerm2中,使用vim时颜色显示不正确

88

我在使用iTerm2时遇到奇怪的问题,它发生在非GUI下的终端vim以及solarized配色方案中。首先,我已经设置了iTerm2使用深色的solarized配色方案。

我还在vim中使用solarized。我在我的.vimrc文件中添加了以下内容:

set background=dark
colorscheme solarized
在终端中,颜色方案看起来不正确: console vim 参考下面是在 MacVim 下的样子 (gui vim) gui vim 我需要在 iTerm 或我的 .vimrc 文件中做哪些更改才能使终端 vim 中的颜色显示正确?
11个回答

121

需要检查以下几点:

  1. 在iTerm2中,选择“首选项” -> “配置文件” -> “终端”,在“终端仿真”下,“报告终端类型”设置为xterm-256color。

  2. 在您的.vimrc中,还有一些选项可以设置,以确保其使用256种颜色:

    set background=dark
    " solarized options 
    let g:solarized_visibility = "high"
    let g:solarized_contrast = "high"
    colorscheme solarized
    
    其中之一应该能够正常工作,但是要先检查第1点。

但是,如果您在Snow Leopard上使用默认的内置vim,则无法正常工作,因为它没有支持256种颜色的构建。 我相信Lion中的内置版本有。

编辑:根据对此答案的多个评论,我已从上面的.vimrc示例中删除了 let g:solarized_termcolors = 256 行。这似乎可能会有问题。另一个说,添加 let g:solarized_termcolors = 16 行可以解决颜色显示问题。 您自己的情况可能会有所不同。

第二次编辑: 如果您已将solarized调色板加载到iTerm2中,则必须使 let g:solarized_termcolors=16。 仅在您未将solarized调色板设置为iTerm2的颜色预设时使用 let g:solarized_termcolors=256


13
实际上,"let g:solarized_termcolors = 256" 是我 Solarized 主题显示出现问题的 原因。根据 git 仓库(https://github.com/vim-scripts/Solarized)中的说明,“对于终端用户的重要提示”是,你应该将 "let g:solarized_termcolors=16"。 - Sai Perchard
3
如果您正在终端中使用Solarized配色方案,则16个ANSI颜色将被设置为Solarized颜色,此时您需要设置“let g:solarized_termcolors = 16”。如果您使用256,则颜色接近,但背景将是灰色而不是深海蓝色。 - Parker Selbert
2
似乎在Lion上,使用“256”会给我灰色背景而不是深蓝色,但是“16”看起来与从我的vimrc中省略该变量完全相同。嗯,比之前得到的非常浅的灰色,深灰色更好。 - styfle
1
@SaiPerchard应该在答案中添加评论。对我来说,这就是修复错误背景颜色的方法。 - Marten Sytema
1
对我没用:https://dev59.com/fWw05IYBdhLWcg3wXQwh#12969298 但这个可以。ITerm,solarized主题加上vim solarized主题。 - user115014

95

以上答案对我没有用。

我正在使用OS X 10.7.4上的iTerm2和vim 7.3。

如果以上解决方案对您也无效,请尝试这个方法。

syntax on
set background=dark
let g:solarized_termtrans = 1
colorscheme solarized

更新:根据Jim Stewart的说法,这也适用于Kitty


2
我正在Windows 7上使用KiTTY(PuTTY派生版),并且 let g:solarized_termtrans = 1 解决了一个问题,即空行的背景颜色为灰色,但文本行的背景颜色在内容后面是黑色。 - Jim Stewart
如果您使用其他配色方案,您可以使用“hi Normal ctermbg = NONE”,因为这基本上是太阳能中“termtrans”所做的(据我从他们的源代码中了解)。 - Achal Dave
在我的OSX 10.9和iTerm2 1.0.0.20131109上运行良好。 - kravc
1
这是最接近工作的,它正确地设置了背景颜色,但我的光标行、颜色列和行号列都有黑色背景。为什么没有什么是容易的! - Ian Vaughan
同样的问题,已经在 https://github.com/altercation/ethanschoonover.com/issues/27 上创建了一个问题。 - dymv
显示剩余3条评论

13

https://github.com/altercation/solarized/tree/master/iterm2-colors-solarized

下载 Solarized 包 (https://github.com/altercation/solarized) 并按照以下步骤进行:

打开 iTerm 2,打开偏好设置,单击偏好设置工具栏中的“Profiles” (曾用名: Addresses, 曾用名:Bookmarks) 图标,然后选择“colors”选项卡。单击“load presets”,然后选择“import...”。选择 Solarized Light 或 Dark 主题文件。

现在,您已经将 Solarized 颜色预设加载到 iTerm 2 中,但尚未应用它们。要应用它们,只需从左侧的配置文件列表窗口中选择一个现有的配置文件,或创建一个新的配置文件。然后从“Load Presets”下拉菜单中选择 Solarized Dark 或 Solarized Light 预设即可。

====================================

或者:

cd ~/.vim/bundle
git clone git://github.com/altercation/vim-colors-solarized.git

修改 .vimrc

暗色主题:

syntax enable
set background=dark
colorscheme solarized

syntax enable
set background=light
colorscheme solarized

2
之前的回答都没有解决我的问题,但这个可以。原来我缺少的是颜色预设。 - Sophia Feng

10

这在我使用的OS X 10.9.1中的iTerm 2和终端中都起作用。我犯了一个错误,就是在设置termtrans和termcolors之前声明了颜色方案(而且我需要这两个东西才能让它工作)。正如其他人所说,我将我的终端类型设置为xterm-256color。

if !has("gui_running")
    let g:solarized_termtrans=1
    let g:solarized_termcolors=256
endif

colorscheme solarized
set background=dark

7

从作者: http://ethanschoonover.com/solarized/vim-colors-solarized

对于终端用户的重要说明:

如果你要在终端模式下使用Solarized(即不是在gvim或macvim等GUI版本中使用),请务必考虑将终端仿真器的配色方案设置为使用Solarized调色板。在官方Solarized下载页面提供了一些流行的终端仿真器和Xdefaults调色板。如果您不使用这些颜色,Solarized需要被告知将其颜色方案降级为与有限的256个终端调色板兼容的一组颜色方案(而通过使用终端的16个ansi颜色值,您可以设置Solarized调色板的正确、特定值)。

如果您使用自定义终端颜色,solarized.vim应该可以直接为您工作。如果您使用支持256种颜色的终端仿真器并且不想使用自定义的Solarized终端颜色,则需要使用降级的256种颜色方案。要这样做,只需在colorschem solarized行之前添加以下行:

let g:solarized_termcolors=256

我再次建议您手动或通过导入中的许多终端方案将您的终端颜色更改为Solarized值。


这是我在非 GUI MacVim 中让 iTerm2 使用 solarized 颜色的唯一方法。 - Aaron Tribou

7

我在OSX 10.11.6,iTerm2 Build 3.0.12上遇到了同样的问题。

这是我的解决方法。

  1. 更改 .vimrc 文件

    syntax enable set background=dark colorscheme solarized

  2. 将 Report Terminal Type 设置为 xterm-256color

enter image description here

  1. 在配置文件中设置颜色预设为 Solarized Dark。

enter image description here


点赞,因为这是我需要尝试不同颜色预设的线索,从而发现在 Mac 和 Linux 上处理超过 256 的颜色转义代码的方式不同。在 Mac 上,超过 256 的颜色似乎被修改然后压缩到所选的 8 种 ANSI 颜色之一,而在 Linux 上则似乎执行模数运算,环绕并选择一种颜色。 - Eric Leschinski

4

Bill Turner的答案是可行的,但有一种方法可以使颜色与MacVim完全匹配。Solarized专门支持iTerm2,以及其他终端仿真器。

  1. 转到iterm2-colors-solarized github页面
  2. 按照“安装”下面的说明操作
  3. 确保您的.vimrc文件中有以下行:colorscheme solarized

这样应该可以将vim颜色在iTerm2中设置为与gui编辑器完全相同。


正如答案中所提示的那样,Bill Turner 的答案也是正确的,但是这是官方(因此正确的)设置“solarized”主题的方法。 - Can

1

解决这个问题的简单方法是:

在vim-color-solarized的colors目录中存在一个名为'solarozed.vim'的文件。

打开这个文件并搜索:
exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'"

将其替换为:
exe "let s:bg_back = ' ".s:vmode."bg=".s:none ."'"


1
对于像我一样仍然存在问题的人,我已经安装了iterm2 solarized color profile。将vim-color-solarized安装到vim bundles并按照说明进行操作是不必要的,而且不兼容。会出现有趣的高亮问题,就像上面的屏幕截图一样。
教训:不要同时进行两者操作。

0

我尝试了之前的所有建议。我只是在 .vimrc 中添加了 set t_Co=256,问题就解决了。我不需要创建一个 tmux 别名或更改我的配置文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接