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

时间:2013-02-18 18:42:17

标签: vim

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

我打开此文件后,按,V,语法突出显示对此http://imgur.com/a/3cLqB#1的更改。 区别在于();,来自蓝色,白色,->.,{{1}变成蓝色,深蓝色。 为什么会这样?这是我的vimrc文件https://gist.github.com/pvinis/4979592

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

7 个答案:

答案 0 :(得分: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和Terminal vim。希望这可以帮助其他人,因为我花了很多时间试图让这个实时重装工作。还要确保您拥有曝光主题的最新版本。我知道这似乎很平常,但它可能会有所作为。

答案 1 :(得分:2)

问题:

重新加载.vimrc时,某些突出显示的组会混乱。 这取决于你拥有什么插件以及你正在使用什么颜色方案。 我注意到有些highlight links被破坏了,有些highlight groups被清除了。

受影响的突出显示组

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

重新加载后注意受影响的区域:
(重新加载意味着保存修改后的文件。在此示例中使用:waReloading mess!

解决方案

不幸的是,我尝试过的列出的答案或任何选项组合在重新加载后都不会保留或恢复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 SignColumn

您必须为每个受影响的hi执行此操作 在以下代码段中,我最初修复了SignColumn以匹配我的solarized colorscheme 然后我修复了一些GitGutter颜色问题:
例如,GitGutterAdd与已保留的GitGutterAddDefault相关联,但从GitGutterAddDefaultDiffAdd已损坏,因此我重新安装了该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:

powerline

一切正常: Fix hi groups and links

修复powerline-status颜色:

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

这可能听起来像很多工作,但事实并非如此。 这是一个gist,其中包含完整的gifs,还有一些int/double可以指导您完成。

答案 2 :(得分:1)

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

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

if ! exists('g:colors_name') || g:colors_name !=# 'Tomorrow-Night-Eighties'
    colorscheme Tomorrow-Night-Eighties
endif

答案 3 :(得分: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

答案 4 :(得分:1)

我完全不知道为什么,(可能是因为:source ~/.vimrc手动操作的原因相同)但是我替换了

autocmd BufWritePost *vimrc,*exrc :source %

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

修复了问题。

答案 5 :(得分:0)

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

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

.vimrc中关于颜色的线条是:

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

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

set background=dark

我现在可以在不更改颜色的情况下重新加载.vimrc。虽然我不知道为什么它会工作一次并以不同的方式工作。我意识到除了其他人所建议的那样,除了这些内容之外的其他所有内容。

答案 6 :(得分:0)

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

立即为我修复。订购一定是一些奇怪的问题。我也有一个按键来获取文件资源,即使autocmd出现故障,此总是仍然有效。