重新加载vimrc导致不同的语法突出显示

pvi*_*nis 5 vim

当我在macvim中打开一个文件时,它就像这个http://imgur.com/a/3cLqB#0.我已经开始,V:source ~/.vimrc<CR>.

打开此文件后,按,V,语法突出显示更改为此http://imgur.com/a/3cLqB#1.所不同的是(,),;,,由蓝,白,变得->,.,?从蓝色,深蓝色变成.为什么会这样?这是我的vimrc文件https://gist.github.com/pvinis/4979592

-
更新:我发现这Valloric/vim-operator-highlight是改变颜色的插件.所以第一张照片是正确的照片.我也发现,只要我这样做:syntax on,颜色就会重置.有没有办法检查语法是否已经开启?

Pas*_*lis 5

问题:

重新加载时.vimrc,一些突出显示组会变得混乱。这取决于您拥有的插件以及您使用的颜色方案。我注意到有些highlight links被破坏了,有些highlight groups被清理了。

受影响的突出显示组

在我的特定设置中,我注意到以下内容已损坏hi links或已清除groups

注意重新加载后受影响的区域:(
重新加载意味着保存修改后的文件。:wa本例中使用) 重装乱七八糟!

解决方案

不幸的是,列出的答案或我尝试过的选项的任何组合在重新加载后不会保留或恢复组hi。重新加载后手动运行colorscheme <your-coloscheme>可以修复所有问题,但使用它时则Vimscript不会。
希望有人能分享一个正确的解决方案来解决这个恼人的小问题。

丑陋的黑客

重新加载 vimrc:

对我的 vim 配置文件进行任何更改时,我都会执行reload.vim
.vimrc:

" .....
augroup reload_vimrc " {
    autocmd!
    autocmd BufWritePost ~/.vim/*.vim,~/.vim/vimrc source ~/.vim/reload.vim
augroup END " }
Run Code Online (Sandbox Code Playgroud)

reload.vim:恢复断开的链接和清除的组

我们要做的就是hi在采购后恢复这些组vimrc
要查找受影响区域的正确值(例如SignColumn,对于 ),请键入:
:hi SignColumn,在发生任何重新加载之前。

结果是(哪里xxx有预览): hl 标志栏

您必须为每个受影响的人执行此操作hi
在下面的代码片段中,我最初修复SignColumn以匹配我的solarized颜色方案。
然后我修复了一些GitGutter颜色问题:
例如,GitGutterAdd链接到GitGutterAddDefault哪个被保留,但从GitGutterAddDefaultDiffAdd被破坏,所以我重新安装那个。等等。

重新加载.vim:

source ~/.vim/vimrc

hi SignColumn ctermfg=12 ctermbg=0 guifg=Cyan guibg=Grey

" GitGutterAdd -> GitGutterAddDefault (preserved)
hi link GitGutterAddDefault DiffAdd

" GitGutterChange -> GitGutterChangeDefault (preserved)
hi GitGutterChangeDefault ctermfg=3 ctermbg=0 guifg=#bbbb00

" GitGutterDelete -> GitGutterDeleteDefault (preserved)
hi GitGutterDeleteDefault ctermfg=1 ctermbg=0 guifg=#ff2222

" GitGutterChangeDelete -> GitGutterChangeDefault (preserved)
" (which we already fixed above)

" Powerline highlight groups
" (see this attached Gist for solution)
Run Code Online (Sandbox Code Playgroud)

一切都按其应有的方式进行: 修复嗨组和链接

固定powerline-status颜色:

这个有点棘手,但原理是一样的。所有突出显示组都powerline以 开头Pl_。但其中一些可能还不存在。例如,如果您尚未进入visual模式,则尚未填充视觉模式的相应组。因此,输入insertvisualnormal模式来填充组,然后复制它们。您可以在命令输出的底部找到它们hl。然后,将它们粘贴到您的命令中reload.vim并将它们调整为合法hl命令。

这听起来可能需要很多工作,但事实并非如此。以下是完整的要点reload.vim,其中一些gifs可以指导您完成。


Ing*_*kat 1

我猜想突出显示是由某些插件定义/更改的。重新执行将:colorscheme重置这些定义。插件必须使用 挂钩到ColorScheme事件中:autocmd,但大多数都没有。

要解决此问题,请尝试将其包裹:colorscheme在防护装置中:

if ! exists('g:colors_name') || g:colors_name !=# 'Tomorrow-Night-Eighties'
    colorscheme Tomorrow-Night-Eighties
endif
Run Code Online (Sandbox Code Playgroud)