TL; DR:
Il est défini dans les fichiers de syntaxe PHP et HTML de Vim. Pour voir comment ajouter des règles CSS, passez à la section Et comment les ajouter? ci-dessous, ou lisez la suite pour une explication de son fonctionnement.
Où ces règles de syntaxe sont-elles définies?
L'hérédoc JavaScript est mis en évidence à l'aide de la fonction de syntaxe contains
1 de Vim , qui permet aux groupes de syntaxe de contenir d'autres groupes de syntaxe.
Pour trouver où cela est défini, ouvrez d'abord le fichier de coloration syntaxique pour PHP:
:e $VIMRUNTIME/syntax/php.vim
Maintenant, on peut supposer que le fichier de syntaxe trouve l'hérédoc JavaScript basé sur une correspondance de la chaîne "javascript", alors essayons de le rechercher:
/javascript
Le troisième match est ce commentaire:
" including HTML,JavaScript,SQL even if not enabled via options
Cela semble prometteur! Jetons un coup d'œil à la ligne de syntaxe appropriée:
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
( ajout de continuations de ligne pour une lecture plus facile )
D'accord, cette région de syntaxe trouve donc l'hérédoc JavaScript avec une expression régulière alambiquée et permet la mise en évidence de JavaScript dans la région en incluant la @htmlJavascript
syntaxe cluster
2 dans l' contains
argument.
Mais il n'y a pas de définition correspondante pour les heredocs CSS! Permet d'en ajouter un. La première chose à changer est donc l' start
expression régulière. Changez simplement le javascript
en css
:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
C'est facile!
Mais nous ne voulons pas que JavaScript soit mis en évidence dans notre hérédoc CSS. Nous devons donc également modifier l' @htmlJavascript
équivalent CSS. Mais qu'est - ce que l'équivalent CSS? (Vous pourriez peut-être deviner, mais passons en revue les motions pour en être sûr.)
Permet de rechercher htmljavascript
3 pour voir où cela est défini:
/htmljavascript
Hmmm. Aucun autre résultat. Il faut le définir ailleurs! Jetons un coup d'œil en haut du fichier pour voir si nous pouvons trouver des inclusions:
runtime! syntax/html.vim
On dirait que ça pourrait être ça 4 .
:e $VIMRUNTIME/syntax/html.vim
Exécutez à nouveau la recherche dans ce fichier, et nous trouvons cette ligne 5 :
syn cluster htmlJavaScript add=@htmlPreproc
Donc htmlJavaScript est un cluster
, défini dans html.vim
. Existe-t-il un cluster similaire pour CSS que nous pouvons utiliser?
/htmlcss
Ouaip!
syn include @htmlCss syntax/css.vim
Il nous suffit donc de remplacer @htmlJavascript
par @htmlCss
dans l' contains
argument:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
Et comment puis-je y ajouter?
Enregistrez l'intégralité de la commande de syntaxe ci-dessous dans le fichier ~/after/syntax/php.vim
afin qu'elle soit exécutée une fois le reste du traitement de syntaxe PHP terminé, et vous avez terminé!
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: Voir :help :syn-contains
pour plus de détails.
2: Voir :help :syn-cluster
.
3: Je suis 'ignorecase'
allumé. Sans cela, vous devrez rechercher htmlJavascript
ou \chtmljavascript
4: En fait, sur la base du schéma de dénomination utilisé dans les fichiers de syntaxe Vim, nous aurions probablement pu comprendre cela en fonction du htmlJavascript
seul nom.
5: Avec "JavaScript" en majuscule différemment, cette fois. Heureusement que nous sommes 'ignorecase'
allumés, hein?
// This should be syntax-highlighted
n'est pas un commentaire CSS valide, et la syntaxe doit donc être mise en surbrillance comme autre chose qu'un commentaire. CSS ne prend en charge que/* */
les commentaires sur plusieurs lignes.//
les commentaires sur une seule ligne ne sont pris en charge que si vous utilisez des langages de préprocesseur tels que Sass ou Stylus.