TL; DR:
È definito nei file di sintassi PHP e HTML di Vim. Per vedere come aggiungere regole per CSS, vai alla sezione E come posso aggiungerle? di seguito o continua a leggere per una spiegazione di come funziona.
Dove vengono definite queste regole di sintassi?
L'eredità JavaScript viene evidenziata utilizzando la funzione di sintassi contains
1 di Vim , che consente ai gruppi di sintassi di contenere altri gruppi di sintassi.
Per trovare dove è definito, apri prima il file di evidenziazione della sintassi per PHP:
:e $VIMRUNTIME/syntax/php.vim
Ora, presumibilmente, il file di sintassi sta trovando l'ereditarietà JavaScript basato su una corrispondenza della stringa "javascript", quindi proviamo a cercarlo:
/javascript
La terza partita è questo commento:
" including HTML,JavaScript,SQL even if not enabled via options
Sembra promettente! Diamo un'occhiata alla riga di sintassi pertinente:
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
( continuazioni di riga aggiunte per una lettura più semplice )
Okay, allora questa regione sintassi trova il heredoc JavaScript con un'espressione regolare contorto, e permette JavaScript evidenziando all'interno della regione includendo la @htmlJavascript
sintassi cluster
2 all'interno della contains
discussione.
Ma non esiste una definizione corrispondente per gli heredocs CSS! Aggiungiamo uno. Quindi la prima cosa da cambiare è l' start
espressione regolare. Cambia semplicemente javascript
in css
:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
Questo è facile!
Ma non vogliamo evidenziare JavaScript nella nostra eredità CSS. Quindi dobbiamo anche cambiare l' @htmlJavascript
equivalente CSS. Ma qual è l'equivalente CSS? (Potresti essere in grado di indovinare, ma esaminiamo i movimenti per essere sicuri.)
Consente di cercare htmljavascript
3 per vedere dove è definito:
/htmljavascript
Hmmm. Nessun altro risultato Deve essere definito altrove! Diamo una rapida occhiata nella parte superiore del file per vedere se possiamo trovare eventuali include:
runtime! syntax/html.vim
Sembra che potrebbe essere 4 .
:e $VIMRUNTIME/syntax/html.vim
Esegui nuovamente la ricerca in questo file e troviamo questa riga 5 :
syn cluster htmlJavaScript add=@htmlPreproc
Quindi htmlJavaScript è un cluster
, definito in html.vim
. Esiste un cluster simile per CSS che possiamo usare?
/htmlcss
Sì!
syn include @htmlCss syntax/css.vim
Quindi dobbiamo solo sostituire @htmlJavascript
con @htmlCss
l' contains
argomento:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
E come posso aggiungerli?
Salvare l'intero comando di sintassi di seguito nel file in ~/after/syntax/php.vim
modo che venga eseguito dopo che il resto dell'elaborazione della sintassi PHP è stato eseguito e il gioco è fatto!
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: vedi :help :syn-contains
per i dettagli.
2: Vedi :help :syn-cluster
.
3: ho 'ignorecase'
acceso. Senza di esso, dovrai cercare htmlJavascript
o \chtmljavascript
4: infatti, in base allo schema di denominazione utilizzato nei file di sintassi di Vim, probabilmente avremmo potuto capirlo in base al htmlJavascript
solo nome.
5: Con "JavaScript" maiuscolo, questa volta. Fortunatamente ci siamo 'ignorecase'
accesi, eh?
// This should be syntax-highlighted
non è un commento CSS valido e quindi dovrebbe essere evidenziata la sintassi come qualcosa di diverso da un commento. CSS supporta solo/* */
commenti su più righe.//
i commenti a riga singola sono supportati solo se si utilizzano lingue preprocessore come Sass o Stilo.