Когда я редактирую файл PHP и определяю строку в heredoc, подсветка синтаксиса будет включена внутри heredoc, если это синтаксис JavaScript, синтаксис HTML или синтаксис SQL. Однако это не будет работать для синтаксиса CSS.
Пример (если мы создадим новый файл PHP hello.php
с именем следующего кода):
<?php
$foo = <<<"JAVASCRIPT"
var hello = "hello";
JAVASCRIPT;
$bar = <<<"CSS"
/* This code below should be syntax-highlighted. */
.hello {
font-weight: bold;
}
CSS;
JAVASCRIPT
Блок выделен правильно, но CSS
блок не является. Кроме того , если я бегу SynStack
на var
ключевое слово на блоке кода JavaScript, я получаю ['phpRegion', 'phpHereDoc', 'javaScriptIdentifier']
, но если бы я сделать то же самое в любое место в блоке CSS, я только получаю ['phpRegion', 'phpHereDoc']
, так что мне нужно добавить некоторые CSS правила подсветки синтаксиса. Где определяются эти правила синтаксиса и как их добавить?
syntax-highlighting
filetype-php
MrSnrub
источник
источник
// This should be syntax-highlighted
это недопустимый комментарий CSS, поэтому синтаксис должен быть выделен как нечто иное, чем комментарий. CSS поддерживает только/* */
многострочные комментарии.//
однострочные комментарии поддерживаются, только если вы используете языки препроцессора, такие как Sass или Stylus.Ответы:
TL; DR:
Это определено в файлах синтаксиса Vim PHP и HTML. Чтобы увидеть, как добавить правила для CSS, перейдите к разделу А как мне добавить к ним? ниже, или читайте дальше для объяснения того, как это работает.
Где определяются эти правила синтаксиса?
Heredoc JavaScript выделяется с помощью функции синтаксиса
contains
1 Vim , которая позволяет группам синтаксиса содержать другие группы синтаксиса.Чтобы узнать, где это определено, сначала откройте файл подсветки синтаксиса для PHP:
Теперь, предположительно, файл синтаксиса находит heredoc JavaScript на основе совпадения строки «javascript», поэтому давайте попробуем найти это:
Третий матч это комментарий:
Выглядит многообещающе! Давайте посмотрим на соответствующую строку синтаксиса:
( добавлены продолжения строки для удобства чтения )
Итак, эта область синтаксиса находит наследственный JavaScript-код с извилистым регулярным выражением и позволяет выделять JavaScript внутри области путем включения
@htmlJavascript
синтаксисаcluster
2 вcontains
аргумент.Но нет соответствующего определения для CSS heredocs! Давайте добавим один. Поэтому первое, что нужно изменить, - это
start
регулярное выражение. Просто изменитеjavascript
наcss
:Это легко!
Но мы не хотим выделять JavaScript в нашем CSS-наследии. Поэтому нам также нужно изменить
@htmlJavascript
эквивалент CSS. Но что такое CSS-эквивалент? (Вы можете догадаться, но давайте рассмотрим движения, чтобы быть уверенным.)Давайте посмотрим на
htmljavascript
3, чтобы увидеть, где это определено:Хммм. Других результатов нет. Это должно быть определено в другом месте! Давайте кратко рассмотрим верхнюю часть файла, чтобы увидеть, можем ли мы найти какие-либо включения:
Похоже, что это может быть 4 .
Запустите поиск снова в этом файле, и мы находим эту строку 5 :
Итак, htmlJavaScript - это
cluster
, определенный вhtml.vim
. Есть ли подобный кластер для CSS, который мы можем использовать?Ага!
Поэтому нам просто нужно заменить
@htmlJavascript
с@htmlCss
вcontains
аргументе:И как мне к ним добавить?
Сохраните всю синтаксическую команду ниже в файле,
~/after/syntax/php.vim
чтобы она запускалась после того, как остальная часть синтаксической обработки PHP была выполнена, и все готово!1:
:help :syn-contains
подробности см.2: Видите
:help :syn-cluster
.3: я
'ignorecase'
включен. Без него вам придется искатьhtmlJavascript
или\chtmljavascript
4: На самом деле, основываясь на схеме именования, используемой в файлах синтаксиса Vim, мы, вероятно, могли бы выяснить это, основываясь только на
htmlJavascript
одном имени.5: На этот раз с "JavaScript" заглавными буквами по-другому. К счастью, нас
'ignorecase'
включили, а?источник