2014-07-18 78 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',但有些不能這樣做。 –