2014-07-18 42 views
1

在Vim中,是否可以在colorscheme更改时一起更改给定语言的语法着色规则?Vim:在更改颜色方案时更改语法着色规则

下面是一个例子:

我安装在Vim中着色matlab代码一些插件。它提供了几个.vim文件:

.vim/colors/matlabdark.vim 
.vim/colors/matlablight.vim 
.vim/ftplugin/matlab.vim 
.vim/indent/matlab.vim 
.vim/syntax/matlabcolours.vim 
.vim/syntax/matlab.vim 

它提供的colorschemes非常好。但是,我有时想使用不同的颜色格式,而当我应用其他颜色格式(例如日晒)时,逗号和分号的背景颜色太浓。我检查了.vim/syntax/matlab.vim,我看到逗号和分号分配给组SpecialKey

我尝试过编辑的.vim/syntax/matlab.vim一部分到:

syn match matlabComma  "," display 
syn match MatlabSemicolon ";" display 
(...) 
command -nargs=+ HiLink hi def link <args>  " creates HiLink command 
(...) 
if g:colors_name == 'solarized'    " added by me 
    HiLink matlabComma   Normal   " added by me 
    HiLink matlabSemicolonn Normal   " added by me 
else           " added by me 
    HiLink matlabComma   SpecialKey 
    HiLink matlabSemicolonn SpecialKey 
endif           " added by me 
(...) 

但是当我改变色彩方案,以solarized什么也没有发生。然后我试着把这个剧本写入.vim/after/syntax/,但也没有运气。

我想我需要以某种方式更改solarized或任何其他颜色方案的代码来实现我想要的,但我根本看不出如何。我对vim脚本知之甚少,无法理解在更改colorscheme时执行的文件/脚本。可能只有.vim/colors/<wanted_scheme>.vim脚本。

如果需要,matlab可以找到here

+0

HiLink是做什么用的? – FDinoff

+0

我认为它相当于'嗨链接',或'突出链接' – islijepcevic

+0

我发现'HiLink'来自哪里。问题中的代码会相应更新。 – islijepcevic

回答

1

问题是:HiLink命令扩展为:hi def link; def表示该命令只是在没有现成的情况下定义默认值。如果语法插件已经获得一次,那不再是这种情况,并且您的更改变得无效。

现在,如果您不介意操作脚本,请删除def,它应该可以工作。

另一种方法是重新定义通过由在色彩方案的变化触发:autocmd链接:

:autocmd ColorScheme * if g:colors_name == 'solarized' | hi link matlabComma Normal | else | hi link matlabComma SpecialKey | endif 

最后,你真的需要切换上飞colorschemes?有些插件无法正常处理,也没有。

+0

只是删除'def'似乎并不奏效,但在''.vimrc'中加入'autocmd'可以很好地工作。 为了回答你的问题,我有时会在同一vim中打开不同的文件类型时动态更改颜色格式,但colorcheme的更改不会经常出现。不过,我不知道改变色彩方案可能会造成问题。你可以举个例子吗? – islijepcevic

+1

一些插件为它们定义了新的高亮组(带有明确的颜色,而不仅仅是链接)。 ':colorscheme'开关会导致这些开关被清除;他们也需要挂钩到':autocmd',但有些不能这样做。 –