Определение возможностей для настраиваемых фрагментов Sublime Text 2

При попытке написать мои собственные фрагменты для Sublime Text 2, я столкнулся с двумя следующими проблемами:

  • Поиск ключей области действия. Я понял, что могу просматривать свои пакеты один за другим и находить ссылки на объявленное свойство "scope". Например, в ~/Library/Application Support/Sublime Text 2/Packages/JavaScript/Comments.tmPreferences (файл в моем пакете HTML) есть две строки:

    <key>scope</key>
    <string>source.js</string>
    

    Итак, если я хочу, чтобы мой текущий фрагмент работал с файлами javascript, я определяю свою область видимости следующим образом:

    <scope>source.js</scope>
    

    Я предполагаю, что все эти ключи сферы действия определены "на лету" на основе того, какие пакеты я установил. Создает ли Sublime Text список в любом месте, с которым я могу более легко ссылаться? Прослушивание через кучу файлов пакетов кажется слишком утомительным.

  • Определение свойств нескольких областей. Это я понял, и следующая строка позволяет моему фрагменту работать как в файлах HTML, так и в JavaScript.

    <scope>text.html, source.js</scope>
    

Ответ 1

Просмотр текущего объема положения курсора

  • Поместите курсор в файл, где вы хотите узнать область действия.
  • Используйте эту комбинацию клавиш:

    Windows: ctrl + shift + alt + p
    Mac: ctrl + shift + p

  • Текущая область будет отображаться в левой части строки состояния в Windows или во всплывающем окне на Mac.

Используйте их как <scope> в вашем файле foo.sublime-snippet.

Возвращенные области перечислены как общие для конкретных. Выберите область (области), которая наилучшим образом "привязана" к фрагменту, где он должен быть доступен для запуска табуляции.

Ответ 2

Ниже приведен список областей, используемых в фрагментах Sublime Text 2 -

ActionScript: source.actionscript.2
AppleScript: source.applescript
ASP: source.asp
Batch FIle: source.dosbatch
C#: source.cs
C++: source.c++
Clojure: source.clojure
CoffeeScript: source.coffee
CSS: source.css
D: source.d
Diff: source.diff
Erlang: source.erlang
Go: source.go
GraphViz: source.dot
Groovy: source.groovy
Haskell: source.haskell
HTML: text.html(.basic)
JSP: text.html.jsp
Java: source.java
Java Properties: source.java-props
Java Doc: text.html.javadoc
JSON: source.json
Javascript: source.js
BibTex: source.bibtex
Latex Log: text.log.latex
Latex Memoir: text.tex.latex.memoir
Latex: text.tex.latex
LESS: source.css.less
TeX: text.tex
Lisp: source.lisp
Lua: source.lua
MakeFile: source.makefile
Markdown: text.html.markdown
Multi Markdown: text.html.markdown.multimarkdown
Matlab: source.matlab
Objective-C: source.objc
Objective-C++: source.objc++
OCaml campl4: source.camlp4.ocaml
OCaml: source.ocaml
OCamllex: source.ocamllex
Perl: source.perl
PHP: source.php
Regular Expression(python): source.regexp.python
Python: source.python
R Console: source.r-console
R: source.r
Ruby on Rails: source.ruby.rails
Ruby HAML: text.haml
SQL(Ruby): source.sql.ruby
Regular Expression: source.regexp
RestructuredText: text.restructuredtext
Ruby: source.ruby
SASS: source.sass
Scala: source.scala
Shell Script: source.shell
SQL: source.sql
Stylus: source.stylus
TCL: source.tcl
HTML(TCL): text.html.tcl
Plain text: text.plain
Textile: text.html.textile
XML: text.xml
XSL: text.xml.xsl
YAML: source.yaml

Если чего-то не хватает, добавьте его в этот gist https://gist.github.com/4705378.

Ответ 3

Там есть пакет под названием Scope Hunter, Isaac Muse, который действительно полезен для этого.

Он может отображать область видимости под любым курсором в документе, который я нашел очень полезным при отладке моих собственных фрагментов. Иногда он очень подробный; образец области из моего первого документа:

Scope: text.tex.latex
       meta.function.environment.list.latex
       meta.function.environment.general.latex
       meta.function.environment.math.latex
       string.other.math.block.environment.latex
       meta.group.braces.tex
       meta.space-after-command.latex

(Обернутый для удобства чтения)

Я бы не смог найти это, если бы я потратил неделю на выбор SL2, но этот пакет получает его за считанные секунды. Очень рекомендуется.

Этот уровень детализации также означает, что вы можете определить фрагменты очень гранулированным способом, если хотите. Например, meta.function.environment.list.latex в целом соответствует спискам в LaTeX, поэтому у меня есть фрагмент, который вставляет новый \item, когда я нажимаю super + enter в среде списка, но никто другой. Я могу ориентировать фрагменты гораздо эффективнее, чем на слепые догадки.

Исходный код в Github, или вы можете установить его через Управление пакетами.

Ответ 4

На самом деле вы можете использовать Ctrl + Alt + Shift + P (без использования Scope Hunter), и он покажет вам область на нижней панели в левой части справа после информации Col/Line. Это довольно мелкий шрифт, но он там.

Ответ 5

Чтобы ответить, # 1, посмотрите в файле .tmLanguage синтаксиса, найдите ключ: scopeName. Это то, что использует синтаксис для значения области снимка.

Например, выдержка из nathos/sass-textmate-bundle

<key>scopeName</key>
<string>source.sass</string>

Итак, вы использовали бы source.sass в своем фрагменте.

Подробнее о определении синтаксиса