我试图改善我的 vim 体验,试图在每次模式更改时更改 vim 状态行颜色。
我试过这个:(在这里找到)
"Automatically change the statusline color depending on mode
function! ChangeStatuslineColor()
if (mode() =~# '\v(n|no)')
exe 'hi! StatusLine ctermfg=008'
elseif (mode() =~# '\v(v|V)' || g:currentmode[mode()] ==# 'V·Block' || get(g:currentmode, mode(), '') ==# 't')
exe 'hi! StatusLine ctermfg=005'
elseif (mode() ==# 'i')
exe 'hi! StatusLine ctermfg=004'
else
exe 'hi! StatusLine ctermfg=006'
endif
return ''
endfunction
Run Code Online (Sandbox Code Playgroud)
...包括:
set statusline+=%{ChangeStatuslineColor()}
Run Code Online (Sandbox Code Playgroud)
但是有一个问题,如果你切换到插入模式,然后按 Esc 键回到正常模式,它不会改变颜色。只有当您手动进入不同的模式时,它才会变回颜色。
很抱歉进行 necroposting,但我想我为这项任务找到了更好的解决方案。像这样设置所需的颜色
hi NormalColor guifg=Black guibg=Green ctermbg=46 ctermfg=0
hi InsertColor guifg=Black guibg=Cyan ctermbg=51 ctermfg=0
hi ReplaceColor guifg=Black guibg=maroon1 ctermbg=165 ctermfg=0
hi VisualColor guifg=Black guibg=Orange ctermbg=202 ctermfg=0
Run Code Online (Sandbox Code Playgroud)
现在添加到状态行
set statusline+=%#NormalColor#%{(mode()=='n')?'\ \ NORMAL\ ':''}
set statusline+=%#InsertColor#%{(mode()=='i')?'\ \ INSERT\ ':''}
set statusline+=%#ReplaceColor#%{(mode()=='R')?'\ \ REPLACE\ ':''}
set statusline+=%#VisualColor#%{(mode()=='v')?'\ \ VISUAL\ ':''}
Run Code Online (Sandbox Code Playgroud)
它工作完美,不需要任何视觉模式的解决方法,也不需要额外的光标移动来触发颜色变化。