TL; DR:
Jest zdefiniowany w plikach składni PHP i HTML Vima. Aby zobaczyć, jak dodać reguły dla CSS, przejdź do sekcji I jak je dodać? poniżej lub czytaj dalej, aby wyjaśnić, jak to działa.
Gdzie są definiowane te reguły składniowe?
JavaScript heredoc jest podświetlany za pomocą funkcji Vima w składni contains
1 , która pozwala grupom składni zawierać inne grupy składniowe.
Aby dowiedzieć się, gdzie to jest zdefiniowane, najpierw otwórz plik podświetlania składni dla PHP:
:e $VIMRUNTIME/syntax/php.vim
Teraz prawdopodobnie plik składniowy znajduje heredoc JavaScript na podstawie dopasowania ciągu „javascript”, więc spróbujmy wyszukać:
/javascript
Trzeci mecz to ten komentarz:
" including HTML,JavaScript,SQL even if not enabled via options
Wygląda obiecująco! Rzućmy okiem na odpowiednią linię składni:
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
( dodano kontynuacje linii dla łatwiejszego czytania )
Okej, więc ten region składni znajduje heredoc JavaScript ze złożonym wyrażeniem regularnym i umożliwia wyróżnianie JavaScript w regionie, włączając @htmlJavascript
składnię cluster
2 do contains
argumentu.
Ale nie ma odpowiedniej definicji heredoków CSS! Dodajmy jeden. Pierwszą rzeczą do zmiany jest start
wyrażenie regularne. Po prostu zmień javascript
na css
:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
To jest łatwe!
Ale nie chcemy wyróżniać JavaScript w naszym heredoc CSS. Musimy także zmienić @htmlJavascript
ekwiwalent CSS. Ale jaki jest odpowiednik CSS? (Być może możesz zgadnąć, ale przejdźmy przez ruchy, aby się upewnić.)
Pozwala wyszukać htmljavascript
3, aby zobaczyć, gdzie to jest zdefiniowane:
/htmljavascript
Hmmm. Brak innych wyników. Musi zostać zdefiniowany gdzie indziej! Rzućmy okiem na górę pliku, aby zobaczyć, czy możemy znaleźć jakieś obejmuje:
runtime! syntax/html.vim
Wygląda na to, że to może być 4 .
:e $VIMRUNTIME/syntax/html.vim
Uruchom wyszukiwanie ponownie w tym pliku i znajdziemy ten wiersz 5 :
syn cluster htmlJavaScript add=@htmlPreproc
Więc htmlJavaScript jest cluster
, zdefiniowany w html.vim
. Czy istnieje podobny klaster dla CSS, którego możemy użyć?
/htmlcss
Tak!
syn include @htmlCss syntax/css.vim
Więc po prostu trzeba wymienić @htmlJavascript
ze @htmlCss
w contains
argumencie:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
A jak mogę je dodać?
Zapisz całą komendę składni poniżej w pliku, ~/after/syntax/php.vim
aby została uruchomiona po zakończeniu przetwarzania pozostałych składni PHP i gotowe!
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: Zobacz :help :syn-contains
szczegóły.
2: Zobacz :help :syn-cluster
.
3: Mam 'ignorecase'
włączony. Bez tego musisz szukać htmlJavascript
lub \chtmljavascript
4: W rzeczywistości, w oparciu o schemat nazewnictwa stosowany w plikach składniowych Vima, prawdopodobnie moglibyśmy to rozgryźć na podstawie htmlJavascript
samej nazwy.
5: Tym razem z „JavaScript” pisanymi wielkimi literami. Na szczęście mamy 'ignorecase'
włączone, co?
// This should be syntax-highlighted
nie jest poprawnym komentarzem CSS i dlatego należy wyróżnić składnię jako coś innego niż komentarz. CSS obsługuje tylko/* */
komentarze wieloliniowe.//
komentarze jednowierszowe są obsługiwane tylko wtedy, gdy używasz języków preprocesora, takich jak Sass lub Stylus.