我试图改善我的vim体验,试图让vim状态线颜色在每次模式改变时都改变。
我是这样做的:(找到here)
"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
...并包括:
set statusline+=%{ChangeStatuslineColor()}
但是有一个问题,如果你切换到插入模式,然后按Esc返回正常模式,它不会改变颜色。只有在您手动输入其他模式时,它才会改回颜色。
答案 0 :(得分:2)
我发现以下方法最适合我。它为我提供了所有不同模式的颜色,而不仅仅是插入、替换、视觉和正常。
function! GitBranch()
return system("git rev-parse --abbrev-ref HEAD 2>/dev/null | tr -d '\n'")
endfunction
function! StatuslineGit()
let l:branchname = GitBranch()
return strlen(l:branchname) > 0?' '.l:branchname.' ':''
endfunction
let g:currentmode={
\ 'n' : 'n',
\ 'v' : 'v',
\ 'V' : 'vl',
\ '' : 'vb',
\ 'i' : 'i',
\ 'R' : 'r',
\ 'Rv' : 'rv',
\ 'c' : 'c',
\ 't' : 'f',
\}
hi NormalColor ctermbg=black ctermfg=white
hi InsertColor ctermbg=darkgreen ctermfg=black
hi ReplaceColor ctermbg=darkred ctermfg=black
hi VisualColor ctermbg=darkblue ctermfg=black
set laststatus=2
set statusline=
set statusline+=%#NormalColor#%{(g:currentmode[mode()]=='n')?'\ \ normal\ ':''}
set statusline+=%#InsertColor#%{(g:currentmode[mode()]=='i')?'\ \ insert\ ':''}
set statusline+=%#ReplaceColor#%{(g:currentmode[mode()]=='r')?'\ \ replace\ ':''}
set statusline+=%#ReplaceColor#%{(g:currentmode[mode()]=='rv')?'\ \ v-replace\ ':''}
set statusline+=%#VisualColor#%{(g:currentmode[mode()]=='v')?'\ \ visual\ ':''}
set statusline+=%#VisualColor#%{(g:currentmode[mode()]=='vl')?'\ \ v-line\ ':''}
set statusline+=%#VisualColor#%{(g:currentmode[mode()]=='vb')?'\ \ v-block\ ':''}
set statusline+=%#NormalColor#%{(g:currentmode[mode()]=='c')?'\ \ command\ ':''}
set statusline+=%#NormalColor#%{(g:currentmode[mode()]=='f')?'\ \ finder\ ':''}
set statusline+=%#PmenuSel#
set statusline+=%{StatuslineGit()}
set statusline+=%#Statusline#
set statusline+=\ %f
set statusline+=%m
set statusline+=%=
set statusline+=%#StatusLineNc#
set statusline+=\ %y
set statusline+=\ %{&fileencoding?&fileencoding:&encoding}
set statusline+=\ %p%%
set statusline+=\ %l:%c
答案 1 :(得分:1)
可能你应该尝试这个vim插件vim-airline。它可以根据您设置的colortheme自动更改状态线颜色作为模式更改。
答案 2 :(得分:1)
我喜欢有两个vim配置,一个使用插件,另一个只有vimrc。要在没有像航空公司这样的插件的情况下执行此操作,我通常会使用以下代码段:http://vim.wikia.com/wiki/Change_statusline_color_to_show_insert_or_normal_mode
function! InsertStatuslineColor(mode)
if a:mode == 'i'
hi statusline guibg=magenta
elseif a:mode == 'r'
hi statusline guibg=blue
else
hi statusline guibg=red
endif
endfunction
au InsertEnter * call InsertStatuslineColor(v:insertmode)
au InsertChange * call InsertStatuslineColor(v:insertmode)
au InsertLeave * hi statusline guibg=green
" default the statusline to
进入Vim时绿色 你好状态线guibg =绿色
如维基上所述:
以下小块会改变状态行的颜色 进入插入模式,并在退出插入模式时。没有 映射键或新命令要记住,它完全有效 自动。
当然,如果您不喜欢所选的颜色,您可以改变这些位:
guibg =品红
答案 3 :(得分:1)
很抱歉,您可以进行尸检,但我认为我找到了一种更好的解决方案。 设置所需的颜色
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
现在添加到状态行
set statusline+=%#NormalColor#%{(mode()=='n')?'\ \ NORMAL\ ':''}
set statusline+=%#InsertColor#%{(mode()=='i')?'\ \ INSERT\ ':''}
set statusline+=%#ReplaceColor#%{(mode()=='R')?'\ \ REPLACE\ ':''}
set statusline+=%#VisualColor#%{(mode()=='v')?'\ \ VISUAL\ ':''}
它运行完美,不需要任何可视模式的解决方法,也不需要其他光标移动即可触发颜色更改。