Недавно я навязчиво обманул подсветку синтаксиса CSS ST2. Мое понимание этих файлов *.tmLanguage основано на пробах и ошибках — в основном на ошибках. Я упоминаю об этом, чтобы отметить, что моя хватка в лучшем случае неоднородна.
Я думаю, что файл, который вы хотите изменить, это ~/Library/Application Support/Sublime Text 2/Packages/Default/Find Results.hidden-tmLanguage
Короче говоря, я думаю, вы хотите настроить это так (с либеральными комментариями):
https://gist.github.com/4333623#file-find-results-hidden-tmlanguage
Типичные результаты поиска в файлах будут выглядеть примерно так:
Searching 11 files for "feedback-assistance-form" (regex)
/_projects/___/group_reg.js:
60 });
61
62: $asstForm = $help.find('#feedback-assistance-form');
63
64 if (!$asstForm.length) {
65: console.log('WARN: Feedback assistance: #feedback-assistance-form not found');
66 return;
67 }
/_projects/___/group_register_help_tmpl.html:
6 <div id="group-reg-help">
7
8: <form id="feedback-assistance-form" class="js-popover help-content hide" action="{% url info.views.assistance_request %}" method="post">
9
10 <legend>Need Assistance?</legend>
3 matches across 2 files
Find Results.hidden-tmLanguage
анализирует результаты на 3 соответствующие части:
- Строка с именем файла
- Выделенная строка без совпадения
- Выделенная строка с совпадением
Правила для этого находятся в разделе <patterns>
:
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>^([^ ].*):$</string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>entity.name.filename.find-in-files</string>
</dict>
</dict>
</dict>
<dict>
<key>match</key>
<string>^ +([0-9]+) </string>
<key>captures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>constant.numeric.line-number.find-in-files</string>
</dict>
</dict>
</dict>
<dict>
<key>match</key>
<string>^ +([0-9]+):</string>
<key>captures</key>
<dict>
<key>1</key> <!-- capture group 1 -->
<dict>
<key>name</key> <!-- name it so it can be colored -->
<string>constant.numeric.line-number.match.find-in-files</string>
</dict>
</dict>
</dict>
</array>
Они просто просматривают файл, строка за строкой, и ищут совпадения. Если совпадение найдено, одно или несколько определений <key>name</key>
применяются к группе (группам) захвата совпадения, если таковые имеются. На эти определения name
ссылаются в файле определения темы (например, Monokai), и цвет применяется к символам, соответствующим названной группе захвата.
Приведенные выше шаблоны — это просто совпадения с группами захвата. Я думаю, что ограничением этого является то, что совпадение (или группы захвата) не может быть обработано дальше.
В сущности, применяются шаблоны формата:
<key>patterns</key>
<array>
<dict>
<key>begin</key>
<!-- add the filetype extensions, here -->
<!-- these are XML formatted files: -->
<string>^([^ ].*\.(?:xml|tmLanguage|hidden-tmLanguage|tmTheme):)$</string>
<key>beginCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>entity.name.filename.find-in-files</string>
</dict>
</dict>
<key>end</key>
<string>^[^ ]</string>
<key>patterns</key>
<array>
<dict>
<key>include</key>
<string>#line-numbers</string>
</dict>
<dict>
<key>include</key>
<!-- which syntax should match up to the filetype extensions listed above: -->
<!-- to find out what the "scopeName" is, refer to the corresponding *.tmLanguage file -->
<!-- for XML, this is ~/Library/Application Support/Sublime Text 2/Packages/XML/XSL.tmLanguage -->
<string>text.xml</string>
</dict>
</array>
</dict>
<!-- ... can have many more -->
</array>
Главное в этом типе паттерна то, что он имеет <begin>
и <end>
, затем у него есть своя секция <pattern>
. Когда регулярное выражение <begin>
сопоставляется, содержимое <patterns>
применяется до тех пор, пока (это то, где я действительно ошибаюсь) не встретится несопоставленный токен, после чего проверяется <end>
. Я думаю.
В любом случае суть определяет несколько таких блоков шаблонов начала-конца, по одному для каждого типа и синтаксиса файлов XML, HTML, JavaScript и CSS. Регулярное выражение <being>
соответствует строке с именем файла и определенным расширением файла. Это используется для создания начала «контекста» для данного синтаксиса. Контекст заканчивается, когда элементы в последующем блоке <patterns>
перестают совпадать и регулярное выражение <end>
совпадает. Я думаю, вы просто захотите конкретизировать это для любого синтаксиса, который вы хотите выделить в результатах поиска...
Вот скриншот результатов поиска с выделенным синтаксисом, которые я получаю, используя этот смысл:
Я должен отметить, что большая проблема, с которой я столкнулся, заключается в том, что блок-комментарий начинается в отрывке, но отрывок не включает символы, которыми заканчивается блок-комментарий. Блок-комментарий просто продолжается до тех пор, пока завершающий токен не встретится где-то еще в результатах поиска. Это распространяется и на последующие поиски.
Обновлять:
Я хотел добавить, что вам не нужно ничего перекомпилировать при запуске. Хотя стоит упомянуть, что вам необходимо перезапустить возвышенное, чтобы изменения в Find Results.hidden-tmLanguage
вступили в силу. Если вы сделаете это каким-то плагином, кажется, что изменения в основном будут заключаться в добавлении новых языков, что может быть просто нечастым обновлением плагина.
person
tiffon
schedule
19.12.2012