2015-05-03 103 views
2

我在vim中使用了一个语法文件,它定义了许多文件类型特定的语法关键字。要为此类型的文件着色,我还为共享目录创建了一个colorscheme文件,它试图突出显示这些语法关键字,但是当我打开该扩展名的文件时,它们不会生效。在Vim中为自定义语法关键字设置颜色?

我的彩色文件但不突出正常群体,如NormalSpecialComment等同样,当我尝试将这些亮点命令我.vimrc文件,他们仍然没有任何效果。但是,在vim中加载文件后,手动输入高亮命令将按预期工作。

为了使用在语法文件中定义的语法关键字,我需要做些特殊的事情吗?我是否需要在我的.vimrc中指定我的语法文件&颜色文件的加载顺序?

编辑:使用:scriptnames,我能够看到我的自定义colorscheme文件加载很久之前的语法文件,实际上加载死亡最后。但是,我的.vimrc文件指定colorscheme CustomPersonal作为最后一行,在syntax on之后。

+0

噢,不错,这个伎俩。正如你所建议的那样,我最终创建了'〜/ .vim/after/syntax/ .vim'文件,但是它只是一行'colorscheme CustomPersonal'。如果您将此作为答案提交,我会标记它为你! – bwerks

回答

1

当你第一次启动Vim时,你的.vimrc将会运行;在文件加载之前,语法文件不会被应用,它听起来像是覆盖了你的设置。

取而代之,您可以将自定义配色方案置于~/.vim/after/syntax/<filetype>.vim而不是CustomPersonal.vim(或至少从那里调用)。

另一种替代方法是将autocmd添加到您的.vimrc以响应合适的事件来源CustomPersonal.vim

+0

标记为答案。谢谢!出于好奇,那么关于autocmd和事件呢? – bwerks

+0

请参阅':h:au'。如果这些设置在其他地方被覆盖并且您不确定其中的位置(例如,您可以在每次进入窗口时添加autocmd以更改某些设置),则这可以用于重新应用设置。但是这更笨拙! –

2

Vim有一个覆盖语法组的内置机制,所以如果你做的一切都正确(即使在你的~/.vimrc),这应该工作。 @MatthewStrawbridge建议的解决方案可能会工作,但感觉不对,因为colorschemes在Vim中是global,因此不应在ftplugin中指定。

这里是压倒一切的工作原理是:

大多数文件类型(如python)在Vim中附带定义高亮组(看到他们通过:highlight)语法。这些特定的组(例如pythonFunction)然后是链接到一组默认组(:help highlight-groups,例如Identifier)。 A colorscheme然后提供用于默认组的前景/背景颜色和/或格式的组合,如粗体和斜体(分别用于终端,彩色终端和/或GVIM)。

高亮组→默认组→色+风格
pythonFunctionIdentifierterm=underline ctermfg=3 guifg=DarkCyan

所以,一组漂亮的配色是取悦你的个人品味,你可以选择色彩方案。为了调整某些特定的关联,您可以更改高亮组到默认组的链接,例如,:

:hi link pythonFunction Special 

这已经可以在~/.vimrc中完成。只要语法脚本正确使用:hi def link,您建立的原始链接将被保留; def[ault]参数确保只有在没有链接时才会创建链接。