在vim中更改水平分割状态栏的高亮颜色

10

我正在使用Vim的Solarized颜色方案。 当我打开一个水平分割的vim会话时,水平分割几乎是看不见的。 另一方面,窗口之间的垂直分割线是清晰可见的。

这里是在cygwin上使用暗色Solarized主题的图片。 您可以看到白色垂直线将侧边栏与其他两个窗口分开。 您还可以看到一个空白区域(顶部窗口)和一个带有文本的区域(底部窗口)。 问题在于顶部和底部窗口之间没有有效的可见分隔符。我希望这个分隔符与垂直分隔符的颜色相同。

(请注意,在Ubuntu上使用终端时,任何配色方案都会出现相同的问题。 基本上,无论我在哪里使用vim,水平分割线都没有突出显示。)

enter image description here

以下是我认为是solarized.vim的相关代码行(假设statusline是我要配置的内容)。 我只是不确定如何修改它们。

exe "hi! StatusLine"     .s:fmt_none   .s:fg_base1  .s:bg_base02 .s:fmt_revbb
exe "hi! StatusLineNC"   .s:fmt_none   .s:fg_base00 .s:bg_base02 .s:fmt_revbb
exe "hi! Visual"         .s:fmt_none   .s:fg_base01 .s:bg_base03 .s:fmt_revbb
exe "hi! Directory"      .s:fmt_none   .s:fg_blue   .s:bg_none
exe "hi! ErrorMsg"       .s:fmt_revr   .s:fg_red    .s:bg_none
exe "hi! IncSearch"      .s:fmt_stnd   .s:fg_orange .s:bg_none
exe "hi! Search"         .s:fmt_revr   .s:fg_yellow .s:bg_none
exe "hi! MoreMsg"        .s:fmt_none   .s:fg_blue   .s:bg_none
exe "hi! ModeMsg"        .s:fmt_none   .s:fg_blue   .s:bg_none
exe "hi! LineNr"         .s:fmt_none   .s:fg_base01 .s:bg_base02
exe "hi! Question"       .s:fmt_bold   .s:fg_cyan   .s:bg_none
if ( has("gui_running") || &t_Co > 8 )
    exe "hi! VertSplit"  .s:fmt_none   .s:fg_base00 .s:bg_base00
else
    exe "hi! VertSplit"  .s:fmt_revbb  .s:fg_base00 .s:bg_base02
endif

编辑:我尝试使用 Steve 建议的命令,但似乎我的问题更加深入。我设置了以下变量,但只是将侧边栏周围的分隔符染色。关于水平分割仍然没有任何改变。有人知道这里出了什么问题吗?

exe "hi! StatusLine"     .s:fmt_none   .s:fg_red  .s:bg_red .s:fmt_revbb
exe "hi! StatusLineNC"   .s:fmt_none   .s:fg_red    .s:bg_red
exe "hi! VertSplit"  .s:fmt_revbb  .s:fg_red .s:bg_red

在此输入图像描述

编辑2:我分析了我的 .vimrc 文件并确认问题出现在这些行。一旦将这些行注释掉,水平分屏默认就像垂直分屏一样了……糟糕!

set statusline=                                        " Override default
set statusline+=%2*\ %f\ %m\ %r%*                      " Show filename/path
set statusline+=%3*%=%*                                " Set right-side status info after this line
set statusline+=%4*%l/%L:%v%*                          " Set <line number>/<total lines>:<column>
set statusline+=%5*\ %*                                " Set ending space

我不知道变量是如何定义的,但我猜你想要类似这样的东西:exe "hi! StatusLine" .s:fmt_none .s:fg_base02 .s:bg_base02 .s:fmt_revbb 其中前景色和背景色具有相同的基础。 - FDinoff
我显然不知道自己在做什么,因为即使是 exe "hi! StatusLine" .s:fmt_none .s:fg_green .s:bg_green .s:fmt_revbb 也没有改变任何东西。 - Fonnae
你需要 VertSplit 颜色组而不是 StatusLine。 - FDinoff
@FDinoff 但是 VertSplit 不会影响水平线吗?我想要改变水平线的颜色。无论如何,很高兴尝试。我应该将 VertSplit 改成什么? - Fonnae
我可能对你想要更改哪个部分感到困惑。但是,我猜你想要更改的是StatusLine。嗯。 - FDinoff
显示剩余2条评论
2个回答

8
实际上,水平拆分是StatusLineNC。
将其设置为:
exe "hi! StatusLineNC"   .s:fmt_none   .s:fg_red .s:bg_base02 .s:fmt_revbb

并将Vsplit行到

   exe "hi! VertSplit"  .s:fmt_none   .s:fg_red .s:bg_red

使其看起来如下。不完全可见,但可以玩弄颜色。

enter image description here

编辑:使用https://github.com/Rykka/colorv.vim/来显示行中的颜色,使得更容易看出每种颜色是什么。


不幸的是,那并没有解决我的问题,但它揭示了我的问题在其他地方。我将拆开我的vim配置,并尝试慢慢添加东西,以查看是否可以隔离问题。 - Fonnae
我发现问题与我在.vimrc中的某些状态行格式相关。由于您的回答从技术上来说是正确的答案,并且为我提供了解决问题所需的见解,所以我给予了您的回答信用。如果您能告诉我如何在不破坏颜色的情况下设置状态行样式,那就更好了。 - Fonnae
不太了解状态行,但如果您发布导致问题的那个状态行,尝试一下会很有趣 :) - Steve

2

关于如何在不破坏颜色的情况下设计状态栏,你的状态行中的 '%[num]*' 序列会使其从StatusLine高亮切换到User[num]高亮。如果你删除这些序列(或定义相关的高亮),就可以使用自定义状态栏而不会破坏高亮。

来自:help 'statusline'

 * -  Set highlight group to User{N}, where {N} is taken from the
      minwid field, e.g. %1*.  Restore normal highlight with %* or %0*.
      The difference between User{N} and StatusLine  will be applied
      to StatusLineNC for the statusline of non-current windows.
      The number N must be between 1 and 9.  See |hl-User1..9|

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