定义自定义Sublime Text 2片段的范围

当我试图写我自己的Sublime Text 2片段时,遇到以下两个问题:

  1. 查找范围键 。 我发现我可以一个一个的浏览我的包,find一个声明的“范围”属性的引用。 例如在~/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是否可以在任何可以更容易引用的地方build立一个列表? 通过一堆包文件来仔细阅读看起来过于繁琐。

  2. 定义多个范围属性 。 这我已经想通了,下面的行允许我的代码段在HTML和JavaScript文件中工作。

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

查看光标位置的当前范围

  1. 将光标置于您想要了解范围的文件中。
  2. 使用这个键盘快捷方式:

    Windowsctrl + shift + alt + p
    Mac: ctrl + shift + p

  3. 当前范围将显示在Windows状态栏的左侧,或在Mac上的popup窗口中显示。

将这些用作foo.sublime-snippet文件中的<scope>键。

返回的作用域被列为通用的具体。 select最适合将片段“作用于”片段的范围,以便将片段放置到可用于选项卡触发器的位置。

这是一个在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 

如果缺less任何东西,请将其添加到https://gist.github.com/4705378

Isaac Muse有一个名为Scope Hunter的软件包,对此非常有帮助。

它可以显示文档中任何光标下的范围,在debugging我自己的代码片段时,我发现它非常有帮助。 有时候非常详细。 来自我最前面的文档的范例:

 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中的列表,所以我有一个片段,当我在列表环境中按超级input时,插入一个新的\item ,但没有其他人。 我可以比盲目猜测更有效地定位片段。

源代码在Github中 ,或者你可以通过包控制安装它。

实际上,您可以使用Ctrl + Alt + Shift + P(不使用Scope Hunter),它会显示Col / Line信息后面左侧底栏上的范围。 这是相当小的打印,但它在那里。

要回答#1,请查看语法的.tmLanguage文件,查找关键字: scopeName 。 这是语法用于片段的作用域值的内容。

例如,来自nathos / sass-textmate-bundle的摘录

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

所以你可以在你的代码片段中使用source.sass

这里是定义语法的更多信息