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

egdjgwm8  于 2022-11-11  发布在  其他
关注(0)|答案(8)|浏览(115)

When I open up a file in macvim it is like this http://imgur.com/a/3cLqB#0. I have set ,V to :source ~/.vimrc<CR> .
After I have this file open, I press ,V , and the syntax highlighting changes to this http://imgur.com/a/3cLqB#1. The difference is that ( , ) , ; , , become from blue, white, and -> , . , ? become from blue, darker blue. Why does that happen? This is my vimrc file https://gist.github.com/pvinis/4979592

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

htzpubme

htzpubme1#

这对我有用

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

r1zhe5dt2#

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

autocmd BufWritePost *vimrc,*exrc :source %

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

已修复问题。

gr8qqesn

gr8qqesn3#

autocmd BufWritePost *vimrc,*exrc :call feedkeys(":source %\<cr>")
我马上修复了它。一定是一些奇怪的问题与排序。我也有一个按键资源的文件,这 * 总是 * 工作,即使当autocmd失败。

rlcwz9us

rlcwz9us4#

最有可能与您的特定情况无关,但我有一个类似的问题,所以我想我会分享,因为这是第一个StackOverflow结果在谷歌上。
我的重装问题分为两个阶段:使用深色Solarized主题,重新加载.vimrc会首先稍微改变颜色,然后,第二次重新加载,它会切换到浅色Solarized主题。
我的.vimrc中关于颜色的行是:

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

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

set background=dark

我现在可以重新加载.vimrc而不改变颜色。我不知道为什么它会工作一次,但工作后的不同方式。我意识到,在注解掉一切,但这些行,因为其他人已经建议。

v2g6jxz6

v2g6jxz65#

syntax enable设置在colorscheme之后

1l5u6lss

1l5u6lss6#

问题:

在重新加载.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:恢复断开的链接和清除的组

我们要做的是在获得vimrc后恢复hi组。
要查找受影响区域的正确值,例如SignColumn,请键入:
:hi SignColumn,* 在 * 发生任何重新加载之前。

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

您必须对每个受影响的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模式,则视觉模式的相应组还不会被填充。因此,输入insertvisual,和normal模式来填充组,然后复制它们。您可以在hl命令的输出底部找到它们。然后,将它们粘贴到您的reload.vim中,并将它们修改为合法的hl命令。
这听起来似乎是一个很大的工作,但它不是。这里有一个gist与完整的reload.vim,和一些gifs,以指导您通过。

x3naxklr

x3naxklr7#

我遇到了类似的情况,我通过确保这些问题的顺序正确来解决:

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。希望这有助于别人了,因为我已经花了相当多的时间试图让这个现场重新加载工作。也要确保你有最新版本的solarized主题。我知道这似乎平凡的提及,但它可能会有所不同。

k2fxgqgv

k2fxgqgv8#

我猜这些突出显示是由某个插件定义/更改的。:colorscheme的重新执行会重置这些定义。插件必须用:autocmd挂钩到ColorScheme事件,但大多数插件都不这样做。
要解决此问题,请尝试将:colorscheme Package 在保护中:

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

相关问题