从命令行启动 MacVim 时的颜色问题

3

我对Vim比较新,到目前为止一直没有遇到问题。我要么从dock启动MacVim,要么使用命令行中的mvim。这个方法一直很好用,但现在我遇到了一个问题。不知道为什么,从命令行启动MacVim会创建一个颜色全乱的MacVim窗口。当我从dock启动它时,一切都正常。

enter image description here

颜色方案在两个编辑器中都是相同的(solarized),所以我真的很困惑问题出在哪里。我的MacVim是使用Homebrew安装的,看起来dock和命令行的可执行文件是相同的。我甚至尝试直接启动/Applications/MacVim.app/Contents/MacOS/MacVim,但它也是白色的。我正在使用Janus,并尝试使用rake脚本清除我的.vim并重新创建它,但没有变化。
非常感谢任何帮助,提前致谢。
编辑
我的.vimrc/.gvimrc文件相当大,但它们是随Janus一起提供的基本值。我的.vimrc.local/.gvimrc.local也是相同的,看起来像这样:
syntax enable
set background=dark
colorscheme solarized
map f gg=G

我还发现其他主题(如ir_black,Janus默认使用)似乎没有这个问题。
编辑2:
这似乎是一个已知问题,至少有几个人正在经历这个问题。找到解决方案后会发布。
3个回答

2
问题不在于macvim,而在于Terminal.app。苹果的默认终端在支持颜色方面非常古老,仅支持16种颜色。如果使用终端(cterm),大多数vim的颜色方案都是为256种颜色定义的,如果使用gui,则支持1600万种颜色。这就是导致你的颜色出问题的原因。
我建议您使用iTerm2作为您的终端。它支持256种颜色,并具有许多其他功能(分割窗口是我最喜欢的!),并且通常比Terminal.app更稳定。

@Arthur:你可能也想看看这篇关于在iTerm2中使用漂亮的vim配色方案的博客文章 - user616736
1
同意。上周我改用iTerm2,完全放弃了MacVim和Terminal.app。分割窗口,256种颜色,以及通过<CTRL>Z/fg在终端和shell之间切换非常棒。 - zachwill
不错的建议,我试用了iTerm2,似乎没有这个问题。也许我会一直使用它... - Arthur Maltson
1
iTerm2 对我来说没有解决这个问题 :( - Climbs_lika_Spyder
我可以通过在我的~/.vimrc中添加if has("gui_running") set background=light endif来解决这个问题。 - jerik

2
这是由于mvim将终端环境导出到MacVim所致。
我已经在Solarized中检查了是否在Terminal.app中运行,并且如果是,则在vim中使用透明(NONE)背景以避免一些奇怪的颜色问题。不幸的是,我没有意识到mvim也会将其终端环境导出到MacVim。我之前要求vim检查$TERM_PROGRAM的值,如果它是terminal.app的字符串,那么我就假设我在其中。我已将其更改为现在检查字符串并进行检查。
MacVim应该丢弃终端环境吗?我不知道。我怀疑不会。因此,我建议在使用vim脚本中的环境变量时最佳实践是检查是否有gui_running,如果与检查相关。
至于这个问题,我已经在GitHub的solarized项目上添加了一个修复程序,提交为d5fcacea,并在此处和另一个远程用户进行了测试。

0
你能贴出你的 .vimrc 文件吗?
这是我自己的配置,我没有遇到你描述的问题:
if has("gui_running")
    augroup RCVisual
        autocmd!
        autocmd GUIEnter *  colorscheme mycolo
    augroup END
else    
    colo desert
endif

人们总是因为我在 #vim 上做事情与众不同而对我大声喊叫,但它们总是对我有效。换句话说,这可能不是最佳实践,但它确实可行。


我已经发布了那些文件。我也尝试将你建议的内容添加到我的 .gvim.local 文件中,但它没有任何效果。 - Arthur Maltson

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