2014-07-18 1 views
1

Vim에서는 colorscheme이 변경 될 때 함께 주어진 언어에 대한 구문 색상 규칙을 변경할 수 있습니까?Vim : colorscheme을 변경할 때 구문 색상 규칙을 변경하십시오.

내가 빔의 착색 MATLAB 코드 일부 플러그인 설치 : 여기

는 일례이다. 다음 파일을 여러 개 제공합니다 :

.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 
(...) 

하지만 솔라리에 색상 구성표를 변경할 때 아무 반응이 없습니다. 그런 다음이 스크립트를 .vim/after/syntax/에 넣으려고했지만 행운도 없습니다.

solarized 코드 또는 다른 colorscheme 코드를 변경해야만 원하는 것을 얻을 수 있다고 가정하지만 간단히 볼 수는 없습니다. colorscheme이 변경 될 때 어떤 파일/스크립트가 실행되는지 이해하려면 vim 스크립팅에 대해 충분히 알지 못합니다. 아마도 .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'를 추가하면 제대로 작동합니다. 질문에 대답하기 위해, 같은 액자에서 다른 파일 형식을 열었을 때 때때로 색 범주를 변경하지만 colorscheme의 변경이 자주 발생하지 않습니다. 그래도 colorscheme을 변경하면 문제가 발생할 수 있다는 것을 알지 못했습니다. 어쩌면 저에게 모범을 보이시겠습니까? – islijepcevic

+1

일부 플러그인은 새 하이라이트 그룹을 정의합니다 (링크가 아닌 명시적인 색상이 있음). ': colorscheme' 스위치는 그것들을 지우는 역할을합니다; 그들은': autocmd'에 연결해야하지만, 일부는 이것을하지 못합니다. –

관련 문제