7

当我在 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,颜色就会重置。有没有办法检查语法是否已经启用?

4

7 回答 7

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 " }

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)

一切正常: 修复喜组和链接

固定powerline-status颜色:

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

这听起来像是很多工作,但事实并非如此。这是一个完整的要点reload.vim,以及一些gifs指导您完成的要点。

于 2017-02-10T17:43:06.350 回答
3

我遇到了与这种情况非常相似的事情。我能够通过确保这些顺序正确来解决它:

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 而无需重新加载。我正在将 iTerm2 与终端 vim 一起使用。希望这可以帮助其他人,因为我花了很多时间试图让这个实时重新加载工作。还要确保您拥有最新版本的日光主题。我知道提起来似乎很平凡,但它可能会有所作为。

于 2015-02-17T18:22:53.123 回答
1

这对我有用

"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
于 2013-06-04T18:25:23.140 回答
1

我想突出显示是由某些插件定义/更改的。重新执行会:colorscheme重置这些定义。插件必须使用 连接到ColorScheme事件中:autocmd,但大多数都不需要。

要解决此问题,请尝试将其包裹:colorscheme在警卫中:

if ! exists('g:colors_name') || g:colors_name !=# 'Tomorrow-Night-Eighties'
    colorscheme Tomorrow-Night-Eighties
endif
于 2013-02-19T08:10:13.920 回答
1

autocmd BufWritePost *vimrc,*exrc :call feedkeys(":source %\<cr>")

马上给我修好了。订购时一定有一些奇怪的问题。我也有一个按键来资源文件,即使 autocmd 失败,这也总是有效。

于 2018-11-27T14:11:50.180 回答
1

我完全不知道为什么,(可能出于与:source ~/.vimrc手动操作相同的原因)但对我来说更换

autocmd BufWritePost *vimrc,*exrc :source %

autocmd BufWritePost *vimrc,*exrc :call feedkeys(":source %\<cr>")

解决了这个问题。

于 2018-02-13T10:23:06.840 回答
0

很可能与您的特定情况无关,但我遇到了类似的问题,所以我想我会分享,因为这是 Google 上的第一个 StackOverflow 结果。

我的重新加载问题分为两个阶段:使用深色 Solarized 主题,重新加载.vimrc首先会稍微改变颜色,然后第二次重新加载,它会切换到浅色 Solarized 主题。

我的关于颜色的行.vimrc是:

set background="dark"
let g:solarize_termcolors=256
colorscheme solarized

问题?第一行不应该有引号:

set background=dark

我现在可以.vimrc在不改变颜色的情况下重新加载。我不确定为什么它会工作一次,但之后会以不同的方式工作。我意识到,在注释掉除其他人建议的这些行之外的所有内容之后。

于 2013-10-21T17:12:43.903 回答