Ответ 1
Недавно я навязчиво обманул выделение синтаксиса ST2 CSS. Мое понимание этих файлов *.tmLanguage основано на пробной версии и ошибке - в основном на ошибке. Я упоминаю об этом, чтобы отметить, что моя хватка является пятнистой, в лучшем случае.
Я думаю, что файл, который вы хотите изменить, ~/Library/Application Support/Sublime Text 2/Packages/Default/Find Results.hidden-tmLanguage
Короче говоря, я думаю, вы хотите настроить его, как этот gist (который имеет либеральные комментарии):
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>
. Я думаю.
В любом случае, gist определяет несколько из этих блоков начального шаблона, по одному для каждого типа и синтаксиса XML, HTML, JavaScript и CSS. Регулярное выражение <being>
соответствует строке с именем файла и определенным расширением файла. Это используется для создания начала "контекста" для данного синтаксиса. Контекст заканчивается, когда совпадают элементы в последующем повторении соответствия <patterns>
и регулярное выражение <end>
. Я думаю, вы в основном просто хотите, чтобы это отразилось на тех синтаксисах, которые вы хотите выделить в поиске результатов...
Вот скриншот синтаксически подсвеченных результатов поиска. Я получаю использование этого gist:
Я должен отметить, что большая проблема, с которой я столкнулся, - это когда комментарий блока начинается в выдержке, но выдержка не включает символы, которые заканчивают комментарий блока. Комментарий блока продолжается до тех пор, пока конечный токен не встречается где-то еще в результатах поиска. Это также распространяется на последующие поиски.
Update:
Я хотел добавить, что вам не нужно перекомпилировать что-либо при запуске. Хотя, стоит упомянуть, что вам нужно перезапустить возвышенное, чтобы изменения в Find Results.hidden-tmLanguage
вступили в силу. Если вы сделаете это плагин какого-то рода, похоже, что изменения состоят в основном из добавления новых языков, которые могут быть просто нечастым обновлением плагинов.