TL; DR:
Vim'in PHP ve HTML sözdizimi dosyalarında tanımlanmıştır. CSS için nasıl kural ekleneceğini görmek için, bölümüne atlayın Ve bunlara nasıl eklerim? veya nasıl çalıştığına dair bir açıklama için okumaya devam edin.
Bu sözdizimi kuralları nerede tanımlanıyor?
JavaScript yorumlu metin, sözdizimi gruplarının diğer sözdizimi gruplarını içermesine izin veren Vim'in sözdizimi contains1 özelliği kullanılarak vurgulanır .
Bunun nerede tanımlandığını bulmak için, önce PHP için sözdizimi vurgulama dosyasını açın:
:e $VIMRUNTIME/syntax/php.vim
Şimdi, sözdizimi dosyası JavaScript heredocunu "javascript" dizesinin eşleşmesine göre buluyor, bu yüzden şunu aramayı deneyelim:
/javascript
Üçüncü maç bu yorum:
" including HTML,JavaScript,SQL even if not enabled via options
Umut verici görünüyor! İlgili sözdizimi satırına bir göz atalım:
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
( kolay okuma için satır devamları eklendi )
Tamam, bu sözdizimi bölge kıvrık düzenli ifade ile JavaScript yorumlu metin bulur ve JavaScript dahil ederek bölgede vurgulayarak verir @htmlJavascriptsözdizimi cluster2 içinde containsargüman.
Ancak CSS heredocs için uygun bir tanım yoktur! Bir tane ekleyelim. Bu yüzden değiştirilecek ilk şey startdüzenli ifadedir. Basitçe değiştirmek javascriptiçine css:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
Bu kolay!
Ancak, CSS yorumunda JavaScript'in vurgulanmasını istemiyoruz. Bu yüzden de @htmlJavascriptCSS eşdeğerini değiştirmemiz gerekiyor . Ama ne olduğunu CSS eşdeğer? (Tahmin edebilirsiniz, ancak emin olmak için hareketleri gözden geçirelim.)
Nerede tanımlandığını görmek için htmljavascript3'ü arayalım:
/htmljavascript
Hmmm. Başka sonuç yok. Başka bir yerde tanımlanmalıdır! İçeriği bulabileceğimizi görmek için dosyanın üst kısmına hızlı bir göz atalım:
runtime! syntax/html.vim
4 olabilir gibi görünüyor .
:e $VIMRUNTIME/syntax/html.vim
Aramayı bu dosyada tekrar çalıştırın ve şu 5. satırı buluruz :
syn cluster htmlJavaScript add=@htmlPreproc
Yani htmlJavaScript cluster, içinde tanımlanan bir html.vim. Kullanabileceğimiz CSS için benzer bir küme var mı?
/htmlcss
Evet!
syn include @htmlCss syntax/css.vim
Yani biz sadece değiştirmeniz gerekiyor @htmlJavascriptile @htmlCssde containsargüman:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
Onlara nasıl ekleyebilirim?
Aşağıdaki sözdizimi komutunun tamamını ~/after/syntax/php.vimPHP sözdizimi işlemi gerçekleştirildikten sonra çalıştırılacak şekilde kaydedin ve işiniz bitti!
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlCss,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
1: Ayrıntılar :help :syn-containsiçin bakınız.
2: Bkz :help :syn-cluster.
3: 'ignorecase'Açtım. Onsuz, htmlJavascriptya da \chtmljavascript
4'ü aramanız gerekir : Aslında, Vim sözdizimi dosyalarında kullanılan adlandırma şemasına göre, muhtemelen bunu sadece htmlJavascriptisme göre çözmüş olabilirdik .
5: "JavaScript" bu sefer farklı şekilde büyük harfle yazılmıştır. Açtığımız için şanslıyım 'ignorecase', ha?
// This should be syntax-highlightedgeçerli bir CSS yorumu değildir ve bu nedenle sözdizimi bir yorumdan başka bir şey olarak vurgulanmalıdır. CSS yalnızca/* */çok satırlı yorumları destekler .//tek satırlı yorumlar yalnızca Sass veya Stylus gibi önişlemci dilleri kullanıyorsanız desteklenir.