【发布时间】:2020-04-02 03:24:09
【问题描述】:
我正在使用 vim 8.1,在编写 C 代码时,我注意到我所有的花括号都使用红色背景和白色前景。经过一番挖掘,我在我的主题中找到了这个设置:
call s:hi('Error', { 'fg': s:white, 'bg': s:red })
通过在此处修改颜色,我已经确认这是颜色的来源。
由于这被记录为语法错误,并且我的 vimrc 中有 syntax on,我很困惑为什么我的花括号显示为语法错误。即使在非常简单的代码中也会发生这种情况,例如:
int main(int argc, char **argv)
{
return 0;
}
我很困惑为什么这显示为错误。如果我将左大括号放在主定义的末尾或之后,就会发生这种情况。如果我运行clist vim 告诉我没有错误。 vimrc 可见于:https://pastebin.com/LukL8MBg
编辑 1: 在进一步挖掘中,问题似乎与我正在使用的颜色主题有关。有一个文件包含这个 for 语法:
syn keyword cDeclarationOverwrite var const type
syn match cBraces "[{}\[\]]"
syn match cParens "[()]"
syn match cOpSymbols "=\{1,2}\|!=\|<\|>\|>=\|<=\|++\|+=\|--\|-="
syn match cEndColons "[,]"
syn match cLogicSymbols "\(&&\)\|\(||\)\|\(!\)"
编辑 2:
在用户@filbranden 的推荐下,我运行了:scriptnames 并看到以下内容:
1: /usr/share/vim/vimrc
2: ~/.vimrc
3: ~/.vim/autoload/plug.vim
4: /usr/share/vim/vim81/filetype.vim
5: /usr/share/vim/vim81/ftplugin.vim
6: /usr/share/vim/vim81/indent.vim
7: /usr/share/vim/vim81/syntax/syntax.vim
8: /usr/share/vim/vim81/syntax/synload.vim
9: /usr/share/vim/vim81/syntax/syncolor.vim
10: ~/.vim/plugins/purify/vim/colors/purify.vim
11: ~/.vim/plugins/purify/vim/autoload/purify.vim
12: /usr/share/vim/vim81/plugin/getscriptPlugin.vim
13: /usr/share/vim/vim81/plugin/gzip.vim
14: /usr/share/vim/vim81/plugin/logiPat.vim
15: /usr/share/vim/vim81/plugin/manpager.vim
16: /usr/share/vim/vim81/plugin/matchparen.vim
17: /usr/share/vim/vim81/plugin/netrwPlugin.vim
18: /usr/share/vim/vim81/plugin/rrhelper.vim
19: /usr/share/vim/vim81/plugin/spellfile.vim
20: /usr/share/vim/vim81/plugin/tarPlugin.vim
21: /usr/share/vim/vim81/plugin/tohtml.vim
22: /usr/share/vim/vim81/plugin/vimballPlugin.vim
23: /usr/share/vim/vim81/plugin/zipPlugin.vim
24: /usr/share/vim/vim81/autoload/dist/ft.vim
25: /usr/share/vim/vim81/ftplugin/c.vim
26: /usr/share/vim/vim81/indent/c.vim
27: ~/.vim/plugins/purify/vim/syntax/c.vim
28: /usr/share/vim/vim81/syntax/c.vim
Press ENTER or type command to continue
从这里的情况来看,来自 purify 插件的 c.vim 在最后加载的 vim 的 syntax/c.vim 之前加载。
:set rtp? 的输出显示:
runtimepath=~/.vim,~/.vim/plugins/purify/vim,/usr/share/vim/vimfiles,/usr/share/vim/vim81,/usr/share/vim/vimfiles/after,~/.vim/after
谁能解释为什么会这样?
【问题讨论】:
-
如果将
{放在上一行的末尾会怎样?这可能是一种风格警告。 -
无论我把牙套放在哪里,都不一样。
-
您介意分享您的 vimrc 文件吗?
-
当我的代码中有不匹配的东西或其他地方时,我会得到有趣的颜色效果。例如,如果在
main()之前的函数声明中有错误,您可能会看到奇怪的颜色。但是,如果您在显示的代码上看到它(并且文件中没有其他代码),那么您在 vimrc 设置中使用的点点滴滴可能有误——祝您调试好运。 -
@filbranden 设置删除了左花括号上的错误,但在右花括号上仍然显示错误。如果您能够理解问题所在,感谢您的帮助。