繁体   English   中英

如何确保从Vim中的.vimrc加载正确的状态行突出显示

[英]How to make sure proper statusline highlighting is loaded from .vimrc in Vim

我正在为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 Howewer时,它可以完美工作,它在Vim启动时不会自动工作。 我在设置colorcheme和dark模式后放了高亮显示,但是仍然有这个问题。

我相信这与.vimrc中的会话加载有关。一个可以参考如何在具有会话自动加载的同时在vim中打开文件?

silent source ~/.vim/session.vim

如果我使用自定义颜色(如DiffAddGruvboxPurpleDiffAdd ,也没有问题

我通过分组找到了解决方法:

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

但是我觉得我做错了。

您的问题是要在Session.vim中保存选项( set ssop+=options ---这是Vim的默认值!),该选项 vimrc 之后加载,因此,在启动时,保存在Session.vim中的选项会重新定义 vimrc中的选项。 您可以始终使它们保持同步(这很不方便,IMO),或者(更好) 不要将它们保存在会话文件中。

但是,如果您没有在Session.vim中保存任何选项,那么您还将丢失所有打开的缓冲区的文件类型信息。

通常,文件类型信息是在自动命令机制的帮助下设置的。 但是,默认情况下,Vim禁止递归自动命令调用(即在执行另一个自动命令时调用一个自动命令)。 因此,如果通过自动命令加载会话文件则将有效禁止文件类型检测。

因此,基本上,您有以下选择:

  • 禁用options (不干扰vimrc中的全局设置),但添加localoptions (这样可以保存其他缓冲区设置)
  • 禁用options并使用++nested (或nested在旧的Vim版本中)来显式允许递归自动命令
  • 禁用options并且不使用自动命令来加载会话(例如,使用vim -S

IMO(1)感到有点尴尬,因为vimrc中设置的某些选项可能是全局局部的,因此可能会发生一些冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM