我知道这个问题很久以前就被问过了,你可能已经得到了你想要的答案,但无论如何我还是会发布我的解决方案,在我看来这足够好,可以在这里分享。
hi StatusLine ctermfg=253 ctermbg=233 cterm=bold
hi StatusLineNormal ctermfg=251 ctermbg=26 cterm=bold
hi StatusLineInsert ctermfg=251 ctermbg=22 cterm=bold
hi StatusLineReplace ctermfg=251 ctermbg=88 cterm=bold
hi StatusLineVisual ctermfg=251 ctermbg=130 cterm=bold
hi StatusLineVisualL ctermfg=251 ctermbg=130 cterm=bold
hi StatusLineVisualB ctermfg=251 ctermbg=130 cterm=bold
hi StatusLineCommand ctermfg=251 ctermbg=26 cterm=bold
hi StatusLineSelect ctermfg=251 ctermbg=130 cterm=bold
hi StatusLineSelectL ctermfg=251 ctermbg=130 cterm=bold
hi StatusLineSelectB ctermfg=251 ctermbg=130 cterm=bold
hi StatusLineTerminal ctermfg=251 ctermbg=22 cterm=bold
let s:statusline_modes_dict = {
\ 'n' : {
\ 'text' : 'NORMAL',
\ 'color_group' : 'StatusLineNormal'
\ },
\ 'i' : {
\ 'text' : 'INSERT',
\ 'color_group' : 'StatusLineInsert'
\ },
\ 'R' : {
\ 'text' : 'REPLACE',
\ 'color_group' : 'StatusLineReplace'
\ },
\ 'v' : {
\ 'text' : 'VISUAL',
\ 'color_group' : 'StatusLineVisual'
\ },
\ 'V' : {
\ 'text' : 'V-LINE',
\ 'color_group' : 'StatusLineVisualL'
\ },
\ "\<C-v>" : {
\ 'text' : 'V-BLOCK',
\ 'color_group' : 'StatusLineVisualB'
\ },
\ 'c' : {
\ 'text' : 'COMMAND',
\ 'color_group' : 'StatusLineCommand'
\ },
\ 's' : {
\ 'text' : 'SELECT',
\ 'color_group' : 'StatusLineSelect'
\ },
\ 'S' : {
\ 'text' : 'S-LINE',
\ 'color_group' : 'StatusLineSelectL'
\ },
\ "\<C-s>" : {
\ 'text' : 'S-BLOCK',
\ 'color_group' : 'StatusLineSelectB'
\ },
\ 't' : {
\ 'text' : 'TERMINAL',
\ 'color_group' : 'StatusLineTerminal'
\ },
\ }
function Get_current_mode_text ()
let md = mode()
if (has_key (s:statusline_modes_dict, md))
return s:statusline_modes_dict[md]['text']
endif
return md
endfunction
function Get_current_mode_color_group ()
let md = mode()
if (has_key (s:statusline_modes_dict, md))
return "%#" . s:statusline_modes_dict[md]['color_group'] . "#"
endif
return "%#StatusLine#"
endfunction
" left
set statusline=
set statusline+=%{%Get_current_mode_color_group()%}\
set statusline+=%{Get_current_mode_text()}\
set statusline+=%#Statusline#\
这里的
statusline_modes_dict
存储了与
mode()
返回值完全相同的
key
,它还有要显示在状态栏和高亮组(
color_group
)中的
text
。当然,这些高亮组必须添加到颜色方案或其他地方。
也许有可能将
Get_current_mode_text()
和
Get_current_mode_color_group()
合并为一个函数以减少操作次数,但我尝试在状态栏中运行时失败了。
set statusline=
,你就可以一遍又一遍地source
你的 vimrc 文件而不会重复样式。 - Tom Saleebahi CommandColor
没有效果。 - Andreja Milosavljevichi CommandColor ctermbg=23 ctermfg=32
,然后你可以按照自己的需求使用它。在这个例子中,CommandColor只是一个变量名,如果你愿意,你可以使用任何名称。 - wasd