Переключить комментарий комментария при использовании пользовательского подсветки синтаксиса - PullRequest
0 голосов
/ 01 декабря 2018

Я попытался создать собственный синтаксис для Sublime.У меня есть эта строка из их учебника:

contexts:
  main:
    - match: '//'
      scope: punctuation.definition.comment.example-c
      push:
        # This is an anonymous context push for brevity.
        - meta_scope: comment.line.double-slash.example-c
        - match: $\n?
          pop: true

Это соответствует комментариям в моем сценарии точно так, как ожидалось.Тем не менее, ярлык, который я использовал для включения / выключения комментариев (Ctrl + /), не работает.Есть ли способ заставить ярлык Toggle Comments работать с пользовательским синтаксисом?

1 Ответ

0 голосов
/ 01 декабря 2018

Мета-информация о том, что такое комментарий, не приходит из синтаксиса, а из мета-информации в файле tmPreferences, который вы также должны создать самостоятельно.

Следуя приведенному выше примеру синтаксиса, это выглядело бы следующим образом (при необходимости измените scope на соответствующую область верхнего уровня):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>name</key>
  <string>Comments</string>
  <key>scope</key>
  <string>source.example-c</string>
  <key>settings</key>
  <dict>
    <key>shellVariables</key>
    <array>
      <dict>
        <key>name</key>
        <string>TM_COMMENT_START</string>
        <key>value</key>
        <string>// </string>
      </dict>
      <dict>
        <key>name</key>
        <string>TM_COMMENT_START_2</string>
        <key>value</key>
        <string>/*</string>
      </dict>
      <dict>
        <key>name</key>
        <string>TM_COMMENT_END_2</string>
        <key>value</key>
        <string>*/</string>
      </dict>
    </array>
  </dict>
  <key>uuid</key>
  <string>1d23fd10-e62f-4de8-a8d1-42e64e3f5fb7</string>
</dict>
</plist>

Имя, которое вы даете файлу, нене имеет значения, только расширение (и то, что оно будет сохранено в пакете; поместите его в свой пакет User, если у вас уже нет определенного пакета).Общее соглашение - что-то вроде Comments.tmPreferences в корне пакета, который содержит синтаксис.

Это показывает две вещи;Во-первых, что может быть более одного элемента TM_COMMENT_START -типа, и что он также может быть в паре с соответствующим элементом TM_COMMENT_END.

При использовании отдельно, например, TM_COMMENT_START, комментарийявляется строковым комментарием, в то время как при использовании в паре вы указываете, что комментарий является блочным комментарием, для которого требуется пара начала и конца.

Sublime использует один или другой в зависимости от аргументов команды, котораягенерирует комментарии, если это возможно.Таким образом, если есть два определенных (как здесь), то вы получите строчный комментарий, если нет выделенного текста, и в этом случае вы получите блочный комментарий.

Если определен только комментарий к строке или комментарий к блоку, вы получите только этот стиль комментария и ничего больше.Вот почему HTML только комментирует блоки и обрабатывает отдельные строки как блоки, например.

Обратите также внимание, что может быть произвольное количество TM_COMMENT элементов / пар, но Sublime будет использовать только первую из каждойвведите автоматически.Плагины, которые вы пишете, могут получить доступ к остальным.

...