重新加载vimrc会导致不同的语法高亮显示

重新加载vimrc会导致不同的语法高亮显示,vim,Vim,当我在macvim中打开一个文件时,它是这样的。 我已将,V设置为:source~/.vimrc 打开此文件后,我按,V,突出显示的语法将对此进行更改。 区别在于(,),,,从蓝色变为白色,->,,?从蓝色变为深蓝色。 为什么会这样?这是我的vimrc文件 -- 更新:我发现Valloric/vim operator highlight是更改颜色的插件。因此,第一张图片是正确的图片。 我还发现,只要我执行:syntax on,颜色就会重置。有没有办法检查语法是否已经打开了?我想Highlight

当我在macvim中打开一个文件时,它是这样的。 我已将
,V
设置为
:source~/.vimrc

打开此文件后,我按
,V
,突出显示的语法将对此进行更改。 区别在于
从蓝色变为白色,
->
从蓝色变为深蓝色。 为什么会这样?这是我的vimrc文件

--
更新:我发现
Valloric/vim operator highlight
是更改颜色的插件。因此,第一张图片是正确的图片。
我还发现,只要我执行
:syntax on
,颜色就会重置。有没有办法检查语法是否已经打开了?

我想Highlighting是由某个插件定义/更改的。重新执行
:colorscheme
会重置这些定义。这些插件必须通过
:autocmd
连接到
ColorScheme
事件中,但大多数插件都没有

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

if ! exists('g:colors_name') || g:colors_name !=# 'Tomorrow-Night-Eighties'
    colorscheme Tomorrow-Night-Eighties
endif
这对我有用

"auto reload vimrc once changed
if has("autocmd")
  autocmd! BufWritePost .vimrc source $MYVIMRC

  " This fixes the color changes and things not working :D
  autocmd! BufWritePost .vimrc filetype plugin indent on
endif

很可能与你的特殊情况无关,但我有一个类似的问题,所以我想我会分享,因为这是谷歌上的第一个StackOverflow结果

我的重新加载问题分为两个阶段:使用深色日光浴主题,重新加载
。vimrc
将首先稍微更改颜色,然后,再次重新加载,它将切换到浅色日光浴主题

my
.vimrc
中有关颜色的行是:

set background="dark"
let g:solarize_termcolors=256
colorscheme solarized
问题出在哪里?第一行不应该有引号:

set background=dark

我现在可以重新加载
.vimrc
,而无需更改颜色。我不知道为什么它会工作一次,然后工作一个不同的方式虽然。我意识到,在评论完所有内容之后,除了其他人所建议的这些台词之外。

我也有类似的事情发生。我能够通过确保它们的顺序正确来解决问题:

syntax on
let g:solarized_termtrans=1
let g:solarized_termcolors=256
set background=dark
colorscheme solarized
我也用它来重新加载

augroup reload_vimrc
autocmd!
autocmd BufWritePost $MYVIMRC source $MYVIMRC
augroup END
有了这两个,我可以实时更新我的vimrc,而不必重新加载。我正在使用带终端vim的iTerm2。希望这能帮助其他人,因为我已经花了相当多的时间试图让这个实时重新加载工作。还要确保您拥有最新版本的solarized主题。我知道这似乎很平常,但可能会有所不同。

问题: 当重新加载
.vimrc
时,一些突出显示组被弄乱了。 这取决于你有什么插件和你正在使用什么配色方案。 我注意到一些突出显示链接被破坏,一些突出显示组被清除

受影响的突出显示组 在我的特定设置中,我注意到以下位置的
hi链接已断开
或组已清除

  • SignColumn
  • (使用
    标志栏
  • (它使用状态行)
重新加载后注意受影响的区域:
(重新加载意味着保存修改后的文件。在本例中使用
:wa

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

丑陋的黑客 重新加载vimrc: 对我的vim配置文件进行任何更改时,我都会执行
reload.vim

.vimrc:

" .....
augroup reload_vimrc " {
    autocmd!
    autocmd BufWritePost ~/.vim/*.vim,~/.vim/vimrc source ~/.vim/reload.vim
augroup END " }
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)
reload.vim
:恢复断开的链接和清除的组 我们要做的是在采购
vimrc
后恢复
hi

要查找受影响区域的正确值,例如
标志栏
,请键入:
:hi SignColumn
,在重新加载之前。

结果是(其中
xxx
是预览):

您必须为每个受影响的
hi

在下面的代码片段中,我首先修复了
SignColumn
,以匹配我的
solarized
配色方案。
然后我修复了一些
gitboolt
颜色问题:
e、 例如,
GitGutterAdd
链接到被保留的
GitGutterAddDefault
,但是从
GitGutterAddDefault
DiffAdd
的链接被破坏,所以我重新安装了该链接。等等。

重新加载。vim:

" .....
augroup reload_vimrc " {
    autocmd!
    autocmd BufWritePost ~/.vim/*.vim,~/.vim/vimrc source ~/.vim/reload.vim
augroup END " }
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)
一切正常:

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

这听起来可能需要做很多工作,但事实并非如此。
这里有一个完整的
reload.vim
,还有一些
gif
来指导您。我完全不知道为什么(可能是因为手动执行
:source~/.vimrc
的相同原因),但对我来说是

autocmd BufWritePost *vimrc,*exrc :source %

autocmd-BufWritePost*vimrc,*exrc:callfeedkeys(“:source%\”)

修复了该问题。

autocmd-BufWritePost*vimrc,*exrc:call-feedkeys(“:source%\”)


马上给我修好。一定是订货时有什么奇怪的问题。我还有一个按键来为文件分配资源,即使autocmd出现故障,这也始终有效。

什么是
:设置背景?