Kiedy edytuję plik PHP i definiuję ciąg w heredoc, podświetlanie składni zostanie włączone wewnątrz heredoc, jeśli jest to składnia JavaScript lub HTML lub SQL. Jednak nie będzie działać dla składni CSS.
Przykład (jeśli tworzymy nowy plik PHP o nazwie hello.php
z następującym kodem):
<?php
$foo = <<<"JAVASCRIPT"
var hello = "hello";
JAVASCRIPT;
$bar = <<<"CSS"
/* This code below should be syntax-highlighted. */
.hello {
font-weight: bold;
}
CSS;
JAVASCRIPT
Blok jest zaznaczony poprawnie, ale CSS
blok nie jest. Ponadto, jeśli biegnę SynStack
na var
słowa kluczowego w bloku kodu JavaScript, mam ['phpRegion', 'phpHereDoc', 'javaScriptIdentifier']
, ale jeśli to zrobię to samo z dowolnego miejsca w bloku CSS, ja tylko dostać ['phpRegion', 'phpHereDoc']
, więc trzeba dodać trochę CSS podświetlanie składni reguł. Gdzie definiowane są te reguły składniowe i jak je dodać?
syntax-highlighting
filetype-php
MrSnrub
źródło
źródło
// 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.Odpowiedzi:
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:
Teraz prawdopodobnie plik składniowy znajduje heredoc JavaScript na podstawie dopasowania ciągu „javascript”, więc spróbujmy wyszukać:
Trzeci mecz to ten komentarz:
Wygląda obiecująco! Rzućmy okiem na odpowiednią linię składni:
( 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 docontains
argumentu.Ale nie ma odpowiedniej definicji heredoków CSS! Dodajmy jeden. Pierwszą rzeczą do zmiany jest
start
wyrażenie regularne. Po prostu zmieńjavascript
nacss
: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: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:
Wygląda na to, że to może być 4 .
Uruchom wyszukiwanie ponownie w tym pliku i znajdziemy ten wiersz 5 :
Więc htmlJavaScript jest
cluster
, zdefiniowany whtml.vim
. Czy istnieje podobny klaster dla CSS, którego możemy użyć?Tak!
Więc po prostu trzeba wymienić
@htmlJavascript
ze@htmlCss
wcontains
argumencie: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!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?źródło