在Vim中,是否可以在更改colorscheme时更改给定语言的语法着色规则?
以下是一个例子:
我在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
(...)
但是当我将colorscheme改为曝光时没有任何反应。然后我尝试将此脚本放入.vim/after/syntax/
,但也没有运气。
我想我需要以某种方式更改solarized
的代码或任何其他颜色方案以实现我想要的,但我根本无法看到。我不太了解vim脚本,以了解在更改colorscheme时执行的文件/脚本。可能只有.vim/colors/<wanted_scheme>.vim
脚本。
如果需要,可以找到matlab here。
答案 0 :(得分:1)
问题是:HiLink
命令扩展为:hi def link
; def
表示该命令只定义默认值,以防没有现有的。如果语法插件已经被提取过一次,那就不再是这种情况,并且你的更改变得无效。
现在,如果您不介意操纵脚本,请删除def
,它应该可以正常工作。
另一种方法是通过由colorscheme更改触发的:autocmd
重新定义链接:
:autocmd ColorScheme * if g:colors_name == 'solarized' | hi link matlabComma Normal | else | hi link matlabComma SpecialKey | endif
最后,你真的需要动态切换色彩方案吗?有些插件不会优雅地处理它。