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 contains
1 ö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 @htmlJavascript
sözdizimi cluster
2 içinde contains
argüman.
Ancak CSS heredocs için uygun bir tanım yoktur! Bir tane ekleyelim. Bu yüzden değiştirilecek ilk şey start
düzenli ifadedir. Basitçe değiştirmek javascript
içine css
:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
Bu kolay!
Ancak, CSS yorumunda JavaScript'in vurgulanmasını istemiyoruz. Bu yüzden de @htmlJavascript
CSS 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 htmljavascript
3'ü 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 @htmlJavascript
ile @htmlCss
de contains
argüman:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
Onlara nasıl ekleyebilirim?
Aşağıdaki sözdizimi komutunun tamamını ~/after/syntax/php.vim
PHP 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-contains
için bakınız.
2: Bkz :help :syn-cluster
.
3: 'ignorecase'
Açtım. Onsuz, htmlJavascript
ya da \chtmljavascript
4'ü aramanız gerekir : Aslında, Vim sözdizimi dosyalarında kullanılan adlandırma şemasına göre, muhtemelen bunu sadece htmlJavascript
isme 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-highlighted
geç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.