【发布时间】:2019-07-28 08:47:42
【问题描述】:
我正在为 VIM 制作自定义状态栏。我希望状态行的颜色根据当前模式动态变化。我通过以下方式实现:
" Automatically change the statusline color depending on mode
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 laststatus=2
set statusline=
set statusline+=%#NormalColor#%{(mode()=='n')?'\ \ NORMAL\ ':''}
set statusline+=%#InsertColor#%{(mode()=='i')?'\ \ INSERT\ ':''}
set statusline+=%#ReplaceColor#%{(mode()=='R')?'\ \ RPLACE\ ':''}
set statusline+=%#VisualColor#%{(mode()=='v')?'\ \ VISUAL\ ':''}
当我执行:source .vimrc 时它运行良好,但它在 Vim 启动时不会自动运行。我在设置colorscheme和dark mode后设置了高亮,但我仍然有这个问题。
我认为这与我在 .vimrc 中的会话加载有关,可以参考How to open file in vim while having session autoload?
silent source ~/.vim/session.vim
如果我使用像 DiffAdd 这样的自定义颜色或像 GruvboxPurple 这样的颜色方案,也没有问题
我通过分组找到了解决方法:
augroup coloring
autocmd VimEnter * hi NormalColor guifg=Black guibg=Green ctermbg=46 ctermfg=0
autocmd VimEnter * hi InsertColor guifg=Black guibg=Cyan ctermbg=51 ctermfg=0
autocmd VimEnter * hi ReplaceColor guifg=Black guibg=maroon1 ctermbg=165 ctermfg=0
autocmd VimEnter * hi VisualColor guifg=Black guibg=Orange ctermbg=202 ctermfg=0
augroup END
但我觉得我做错了什么。
【问题讨论】:
-
“不起作用”是什么意思?启动时
set laststatus? statusline?是什么?尝试set ssop-=options | mksession,以防您覆盖 Session.vim 中的选项。 -
不工作意味着不使用状态行颜色。
set laststatus? statusline?按原样显示状态行字符串。set ssop-=options | mksession!为状态行打开正确的突出显示,但破坏了整个文件的语法突出显示 -
breaks syntax highlighting你不能破坏“语法”。很可能是缺少文件类型信息。确保在加载会话时有“++nested”。 -
抱歉,我在升级到 8.1 时遇到问题,所以我不使用 ++nested 选项
-
删除你的会话文件并将
set ssop-=options放入vimrc。
标签: vim statusbar color-scheme